接收的全部IP数据报个数
由于IP报头错误而被丢弃的输入IP数据报个数
由于目的IP地址无效而导致丢弃的输入IP数据报个数如果方便能不能给一点源程序,以供参考,谢谢各位
由于IP报头错误而被丢弃的输入IP数据报个数
由于目的IP地址无效而导致丢弃的输入IP数据报个数如果方便能不能给一点源程序,以供参考,谢谢各位
解决方案 »
- 到底哪里不对!?这段代码改了一个小时了。还是有错误,大家帮忙
- 高分请教 音频采集 回放 分不够可以另开!
- 可以用远程资源来建一个对象吗
- 兩個類,互相引用對方,怎麼編譯?
- 一个简单的例子?为什么结果会不同
- JDBC----哪位大虾能够教教小弟什么时候该执行connection.close;statement.close.......
- 如何拆分一个字符串???
- [IBM][JDBC Driver] CLI0620E IOException, error reading from input stream. SQLSTATE=428A1
- 修改目录权限
- 怎样才能把一个放在背后的jfc控件放到前面来,有相应的函数没?
- 测试mysql的jsp打不开?
- 请教:Java中图形显示的问题。。。
方案二:自行写代理程序(用C或C++),把代理安装到你要监控的机器上,代理截取本机接收到的IP数据包(就像sniffer一样),统计分析后把结果发送回管理站。
/************************Tcp_sniff_2.c********************/
1.#include
2.#include
3.#include
4.#include
5.#include
6.#include
7.#include
8.#include
9.#include "headers.h"
#define INTERFACE "eth0"
/*Prototype area*/
10.int Open_Raw_Socket(void);
11.int Set_Promisc(char *interface, int sock);
12.int main() {
13.int sock, bytes_recieved, fromlen;
14.char buffer[65535];
15.struct sockaddr_in from;
16.struct ip *ip;
17.struct tcp *tcp;
18.sock = Open_Raw_Socket();
19. Set_Promisc(INTERFACE, sock);
20. while(1)
22. {
23. fromlen = sizeof from;
24. bytes_recieved = recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen);
25. printf("\nBytes received ::: %5d\n",bytes_recieved);
26. printf("Source address ::: %s\n",inet_ntoa(from.sin_addr));
27. ip = (struct ip *)buffer;
/*See if this is a TCP packet*/
28. if(ip->ip_protocol == 6) {
29. printf("IP header length ::: %d\n",ip->ip_length);
30. printf("Protocol ::: %d\n",ip->ip_protocol);
31. tcp = (struct tcp *)(buffer + (4*ip->ip_length));
32. printf("Source port ::: %d\n",ntohs(tcp->tcp_source_port));
33. printf("Dest port ::: %d\n",ntohs(tcp->tcp_dest_port));
34. }
35. }
36.}
37.int Open_Raw_Socket() {
38. int sock;
39. if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) {
/*Then the socket was not created properly and must die*/
40. perror("The raw socket was not created");
41. exit(0);
42. };
43. return(sock);
44. }
45.int Set_Promisc(char *interface, int sock ) {
46. struct ifreq ifr;
47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1);
48. if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) {
/*Could not retrieve flags for the interface*/
49. perror("Could not retrive flags for the interface");
50. exit(0);
51. }
52. printf("The interface is ::: %s\n", interface);
53. perror("Retrieved flags from interface successfully");
54. ifr.ifr_flags |= IFF_PROMISC;
55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) {
/*Could not set the flags on the interface */
56. perror("Could not set the PROMISC flag:");
57. exit(0);
58. }
59. printf("Setting interface ::: %s ::: to promisc", interface);
60. return(0);
61. }