排除私有 IP 流量的 tcpdump 过滤器

排除私有 IP 流量的 tcpdump 过滤器

对于通用过滤器来说,要排除我的转储中私有 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是一个对称操作,所以不会有什么区别?(这意味着你也可以删除第二个块。)

相关内容