使用 netcat 在本地主机中看不到 tcpreplay 流量
tcpreplay traffic not being seen in localhost with netcat
我有一个 pcap 文件,我用 tcprewrite 修改它以设置源和目标 IP = 127.0.0.1,而端口号不同。我还将 mac 地址都设置为 00:00:00:00:00:00,因为我知道通过本地主机的通信会忽略 MAC。我确定校验和是固定的。
当我 运行 tcpreplay -i lo test-lo.pcap
在一个 shell 和 tcpdump -i lo -p udp port 50001
在另一个时,我看到了流量。然而,当我尝试使用 netcat -l -u 50001
查看流量时,它什么也看不到。 Wireshark 正在正确捕获流量。
旁注:运行在本地主机上运行 tcpreplay 时,我看到以下警告:
Warning: Unsupported physical layer type 0x0304 on lo. Maybe it works, maybe it won't. See tickets #123/318
这似乎令人担忧。
我问是因为我自己的 UDP 侦听器代码也有与 netcat 相同的问题,我想我可能遗漏了什么。为什么流量会被 tcpdump 和 wireshark 看到,而不会被 netcat 看到?
I'm asking because my own UDP listener code is also having the same problem as netcat and thought that maybe I'm missing something. Why would traffic be seen by tcpdump and wireshark, and not by netcat?
查看来自维基百科的内核数据包流this image:
如您所见,路径上有不同的地方可以访问数据包。 Wireshark 使用 libpcap
,它使用 AF_PACKET
套接字来查看数据包。您的 UDP 侦听器,如 netcat,使用常规的 user-space 套接字。让我们在此图像上突出显示两者。 Wireshark通过红色路径获取数据包,netcat通过紫色路径获取数据包:
如您所见,数据包必须在内核中经过一系列步骤才能到达本地进程套接字。这些步骤包括桥接、路由、过滤等。哪一步丢弃了您的数据包?我不知道。您可以尝试调整数据包,也许您会走运。
如果您想要更系统的方法,请使用像 dropwatch 这样的工具。它连接到内核并向您显示内核丢弃数据包的位置的计数器。
我有一个 pcap 文件,我用 tcprewrite 修改它以设置源和目标 IP = 127.0.0.1,而端口号不同。我还将 mac 地址都设置为 00:00:00:00:00:00,因为我知道通过本地主机的通信会忽略 MAC。我确定校验和是固定的。
当我 运行 tcpreplay -i lo test-lo.pcap
在一个 shell 和 tcpdump -i lo -p udp port 50001
在另一个时,我看到了流量。然而,当我尝试使用 netcat -l -u 50001
查看流量时,它什么也看不到。 Wireshark 正在正确捕获流量。
旁注:运行在本地主机上运行 tcpreplay 时,我看到以下警告:
Warning: Unsupported physical layer type 0x0304 on lo. Maybe it works, maybe it won't. See tickets #123/318
这似乎令人担忧。
我问是因为我自己的 UDP 侦听器代码也有与 netcat 相同的问题,我想我可能遗漏了什么。为什么流量会被 tcpdump 和 wireshark 看到,而不会被 netcat 看到?
I'm asking because my own UDP listener code is also having the same problem as netcat and thought that maybe I'm missing something. Why would traffic be seen by tcpdump and wireshark, and not by netcat?
查看来自维基百科的内核数据包流this image:
如您所见,路径上有不同的地方可以访问数据包。 Wireshark 使用 libpcap
,它使用 AF_PACKET
套接字来查看数据包。您的 UDP 侦听器,如 netcat,使用常规的 user-space 套接字。让我们在此图像上突出显示两者。 Wireshark通过红色路径获取数据包,netcat通过紫色路径获取数据包:
如您所见,数据包必须在内核中经过一系列步骤才能到达本地进程套接字。这些步骤包括桥接、路由、过滤等。哪一步丢弃了您的数据包?我不知道。您可以尝试调整数据包,也许您会走运。
如果您想要更系统的方法,请使用像 dropwatch 这样的工具。它连接到内核并向您显示内核丢弃数据包的位置的计数器。