两个相似的tcpdump过滤器之间的差异

时间:2013-02-13 13:51:27

标签: tcp udp ip tcpdump packet-sniffers

我不明白找到这两个过滤器之间的区别here

proto[x:y] & z = z  : every bits are set to z when applying mask z to proto[x:y]
proto[x:y] = z      : p[x:y] has exactly the bits set to z

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用该语法,您可以按位过滤数据包。

例如,考虑IP帧的前两个字节。

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

假设您只想过滤版本等于4的ip数据包(表示IPv4数据包)。

你可以做这样的事情

tcpdump -i ethX 'ip[0:1] & 0xf0 = 0x40'
  • ip [0:1] 表示“从IP帧的偏移0中提取1个字节”
  • &安培; 0xf0 过滤掉第一个字节的IHL位
  • 仅当版本位包含数字4 时,
  • = 0x40 才匹配

etvoilà,您构建了一个自定义过滤器深入挖掘捕获的帧。

在你列出的两个案例中,我认为有一个错字。

我认为应该是:

proto[x:y] & z = n   : every bits are set to n when applying mask z to proto[x:y]
proto[x:y] = n       : p[x:y] has exactly the bits set to n