我不明白找到这两个过滤器之间的区别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
有什么想法吗?
答案 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'
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