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

Kyl*_*ndt 8 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
Run Code Online (Sandbox Code Playgroud)

看起来很过分,但它似乎也有效,这个过滤器是否比它需要的时间长得多,并且有更好的方式来表达这个逻辑,或者过滤器有什么问题?

Spi*_*iff 13

我在 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))'
Run Code Online (Sandbox Code Playgroud)

我跑了几个快速测试,似乎做什么你问:那是既要交通从任何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。


Chr*_*her 5

不是你的第二个街区

(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)    
    )
)
Run Code Online (Sandbox Code Playgroud)

和你的第一个块一样,只是颠倒了?我会说这and是一个对称操作,所以它不会有什么不同?(这意味着您也可以删除第二个块。)