为什么 tcpdump 里面只有进来的数据?

您所在的位置:网站首页 抓包是干什么的 为什么 tcpdump 里面只有进来的数据?

为什么 tcpdump 里面只有进来的数据?

#为什么 tcpdump 里面只有进来的数据?| 来源: 网络整理| 查看: 265

昨天服务器上抓包诊断 service connect timeout 问题, 却不想遇到奇怪问题: 抓包数据只有进来的数据, 没有任何出去的数据. 如下图:

当时心想抓错了, 是不是只抓了一个方向数据, 比如参数设置 src port 或者 dst port 之类的. 然而 tcpdump 参数并没有写错, 写的是: 

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

所以理论上进来和出去两个方向数据应该都有才对, 那么问题出在哪呢?

问题就出在没有查看这个服务器的网络接口状况, 也没有仔细查看 tcpdump 的输出. 从下图这些细节, 你能看出问题所在吗?

$ ip a 1: lo: 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: 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: 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

从上面截图可以看到, 我们除了本地 loop 接口, 还有2个接口, 分别是 tunl0 和 eth0, 它们分别是 IPIP(隧道) 类型 和 eth(以太网)类型. 而我们抓包的时候, 没有指明接口, 它默认选了 tunl0 接口, 在这个网络接口上抓包, 抓到的都是从这个隧道接口进来的网络数据, 都是流向 10.147.64.197. 这也解释了: 为什么我们看到的数据都是流向这个IP的. 

那么为什么没有反向数据呢? 这个也从下面的输出中找到答案:

$ ip route list default via 10.147.2.154 dev eth0 10.147.2.154 dev eth0 scope link

我们可以看到所有出去的路由全部都是从 eth0 出去的, 没有通过 tunl0 出去的, 所以从 tunl0 根本没有数据流出.  Kubernetes 网络中经常遇到各种 overlay 网络, 所以大家在诊断网络相关问题时, 要注意区分不同的网络接口. 

至此, 所有谜团都解决了.

要抓取出去的包, 只要在 eth0 上抓就好了, 或者抓所有接口的包. 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3