【问题标题】:replay captured udp traffic重放捕获的 udp 流量
【发布时间】:2018-10-01 17:27:46
【问题描述】:

我正在尝试使用 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 端口,我就看不到任何流量!

知道有什么问题吗?

【问题讨论】:

    标签: udp tcpreplay


    【解决方案1】:

    这是完全正常的。参数--intf1 设置输出 接口而不是输入接口。所以你的数据包不会被注入到 linux 网络堆栈中。 换句话说,接口驱动的输出函数被用来发送不是你想要的数据包。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已编辑问题以添加 tcpdump 命令和输出详细信息。
      • 好的,现在我知道发生了什么。您正在将 PCAP 文件中的源地址和目标地址都更改为您的本地 IP 地址。这有效地告诉堆栈您不想将数据包发送出接口,而是将其发送到本地主机。尝试将源地址更改为您的本地 IP 地址,并保持目标地址不变。
      • 尝试了您的建议,但它不起作用!我还将捕获复制到另一台主机并相应地应用了重写规则/重播,但没有运气!
      猜你喜欢
      • 1970-01-01
      • 2013-02-07
      • 2016-06-08
      • 2012-08-30
      • 2012-07-30
      • 2011-09-22
      • 2013-05-11
      • 2017-06-26
      • 2022-06-13
      相关资源
      最近更新 更多