Udp 使用netcat的localhost中看不到tcpreplay流量

Udp 使用netcat的localhost中看不到tcpreplay流量,udp,netcat,tcpreplay,Udp,Netcat,Tcpreplay,我有一个pcap文件,我用tcprewrite修改它以设置源和目标IP=127.0.0.1,而端口号不同。我还将这两个mac地址都设置为00:00:00:00:00,因为我知道本地主机上的通信会忽略mac。我确定校验和是固定的 当我在一个shell中运行tcpreplay-ilo test lo.pcap,在另一个shell中运行tcpdump-ilo-p udp端口50001时,我看到了流量。然而,当我尝试使用netcat-l-u50001查看流量时,它什么也看不到。Wireshark正在正确

我有一个pcap文件,我用tcprewrite修改它以设置源和目标IP=127.0.0.1,而端口号不同。我还将这两个mac地址都设置为00:00:00:00:00,因为我知道本地主机上的通信会忽略mac。我确定校验和是固定的

当我在一个shell中运行
tcpreplay-ilo test lo.pcap
,在另一个shell中运行
tcpdump-ilo-p udp端口50001
时,我看到了流量。然而,当我尝试使用netcat-l-u50001查看流量时,它什么也看不到。Wireshark正在正确捕获流量

旁注:在本地主机上运行tcpreplay时,我看到以下警告:
警告:lo上不支持的物理层类型0x0304。也许它有用,也许不会。看门票#123/318
,这似乎令人担忧

我这样问是因为我自己的UDP侦听器代码也有与netcat相同的问题,并且认为我可能遗漏了一些东西。为什么tcpdump和wireshark会看到流量,而netcat不会看到流量

我这样问是因为我自己的UDP侦听器代码也有与netcat相同的问题,并且认为我可能遗漏了一些东西。为什么tcpdump和wireshark会看到流量,而netcat不会看到流量

查看维基百科中的内核数据包流:

正如您所看到的,路径上有不同的地方可以访问数据包。Wireshark使用
libpcap
,它使用
AF\u数据包
套接字查看数据包。您的UDP侦听器与netcat一样,使用常规的用户空间套接字。让我们在此图像上突出显示这两个选项。Wireshark通过红色路径获取数据包,netcat通过紫色路径获取数据包:

正如您所看到的,数据包在内核中必须经过一系列步骤才能到达本地进程套接字。这些步骤包括桥接、路由、过滤等。哪一步会丢弃您的数据包?我不知道。你可以试着调整数据包,也许你会幸运的


如果您想要更系统的方法,请使用类似的工具。它与内核挂钩,并向您显示内核丢弃数据包的计数器。

感谢您提供详细的答案。这就解释了这种脱节。我尝试构建dropwatch,但无法找到libreadline。所以,包中一定有东西需要在pcap文件中进行不同的设置。是的,我记得也遇到了一些编译问题。互联网上到处都有关于如何构建它的信息。@Cosmo让它编译并在Ubuntu 20.04.2(内核5.4.0)上运行。以下是我必须安装的软件包:
autoconf pkg config libtool build-essential libnl-3-dev libnl-genl-3-dev libreadline dev libpcap dev binutils dev
谢谢。我确实安装了所有这些软件包。最后起作用的(如
/configure--help中所述)是在运行/configure之前在shell中导出LIBS=-lreadline
。奇怪的是在/usr/local中找不到该lib/lib@Cosmo很高兴它成功了。希望dropwatch能帮助您找出滴落发生的位置。输出可能很难理解。