tcpdump 里面的数据只有特定方向的

最近在诊断一个问题的时候, 当时有件奇怪的事情: 所有的流量都是流向一个IP的, 再也没有其它流量.
为了查出为什么会连接timeout, 于是去抓包, 因为知道连接肯定是443 或 80, 于是使用下面的命令:

$ tcpdump port 80 or port 443 -w /tmp/tcpdump.pcap

可是抓到的结果却全是流向这个IP 的, 并且没有返回traffic:
tcpdump.png

最后发现, 这个机器上有2个接口: tunl0 和 eth0, 抓包时候, tcpdump 默认使用了 tunl0 接口:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 10.147.64.197/32 scope global tunl0
       valid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e2:99:0b:96:46:a0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.147.166.192/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::e099:bff:fe96:46a0/64 scope link
       valid_lft forever preferred_lft forever

$ tcpdump port 80 or 443 -w /tmp/tcpdump.pcap
tcpdump: listening on tunl0, link-type RAW (Raw IP), capture size 262144 bytes
^C2 packets captured
16 packets received by filter
0 packets dropped by kernel

从上面ip a 的结果看, 除了 lo 之外, 它存在一个隧道接口和一个eth 端口, 可是使用 tcpdump 时候, 它默认使用了 tunl0 接口.

如果要抓取所有接口的流量, 可以使用

$ tcpdump -i any port 80 or port 443 -w /tmp/tcpdump.pcap
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

标签: none

添加新评论