我们有一套计算机系统 (Win10),它以各种速率 (2-50Hz) 从远程主机接收各种 UDP 数据。远程系统由我们的客户提供。在我们等待客户交付此系统时,他们提供了 UDP 数据流的 Wireshark 捕获。我们正在通过网络将该 pcap 数据从临时系统 (192.168.6.1) 重播到我们的系统 (192.168.6.2 端口 8001)。pcap 文件中的 IP 地址与我们实验室中的计算机使用的地址相匹配。
问题是,当我们重放 pcap 记录时(运行ColaSoft 数据包播放器) 重新广播 UDP 数据,只有在同一台计算机上运行 Wireshark,我们的系统才能接收 UDP 数据。
我看过的一些内容:
- 在我们的系统上运行
netstat -a -b -o -p UDP
表明我们的软件已注册为监听端口 8001 上的 UDP 流量 - Windows 10 防火墙此时所有端口完全打开
- 直到我在同一台计算机上启动 Wireshark 时,才收到 UDP 数据
- 奇怪的是,Wireshark 启动后重新运行
netstat -a -b -o -p UDP
并没有显示 WS 也在监听 UDP 端口 8001 - CPU 利用率非常低,CPU 使用率不到 10%(这是双插槽 Intel Xeon)
- 一旦启动 Wireshark,我们的软件就开始接收 UDP 数据(但奇怪的是,我们也丢弃了一些数据包)
这听起来确实像是某种配置问题,我猜是防火墙,但它完全打开了。我当然很想知道我错过了什么。
答案1
与大多数其他数据包捕获工具一样,Wireshark 将网络接口置于“混杂”模式。
这主要会导致硬件接受发送到“错误”目标 MAC 地址的帧。这在过去更适用于历史“总线”网络,在这种网络中,所有 NIC 都能看到所有数据包。在现代交换式以太网上,交换机通常不会首先将错误寻址的帧传送到您的以太网端口。
但是,如果您在不同的网络上重放相同的 pcap,而原始目标 MAC 根本不存在,那么交换机仍会通过所有端口发送这些帧 - 但由于 MAC 不匹配,所有设备都会忽略这些帧(但这会增加整个子网的网络负载)。在这种情况下,只有在 promisc 模式下运行的设备才会接受这些帧。
所以我的猜测是,您已尝试在不同的主机上配置相同的 IP 地址来接收重放的数据包,但是它仍然具有不同的 MAC 地址,并因此忽略了帧……
我希望你的数据包播放器有替换 MAC 地址的功能。Linuxtcpreplay工具包自带tcprewrite以此目的。