2

我已经使用 libpcap 捕获了一个 TCP 数据包,我想将整个数据包(不修改它)发送到另一台主机上的特定端口(它有另一个嗅探器监听该端口)。

有什么办法可以做到这一点吗?

非常感谢!

4

3 回答 3

1

您没有指定您正在使用哪种编程语言以及到目前为止您尝试过的内容。

将 IP 地址字段更改为目标 IP,将 TCP 端口字段更改为您想要的端口。不要忘记更新两个校验和。

IP数据包格式 TCP 数据包格式

如果您想要的是 TCP 转发,Linux 内核已经为您完成了这项工作

于 2013-02-06T15:31:33.727 回答
1

netcat 可能在这种情况下工作,虽然我认为你可能必须重建标题,但没有尝试过。

如何在 netcat 中转义十六进制值

另一种选择是使用 iptables 将数据包发送到另一个嗅探器,同时仍然在你的包分析器中捕获它

http://www.bjou.de/blog/2008/05/howto-copyteeclone-network-traffic-using-iptables/

另一种选择是使用端口镜像,这取决于所使用的交换机有几个不同的名称,但它允许您将交换机上的端口设置为本质上是集线器。

我认为如果你不能让 netcat 工作,你最好的选择是使用 iptables,你甚至可以添加过滤器。

于 2013-02-06T15:55:35.763 回答
0

我不知道您是否必须使用 C,但即使您这样做,我还是建议您首先使用 Python/Scapy 构建原型。

使用 scapy,步骤如下:

  1. 使用 rdpcap() 读取 pcap 文件。
  2. 获取目标 IP 地址和 TCP 目标端口号 (pkt.getlayer(IP).dst, pkt.getlayer(TCP).dport) 并将其保存为所需格式的字符串(例如 payload = "192.168.1.1: 80 英寸)。
  3. 更改数据包的目标 IP 地址和目标端口号,以便侦听特定端口的其他主机可以接收它。
  4. 在数据包顶部添加有效负载(pkt = pkt / 有效负载)
  5. 发送数据包 (sendp(pkt, iface='eth0'))
  6. 您将不得不剖析另一台主机上的数据包以获取有效负载。在不确切知道原始数据包中 TCP 层顶部的内容的情况下,我无法为此提供准确的代码,但应该相对简单。

使用 Python/Scapy 这一切都非常简单,但我预计使用 C 会更困难,必须手动计算正确的偏移量和校验和等。祝你好运,我希望这会有所帮助。

于 2013-02-06T23:19:39.850 回答