Linux:如何将整个数据包发送到另一台主机上的特定端口?

我已经使用libpcap捕获了一个TCP数据包,并且我想把这个整个数据包(不用修改它)发送到另一个主机上的另一个端口上的另一个嗅探器。

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

非常感谢!

Solutions Collecting From Web of "Linux:如何将整个数据包发送到另一台主机上的特定端口?"

你没有指定你正在使用哪种编程语言,以及到目前为止你已经尝试了什么。

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

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

如果你想要的是TCP转发, Linux内核已经为你做了这个 。

netcat可能在这种情况下工作,但我认为你可能不得不重构头,没有尝试过。

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

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

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

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

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

我不知道你是否要使用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 / payload)
  5. 发送数据包(sendp(pkt,iface ='eth0'))
  6. 你将不得不解剖在另一个主机上的数据包来获取有效载荷。 如果不知道原始数据包中的TCP层是什么,我不能给你一个准确的代码,但应该是相对简单的。

这对于Python / Scapy来说非常简单,但是我期望它对于C来说更加困难,不得不手动计算正确的偏移量和校验和。 祝你好运,我希望这有助于。