У меня есть сервер, который получает трафик с зеркального порта коммутатора. Интерфейс, подключенный к этому зеркальному порту, находится в промисковом режиме. Когда я использую простой метод catch all tcpdump в интерфейсе, например
tcpdump -nn -i eth1
Я вижу много пробок. Я могу даже использовать grep для некоторых вещей, например, порта 443.
tcpdump -nn -i eth1 | grep 443
очевидно, это показывает все, что имеет в себе 443, а не только порт 443. Я визуально осмотрел это и вижу такие вещи:
15:08:08.112550 IP 12.34.56.78.1430 > 87.65.43.21.443: . ack 35124 win 32768
Но мне нужен только порт 443, так что ...
tcpdump -nn -i eth1 port 443
...
0 packets captured
Странно. Когда я использую фильтр, я не вижу трафика. Я пробовал "ip-порт", "dst-порт" и несколько других фильтров. Я также пробовал фильтровать по IP вместо порта. Ничего.
eth1 Link encap:Ethernet HWaddr 00:24:81:A5:AD:7A
inet6 addr: fe80::224:81ff:fea5:ad7a/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:4114781478 errors:0 dropped:1 overruns:0 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2240970313430 (2.0 TiB) TX bytes:15155497 (14.4 MiB)
Interrupt:98 Memory:fa000000-fa012800
Этот интерфейс видел много трафика. И мой фильтр действителен, правда? Почему я ничего не вижу?
Возможная причина заключается в том, что tcpdump получил пакет, который либо инкапсулирован в другой протокол, либо фрейм, который, например, был помечен идентификатором VLAN.
Вы не видите этого в tcpdump
вывод, поскольку вы не указали никаких аргументов подробности, но ваш фильтр не соответствует вашему port 443
в основном подразумевает not vlan and (proto tcp or proto udp) and port 443
.
Вы также можете проверить это, выгрузив кадр в шестнадцатеричном формате, используя -xx
и анализ данных кадра. Если вам известен VID, о котором идет речь, просто добавьте and vlan <VID>
к вашему фильтру, чтобы получить захваченные пакеты.