关于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