/* 设置这个规则*/ if(pcap_setfilter(phandle,&fcode)==-1){ // 参数 fp 就是 pile() 的第二个参数,存放编译后的 bpf fprintf(stderr,"pcap_setfilter: %s\n",pcap_geterr(phandle)); return 1; } if((datalink=pcap_datalink(phandle))==-1){ fprintf(stderr,"pcap_datalink: %s\n",pcap_geterr(phandle)); return 1; } printf("datalink= %d\n",datalink); /* 获取数据包*/ pcap_loop(phandle,-1,pcap_handle,NULL); // 第一个参数是第 2 步返回的 pcap_t 类型的指针// 第二个参数是需要抓的数据包的个数, t 个数据包, pcap_loop 立即返回。 t 表示 pcap_loop 永远循环抓包,直到出现错误。// 第三个参数是一个回调函数指针: return 0; } 实验结果: 以 root 模式编译通过: sudo gcc 2.c -o2 -lpcap 打开网页: http://fm./ 以 root 模式运行: sudo ./2 湖南大学入侵检测技术实验报告显示网络接口, IP 地址, 子网掩码, 要求输入捕捉限制( 可输入"Reserved","ICMP","IGMP","GGP","IP","ST","TCP" ) 输入 icmp 回车后显示捕捉到的 icmp 包信息: 湖南大学入侵检测技术实验报告显示数据包的长度,发送方的物理地址,接收方的物理地址,源 IP ,目的 IP ,协议类型, 可看出是符合过滤条件的。重复上述步骤再次运行,输入 TCP :