日期:2014-05-16  浏览次数:20697 次

关于libpcap的几个疑问
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)用来过滤包,str是要过滤的字符串,这个字符串是不是可以随便设置的?是从数据包的内容中进行过滤吗?那网络上有多种协议的数据包,又是如何取得各数据包的内容的?我猜想要对捕获来的数据包进行协议转换吧?那又回到第一个问题,怎么过滤的?

------解决方案--------------------
第三个参数char *str是过滤串表达式,语法还是相对复杂的,要查一下tcpdump指南,这个网址上也有介绍:
http://blog.csdn.net/zhaoyc_59211/archive/2007/08/30/1766081.aspx

比如
pszfilter = "ether src 00:90:41:c0:c1:c2 || ether dst 00:90:41:c0:c1:c3";
pcap_compile(fp, &fcode, pszfilter, 1, netmask);

上面的意思就是pcap过滤留下 目的mac为00-90-41-c0-c1-c2,源mac为00-90-41-c0-c1-c3