重播捕获的udp流量

时间:2018-10-01 17:27:47

标签: udp tcpreplay

我正在尝试使用TCP重播发送数据包。该文件是在另一个网络中捕获的,并且包含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

更改数据包后,我尝试使用tcpreplay重播:

sudo tcpreplay --intf1=enp0s25  changed.cap

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,则看不到任何流量!

你知道怎么了吗?

2 个答案:

答案 0 :(得分:1)

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

要解决此问题,您需要使用应用程序(如netcat)中的UDP套接字并发送pcap的UDP负载,或在其他计算机(也可以是VM)上运行tcpreplay。

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

答案 1 :(得分:0)

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