Назад | Перейти на главную страницу

фильтр tcpdump, исключающий частный IP-трафик

Для общего фильтра, исключающего весь трафик в моем дампе, который находится между частными 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

Кажется довольно чрезмерным, но он также, кажется, работает, этот фильтр намного длиннее, чем должен быть, и есть лучший способ выразить эту логику, или что-то не так с фильтром?

Я запускаю встроенные tcpdump 4.0.0 и libpcap 1.0.0 в Mac OS X v10.6.2, и мне кажется, что это сойдет мне с рук:

'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.

Разве это не твой второй блок

(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 это симметричная операция, поэтому разница не будет? (Это означает, что вы могли бы просто удалить второй блок.)