来自 tcpdump 4.1.1 的手册页(是的,我知道它很旧)
-i Listen on interface. If unspecified, tcpdump searches the system interface list for the lowest numbered, configured up interface (excluding loopback). Ties are broken by choosing > the earliest match. On Linux systems with 2.2 or later kernels, an interface argument of ``any'' can be used to capture packets from all interfaces. Note that captures on the ``any'' device will not be done in promiscuous mode.
谁能解释一下最后一句话的确切含义。我正在使用具有许多接口的 IDS 服务器,当我使用 tcpdump -i any 时,它清楚地显示不是源自/目的地为 IDS 服务器的流量。然而,还有另一个服务已经将所有接口置于混杂模式。它们是否可能只是意味着如果您使用 -i any tcpdump 不会将接口置于 PROMISC 模式?
答案1
它们是否可能只是意味着如果您使用 -i any tcpdump 不会将接口置于 PROMISC 模式?
是的,这就是我的意思。 “任何”设备并不是通过独立打开所有设备并捕获它们来工作的,而是通过打开“数据包套接字”来工作,而不是将其绑定到特定设备(这就是在 Linux 上在该设备上捕获的方式) ,使其未绑定,以便它侦听所有套接字。
对设置混杂模式的调用将在未绑定的套接字上失败(我刚刚在相当新的内核上测试了它),因此 libpcap 不会为“任何”设备打开混杂模式。
答案2
为了避免混杂模式,也可以使用 -p 参数,如下所示:
tcpdump -p -i eth0
不要将接口置于混杂模式。如果您有一个小型网络或集群,查看所有数据包可能会很有趣。否则,启用混杂模式后,网络很容易淹没您的计算机。