Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux:如何将整个数据包发送到另一台主机上的特定端口?_Linux_Networking_Tcp_Network Programming_Libpcap - Fatal编程技术网

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

Linux:如何将整个数据包发送到另一台主机上的特定端口?,linux,networking,tcp,network-programming,libpcap,Linux,Networking,Tcp,Network Programming,Libpcap,我使用libpcap捕获了一个TCP数据包,我想将整个数据包(无需修改)发送到另一台主机上的特定端口(该主机有另一个侦听器侦听该端口) 我有什么办法可以做到这一点吗 非常感谢 您没有指定正在使用哪种编程语言以及到目前为止尝试了什么 将IP地址字段更改为目标IP,将TCP端口字段更改为所需的端口。不要忘记更新两个校验和 如果您想要的是TCP转发,.netcat在这种情况下可能会工作,尽管我认为您可能需要重新构建标头,但尚未尝试 另一个选项是使用iptables将数据包转移到另一个嗅探器,同时

我使用libpcap捕获了一个TCP数据包,我想将整个数据包(无需修改)发送到另一台主机上的特定端口(该主机有另一个侦听器侦听该端口)

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


非常感谢

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

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


如果您想要的是TCP转发,.

netcat在这种情况下可能会工作,尽管我认为您可能需要重新构建标头,但尚未尝试

另一个选项是使用iptables将数据包转移到另一个嗅探器,同时仍然在包分析器中捕获它

另一个选项是使用端口镜像,根据所使用的交换机,它有几个不同的名称,但它允许您将交换机上的端口设置为基本上是集线器


我认为如果你不能让netcat正常工作,最好的办法就是使用iptables,你甚至可以在其中添加过滤器。

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

使用scapy,以下是步骤:

  • 使用rdpcap()读取pcap文件
  • 获取目标IP地址和TCP目标端口号(pkt.getlayer(IP).dst,pkt.getlayer(TCP).dport),并将其保存为所需格式的字符串(例如payload=“192.168.1.1:80”)
  • 更改数据包的目标IP地址和目标端口号,以便在特定端口上侦听的其他主机可以接收数据包
  • 在数据包顶部添加有效负载(pkt=pkt/payload)
  • 发送数据包(sendp(pkt,iface='eth0'))
  • 您必须在另一台主机上解析数据包才能获取有效负载。在不确切知道原始数据包中TCP层的顶层是什么的情况下,我无法为您提供准确的代码,但应该是相对直接的

  • 这对于Python/Scapy来说非常容易,但是我认为对于C来说要困难得多,因为必须手动计算正确的偏移量、校验和等等。祝你好运,我希望这会有所帮助。

    对不起。我使用的是C,我使用pcap嗅探一个数据包。不幸的是,我无法更改目标IP地址(因为我需要记录它)。有没有办法将数据包直接传送到另一台主机?该主机中将有另一个嗅探器在等待此数据包。或者我可以更改目标IP地址并在数据包的其他字段中记录原始目标IP地址吗?您可以记录IP,然后更改它。如果希望目标获得地址,可以简单地将两个数据包封装在TCP数据包中。但我只是在猜测。如果你告诉我你想在目标上做什么,我可以更好地帮助你。我正在尝试将捕获的数据包重新组装为该主机中的文件。TCP中没有数据包。“包”可以(也可以不)在发送方和接收方之间被分割。(而且“数据包”或片段可能会被无序接收)@wildplasser-TCP没有碎片。IP可以。通过使用netcat,我可以直接从C程序发送数据包而不首先将数据包保存在文件中吗?是的,但您必须使用fork exec来执行类似popen的操作,如果您使用数据包嗅探器,这将是非常低效的。我认为最好的问题是你想实现什么?是的,您可以通过这种方式使用netcat发送数据包,但实际上,您可以使用libpcap编写自己的代码来转发数据包。查看pcap_sendpacket,因为这可能是您需要的。它仍然在用户空间和内核空间中,但比使用nc进行转发效率更高。