对于通用过滤器来说,要排除我的转储中私有 IP 地址之间的所有流量,我想出了以下方法:
sudo tcpdump -n '
(not
(
(src net 172.16.0.0/20 or src net 10.0.0.0/8 or src net 192.168.0.0/16)
and
(dst net 172.16.0.0/20 or dst net 10.0.0.0/8 or dst net 192.168.0.0/16)
)
) and
(not
(
(dst net 172.16.0.0/20 or dst net 10.0.0.0/8 or dst net 192.168.0.0/16)
and
(src net 172.16.0.0/20 or src net 10.0.0.0/8 or src net 192.168.0.0/16)
)
)' -w test2.dump
看起来相当多余,但它似乎也有效,这个过滤器是否比它需要的长很多,有没有更好的方法来表达这种逻辑,或者过滤器有什么问题?
答案1
我在 Mac OS X v10.6.2 上运行内置的 tcpdump 4.0.0 和 libpcap 1.0.0,看来我可以解决这个问题:
'not (src net (10 or 172.16/12 or 192.168/16) and dst net (10 or 172.16/12 or 192.168/16))'
我做了几个快速测试,似乎符合你的要求:流量既和省略了来自任何 RFC 1918 私有地址子网的流量,但包括了一个或两个端点具有公共地址的所有流量。
请注意,您原来的 172.16 网络过滤器中有一个错误。您将子网掩码向错误的方向移动了 4 位。172.16 实际上是 /12,而不是您写的 /20。也就是说,172.16.0.0 - 172.31.255.255 都是 RFC 1918 私有地址,而您的过滤器仅捕获 172.16.0.0 - 172.16.15.255。
答案2
你的第二个区块不是
(not
(
(dst net 172.16.0.0/20 or dst net 10.0.0.0/8 or dst net 192.168.0.0/16)
and
(src net 172.16.0.0/20 or src net 10.0.0.0/8 or src net 192.168.0.0/16)
)
)
和第一个块一样,只是反转了?我想说这and
是一个对称操作,所以不会有什么区别?(这意味着你也可以删除第二个块。)