udp - 重放捕获的 udp 流量
问题描述
我正在尝试使用 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 端口,我就看不到任何流量!
知道有什么问题吗?
解决方案
这是完全正常的。该参数--intf1
设置输出接口而不是输入接口。所以你的数据包不会被注入到 linux 网络堆栈中。换句话说,接口驱动的输出函数被用来发送不是你想要的数据包。
要解决此问题,您需要使用来自应用程序(如 netcat)的 UDP 套接字并发送 pcap 的 UDP 有效负载或在另一台机器(也可以是 VM)上运行 tcpreplay。
这样 tcpreplay 将使用接口(由 --intf1 设置)“输出”数据包,您的机器将使用驱动程序的输入函数将数据包注入 Linux 网络堆栈。
推荐阅读
- sqlite - 本地 Perl DBI 模块,找不到对象方法“连接”
- javascript - 如何在 Angular 7 中创建函数
- r - R数据框通过列名的第一个字母访问列
- python - Spark 和 Cassandra 在同一个 docker 中
- javascript - 在 Safari 中链接 .connect() 方法时获取“未定义不是对象”
- mobile - 空白:nowrap 效果不佳,我做错了什么?
- jquery - 一个单元格中的多行具有相同的记录
- excel - 打开具有文件中最新日期名称的 excel 文件
- excel - IF 值在列表中,执行 VLOOKUP 并添加结果
- jquery - 如何使用 AJAX 和 php 从 HTML 提交表单