我正在尝试使用 TCP 重播发送数据包。该文件是在另一个网络中捕获的,包含 UDP 数据包。为了重播,我使用以下命令更改了源地址和目标地址等:
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
Run Code Online (Sandbox Code Playgroud)
更改数据包后,我尝试使用 tcpreplay 重播:
sudo tcpreplay --intf1=enp0s25 changed.cap
Run Code Online (Sandbox Code Playgroud)
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 > …
Run Code Online (Sandbox Code Playgroud) 我有一组pcap
包含来自两台主机的 UDP 流量的文件,并且必须定期对此流量执行一些分析。
理想情况下,我希望避免频繁设置具有特定 IP 的本地接口等来重播这些文件。我希望能够简单地在我的环回接口上重播它们,使用tcprewrite
更改pcap
.
这是它目前的样子:
# Remove mac addresses for loopback interface
# Remove VLAN tags
tcprewrite \
--enet-smac=00:00:00:00:00:00 \
--enet-dmac=00:00:00:00:00:00 \
--enet-vlan=del \
--infile="${INFILE}" \
--outfile="${OUTFILE}.tmp"
# Change source and destination IP to loopback
# Regenerate IP checksums
tcprewrite \
--srcipmap=0.0.0.0/0:127.0.0.1 \
--dstipmap=0.0.0.0/0:127.0.0.1 \
--fixcsum \
--infile="${OUTFILE}.tmp" \
--outfile="${OUTFILE}"
Run Code Online (Sandbox Code Playgroud)
看起来差不多可以工作了。然后我可以简单地使用我的环回重播这些文件,tcpreplay
并且我看到数据包使用tcpdump
on lo
。尽管如此,似乎任何常规用户空间套接字都看不到环回上的此流量。
据我了解,这似乎与Linux上环回接口处理第2层的方式有关。看来我需要将第 2 层标头 (DLT) 从普通协议重写ethernet
为null
BSD 环回使用的协议。
任何有将以太网上捕获的 UDP 流量重放到环回接口的经验的人将不胜感激。pcap
我不知道如何使用/来实现这一点,或者是否可行 …
在服务器中
\n\n# nc -lp 2424\nhi server\nhi client\n1\n2\n3\n
Run Code Online (Sandbox Code Playgroud)\n\n在客户端
\n\n\xe2\x9e\x9c ~ nc 139.224.xxx.xx 2424\nhi server\nhi client\n1\n2\n3\n
Run Code Online (Sandbox Code Playgroud)\n\n然后在客户端
\n\n\xe2\x9e\x9c ~ sudo tcpdump -i en0 -nn -s0 -v src port 2424 -c 10 -w 2424.pcap\ntcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes\n10 packets captured\n93 packets received by filter\n0 packets dropped by kernel\n\n\xe2\x9e\x9c ~ tcpdump -r 2424.pcap\nreading from file 2424.pcap, link-type EN10MB (Ethernet)\n16:49:47.874743 IP 139.224.xxx.xx.kofax-svr > 192.168.199.171.53511: Flags [P.], seq 2832846522:2832846524, ack 587632101, win 227, options …
Run Code Online (Sandbox Code Playgroud)