我正在尝试将 pcap 文件重播到 HTTP 服务器。在此之前,我正在尝试手动检查我是否正确使用了 tcpreplay。
我已开始netcat -l 12345
监听特定端口。我们将其称为“服务器”。在另一台机器上,我已运行tcpdump
以捕获所有以文件中的特定端口为目的地的流量dummy.pcap
。之后,我在客户端机器上运行 netcat,连接到“服务器”并发送几条消息。我已使用 pcap 检查结果tshark
,它显示已捕获数据包。
我再次在服务器上启动了 netcat,并在客户端上启动了 tcpreplay:
tcpreplay -d 5 -i eth0 -t dummy.pcap
但服务器上的 netcat 控制台上什么也没有显示。我尝试在“服务器”上运行 tcpdump,结果显示已收到数据包。
为什么数据包没有出现在 netcat 控制台中?
答案1
TCPreplay 将在服务器上重放流量,但由于 TCP 协议的性质,它实际上并不与服务器“通信”。因此,基本上您的服务器正在接收 TCP 数据包,但从未建立实际的 TCP 连接,因为重放未完成正确的握手。这就是为什么您的 netcat 中没有显示任何 TCP 会话的原因。
根据我的经验,这种 tcpdump 仅对分析有用,如果您担心重现一系列命令/数据,您需要找到特定于您的协议的工具(在我的情况下,它涉及编写自定义客户端)。
来自 tcpreplay维基百科:
发送流量到服务器
问题
您有一个 pcap 捕获,并希望在另一台服务器上重播该流量。
解决方案
首先,这仅适用于 ICMP 和 UDP 流量。Tcpreplay 不支持在服务器上发送 TCP 流量,因为它不会同步 TCP 流中的 Syn/Ack 编号。
也就是说,您需要更改目标 IP 和 MAC 地址以匹配目标服务器的 IP 和 MAC 地址。在本例中,我们假设目标服务器 IP 为 10.10.1.1,其 MAC 地址为 00:01:02:03:04:05。
和他们的常问问题:
=== tcpreplay 是否支持将流量发送到服务器? === 如果您所说的“服务器”是指监听端口的守护进程(Unix)或服务(Windows)(常见示例为 Web 或邮件服务器),那么可能不支持。最大的问题是 tcpreplay 不了解 TCP 等常见协议的状态。这意味着它无法同步 Syn/Ack 以创建有效的 TCP 会话。