我有 3 台计算机在同一个子网上。计算机 A 和 B 正在相互通信(ping、telnet 等)。我想在计算机 C 上查看 A 和 B 之间的数据包。是否可以使用 tcpdump 来做到这一点?我已经阅读了手册并用谷歌搜索了这一点,但我无法让它工作。在 C 上运行的 tcpdump 看不到 A 和 B 之间的流量。我知道 tcpdump 正在工作,因为如果 A 或 B ping C,tcpdump 将显示网络流量。我还手动将接口置于混杂模式(ifconfig ethx promisc),但仍然没有输出。
Comp-A,IP:192.168.0.100
ping Comp-B ==> Comp-A 得到 Comp-B 的回复Comp-B,IP:192.168.0.101
tcpdump -Xi eth1 ==> 查看来自 Comp-A 的 ping 数据包Comp-C,IP:192.168.0.102
tcpdump -Xi eth1 ==> 无输出,仅通用 tcpdump 初始消息
答案1
您看不到它们的原因是您使用的是交换网络。您的网络交换机仅将数据包转发到其目的地的接口。这是由数据包中列出的链路层地址确定的。您的交换机知道计算机 A、B 和 C 分别位于端口 1、2 和 3 上。当在端口 1 上从计算机 A 收到发往计算机 B 的数据包时,该数据包仅传输到端口 2。
如果您有一个可管理的交换机,您可以在端口 3 上配置有时称为“端口镜像”或 SPAN 端口的功能,然后该端口将接收经过交换机的所有数据包的副本。
如果您没有托管交换机,还有其他更少的...我们可以说,传统方法(例如,arp 欺骗和数据包转发)可以欺骗网络的其余部分。