我们有一个计算机系统(Win10),它以各种速率(2-50Hz)从远程主机接收各种 UDP 数据。远程系统由我们的客户提供。在我们等待客户交付此系统时,他们提供了 Wireshark 捕获的 UDP 数据流。我们正在通过网络将临时系统(192.168.6.1)中的 pcap 数据重播到我们的系统(192.168.6.2 端口 8001)。pcap 文件中的 IP 地址与我们实验室中计算机使用的地址相匹配。
问题是当我们重放 pcap 记录(运行ColaSoft Packet Player)以重新广播 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 利用率很低,不到 10% 的 CPU 正在使用(这是双路 Intel Xeon)
- 一旦 Wireshark 启动,我们的软件就开始接收 UDP 数据(尽管奇怪的是我们也丢弃了一些数据包)
这听起来像是某种配置问题,我猜是防火墙,但它是完全开放的。我当然有兴趣听到我错过的东西。
与大多数其他数据包捕获工具一样,Wireshark 将网络接口置于“混杂”模式。
首先,这会导致硬件接受发送到“错误”目标 MAC 地址的帧。这过去与历史上的“总线”网络更相关,所有 NIC 都看到所有数据包。在现代交换以太网上,交换机通常不会首先将地址错误的帧传送到您的以太网端口。
但是,如果您在不同的网络上重放相同的 pcap,而原始目标 MAC 根本不存在,那么交换机仍将通过所有端口发送这些帧——只是由于 MAC 不匹配而被所有设备忽略(但并非没有影响整个子网的网络负载)。在这种情况下,只有在 promisc 模式下运行的设备才会接受这些帧。
所以我的猜测是你试图在不同的主机上配置相同的 IP 地址来接收重放的数据包,但它仍然有不同的 MAC 地址并因此忽略帧......
我希望您的数据包播放器具有替换 MAC 地址的功能。为此,Linux tcpreplay工具包附带了tcprewrite。