使用 libpcap 按 ether_type 和指定字节进行过滤

使用 libpcap 按 ether_type 和指定字节进行过滤

感谢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,并且可以进行多次测试。

相关内容