我已经使用 tcpdump 大约一个月了,最近,它停止捕获任何未发送到或来自运行 tcpdump 的计算机的数据包。我已将命令精简为:
sudo tcpdump -i en2
我用 ifconfig 检查了我的接口,en2 处于“PROMISC”模式。当指定特定主机作为过滤器时,我只看到一些“arp”消息,但与网络中实际发生的情况相比,什么也没有。
你知道为什么会发生这种情况吗?如果有人能提供一些建议,我将不胜感激!
理查德
答案1
也许您的网络最近从集线器升级为交换机。交换机会了解给定 MAC 地址连接到哪个端口,并且只将该 MAC 地址的流量转发到该端口。多播和广播(例如 ARP)仍会发送到所有端口。
要在连接到交换机时查看其他主机的单播流量,典型的解决方案是使用支持“端口镜像”的可管理交换机,您可以将其配置为复制所有经过某个端口的流量,并将其复制到嗅探器连接到的第二个端口。
您还可以使用一些黑客工具来查看交换网络上其他设备的单播流量,例如使用 ARP 中毒工具让其他机器将其流量发送给您,就好像您是网络的默认路由器一样。
答案2
如果tcpdump
不带该选项运行-n
,它将对看到的 IP 地址进行 DNS 查找,这可以解释为什么您无法在数据包到达时立即看到它们。从tcpdump 手册页:
-n Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.
我总是使用 tcpdump 来-n
避免这个问题:
sudo tcpdump -n -i en2