如果没有 wireshark 抓包,一台服务器就无法 ping 通其他服务器。而且我相信在 ping 进程之前有一个进程正在抓包。但是如何找到这个进程呢?
答案1
好的。我自己解决了这个问题。事实是发送到我的服务器的数据包具有正确的 IP 地址,但 MAC 地址错误。因此,如果 wiredshark 关闭,网络接口卡 (NIC) 将直接丢弃它。但如果 wiredshark 已打开,它将捕获数据包并将 MAC 地址修改为正确的地址。
答案2
我在从 Windows 7 计算机(Enterprise,SP1)ping 以太网目标设备时遇到了同样的问题。在我的配置中,有 2 个 USB2Ethernet 适配器,Windows 中的以太网接口来自适配器的驱动程序。此硬件配置肯定可以工作(从 Linux ping 时可以工作)。但从 Windows 则不行。
不幸的是,您的回答并没有阐明问题的根源。如果您的意思是 ICMP 响应具有错误的 MAC 地址,那么问题就是它为什么会出错。如果您使用的是现成的软件(操作系统附带的标准工具)并且没有手工制作的 ICMP 请求/响应,那么问题仍然悬而未决,错误 MAC 地址问题的根源是什么?TCP/IP 堆栈(ICMP 实现是其中的一部分)的工作原理是,首先通过 ARP 广播请求发现 MAC 地址,然后根据给定的响应选择目标 MAC 地址。
无论如何,我已尝试为目标 IP 设置静态 ARP 条目(尝试了连接到 Windows 对等体的 USB2Ethernet 的 MAC 地址和目标以太网接口的 MAC 地址)。到目前为止还没有成功。
在目标系统(正在 ping 的系统)上我可以看到,ICMP 响应实际上已被发送,但 Windows 系统似乎正在将它们过滤掉。
使用 Wireshark 监听端口后问题得到解决,与目标系统的网络连接完美(ICMP 和所有其他协议)。
我认为这与 Wireshark 在嗅探时将以太网接口带入的混杂模式和/或一些我不知道的 Windows 设置/服务有关。