tcpdump 仅在指定接口时捕获数据包

tcpdump 仅在指定接口时捕获数据包

我尝试了 3 种不同的方法来捕获进入我服务器的数据包流。其中两种方法有效,第三种方法无效。我试图确定第三种方法为何会漏掉它:

tcpdump -i eth1 udp port 5052
tcpdump -i eth1 -p udp port 5052
tcpdump -i any udp port 5052
tcpdump udp port 5052 #Does not work

我的理论是,任何方法都失败了,因为捕获是非混杂的,它一定是在某个地方被 iptables 丢弃了。但是,即使我将第一个捕获设置为非混杂的(通过明确设置 -p),它也会捕获数据包。这两者之间还有什么不同?

更新:我意识到我做的并不完全符合我的想法。实际上有 4 种变体,只有当我没有指定接口时才会失败。没有-i标志和之间有什么不同-i any

答案1

当你启动时tcpdump,它会告诉你它监听哪个接口:

# tcpdump tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

手册页对此事说得很清楚:

-i 监听接口。如果未指定,tcpdump 将在系统接口列表中搜索编号最小且已配置的接口(不包括环回接口)。通过选择最早的匹配项来打破平局。

这意味着只要你有一个配置好的eth0接口,eth1就永远不会被选为默认捕获接口。

相关内容