感谢pcap_filter
,我想按
ether_type
:协议 0x88b5- 与有效载荷中的特定字节进行 AND :“ASK”或 0x41434b
它是以太网级别 => 没有网络层,直接是有效载荷。
=> 我正在寻找的字节位于以太网帧的第 15、16 和 17 个字节上,对吗?
我尝试了这个,但是没有用:
char filter_exp[] = "ether proto 0x88b5 and ether[14:3] == 0x41434b";
if(pcap_compile(descr,&fp,filter_exp,0,PCAP_NETMASK_UNKNOWN) == -1)
{ fprintf(stderr,"Error calling pcap_compile\n"); exit(1); }
我的问题是:
- 我们可以混合使用过滤器
ether_type
和字节吗? - 如果没有,我该怎么做?通过指定要过滤的字节
ether_type
?
答案1
听起来好像你已经回答了你自己的问题:
ether proto 0x88b5 and ether[14:2] == 0x4143 and ether[16:1] == 0x4b
...如果,也就是说,您在数据包的前三个字节中寻找“ACK”。
如果你要找的是“ASK”,那么
ether proto 0x88b5 and ether[14:2] == 0x4153 and ether[16:1] == 0x4b
但字节数不必是偶数,只要是1至4之间的2的幂即可,即1、2或4,并且可以进行多次测试。