tcpdump 显示流量,直到我使用过滤器

Mic*_*elB 5 tcpdump

我有一台服务器从交换机上的镜像端口接收流量。连接到此镜像端口的接口处于 promisc 模式。当我在接口上只使用一个简单的捕获所有 tcpdump 时,比如

tcpdump -nn -i eth1
Run Code Online (Sandbox Code Playgroud)

我看到了大量的流量。我什至可以针对某些内容(例如端口 443)进行 grep。

tcpdump -nn -i eth1 | grep 443
Run Code Online (Sandbox Code Playgroud)

显然,这显示了任何包含 443 的内容,而不仅仅是端口 443。我已经目视检查了它,我确实看到了这样的东西:

15:08:08.112550 IP 12.34.56.78.1430 > 87.65.43.21.443: . ack 35124 win 32768
Run Code Online (Sandbox Code Playgroud)

但我只想要端口 443 所以...

tcpdump -nn -i eth1 port 443
...
0 packets captured
Run Code Online (Sandbox Code Playgroud)

奇怪的。当我使用过滤器时,我没有看到任何流量。我尝试过“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 
Run Code Online (Sandbox Code Playgroud)

这个界面已经看到了大量的流量。我的过滤器是有效的,对吗?为什么我什么都看不到?

the*_*bit 7

一个可能的原因是 tcpdump 收到了一个数据包,该数据包要么封装到另一个协议中,要么是一个帧,例如已用 VLAN ID 标记。

您在tcpdump的输出中看不到这一点,因为您没有指定任何详细参数,但是您的过滤器与您port 443基本上暗示的不匹配not vlan and (proto tcp or proto udp) and port 443

您还可以通过使用-xx和分析帧数据以十六进制转储帧来验证这一点。如果您知道有问题的 VID,只需添加and vlan <VID>到过滤器即可捕获数据包。