重播捕获的udp流量

重播捕获的udp流量,udp,tcpreplay,Udp,Tcpreplay,我正在尝试使用TCP replay发送数据包。该文件是在另一个网络中捕获的,包含UDP数据包。为了重播,我使用以下命令更改了src和目标地址等: tcprewrite --infile=original.cap --outfile=changed.cap --srcipmap=0.0.0.0/0:<MY HOST IP>/32 --dstipmap=0.0.0.0/0:<MY HOST IP>/32 --enet-dmac=<enp0s25 mac addr>

我正在尝试使用TCP replay发送数据包。该文件是在另一个网络中捕获的,包含UDP数据包。为了重播,我使用以下命令更改了src和目标地址等:

tcprewrite --infile=original.cap --outfile=changed.cap --srcipmap=0.0.0.0/0:<MY HOST IP>/32 --dstipmap=0.0.0.0/0:<MY HOST IP>/32 --enet-dmac=<enp0s25 mac addr> --enet-smac=<enp0s25 mac addr> --fixcsum
tcpdump显示数据包已被重写,并且非常正常:

[root@localhost ~]# tcpdump -i enp0s25 udp port 6302 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s25, link-type EN10MB (Ethernet), capture size 262144 bytes
09:31:56.758809 IP localhost.localdomain.qb-db-server > localhost.localdomain.6302: UDP, length 673
09:31:56.758836 IP localhost.localdomain.12608 > localhost.localdomain.6302: UDP, length 669
09:31:56.758845 IP localhost.localdomain.13024 > localhost.localdomain.6302: UDP, length 671
09:31:56.758967 IP localhost.localdomain.11584 > localhost.localdomain.6302: UDP, length 666
....
但是,如果我启动netcat在端口0.0.0.0:6302上侦听,我看不到任何流量


知道怎么回事吗?

我看到您正在将文件重放到接口enp0s25。但是,您的tcpdump输出显示您正在本地主机上捕获。尝试tcpdump-i enp0s25

我看到您正在将文件回放到接口enp0s25。但是,您的tcpdump输出显示您正在本地主机上捕获。试试tcpdump-i enp0s25这是完全正常的。参数
--intf1
设置的是输出接口,而不是输入接口。因此,您的数据包将不会被注入linux网络堆栈。 换句话说,接口驱动程序的输出函数用于发送不是您想要的数据包

要解决此问题,您需要使用来自应用程序(如netcat)的UDP套接字并发送pcap的UDP负载,或者在另一台机器上运行tcpreplay(也可以是VM)


通过这种方式,tcpreplay将使用接口(由--intf1设置)来“输出”数据包,您的机器将使用驱动程序的输入函数将数据包注入Linux网络堆栈。

这是完全正常的。参数
--intf1
设置的是输出接口,而不是输入接口。因此,您的数据包将不会被注入linux网络堆栈。 换句话说,接口驱动程序的输出函数用于发送不是您想要的数据包

要解决此问题,您需要使用来自应用程序(如netcat)的UDP套接字并发送pcap的UDP负载,或者在另一台机器上运行tcpreplay(也可以是VM)


通过这种方式,tcpreplay将使用接口(由--intf1设置)来“输出”数据包,您的机器将使用驱动程序的输入函数将数据包注入Linux网络堆栈。

我已经编辑了这个问题,添加了tcpdump命令和输出详细信息。好了,现在我知道发生了什么。您正在将PCAP文件中的源地址和目标地址更改为本地IP地址。这有效地告诉堆栈,您不希望将数据包发送到接口,而希望将其发送到本地主机。尝试将源地址更改为本地IP地址,并保持目标地址不变。尝试了您的建议,但无效!我还将捕获复制到另一台主机上,并相应地应用了重写规则/重播,但运气不好!我已经编辑了这个问题,添加了tcpdump命令和输出详细信息。好了,现在我知道发生了什么。您正在将PCAP文件中的源地址和目标地址更改为本地IP地址。这有效地告诉堆栈,您不希望将数据包发送到接口,而希望将其发送到本地主机。尝试将源地址更改为本地IP地址,并保持目标地址不变。尝试了您的建议,但无效!我还将捕获复制到另一台主机上,并相应地应用了重写规则/重播,但运气不好!
[root@localhost ~]# tcpdump -i enp0s25 udp port 6302 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s25, link-type EN10MB (Ethernet), capture size 262144 bytes
09:31:56.758809 IP localhost.localdomain.qb-db-server > localhost.localdomain.6302: UDP, length 673
09:31:56.758836 IP localhost.localdomain.12608 > localhost.localdomain.6302: UDP, length 669
09:31:56.758845 IP localhost.localdomain.13024 > localhost.localdomain.6302: UDP, length 671
09:31:56.758967 IP localhost.localdomain.11584 > localhost.localdomain.6302: UDP, length 666
....