我想捕获Linux虚拟接口上的流量,以进行调试。我一直在尝试veth
,tun
而且dummy
接口类型; 在这三个方面,我都很难tcpdump
显示任何东西。
这是我设置虚拟界面的方法:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
在一个终端中,通过以下方式观看tcpdump
:
tcpdump -i dummy10
一秒钟,用以下命令收听nc
:
nc -l 99.99.99.1 2048
第三,使用发出HTTP请求curl
:
curl http://99.99.99.1:2048/
尽管在2号航站楼中我们可以从curl
请求中看到数据,但从中看不到任何数据tcpdump
。
一个TUN / TAP教程澄清某些情况下,内核可能不会实际发送当一个本地接口上运行的任何数据包:
查看tshark的输出,我们什么都没看到。没有流量通过该接口。这是正确的:由于我们要对接口的IP地址执行ping操作,因此操作系统正确地确定不需要“在线”发送任何数据包,并且内核本身正在答复这些ping操作。如果您考虑一下,这就是您对另一个接口的IP地址(例如eth0)执行ping操作时将发生的情况:不会发送任何数据包。这听起来似乎很明显,但一开始可能会引起混乱(对我而言)。
但是,很难看到这如何适用于TCP数据包。
也许tcpdump
应该以不同的方式绑定到接口?