使用pcapy/impacket更改数据包数据

2 投票
1 回答
1869 浏览
提问于 2025-04-16 07:23

我正在Linux上用Python写一个小程序,这个程序可以拦截从主机A到主机B在特定端口上飞过的数据包。主机C会充当中间人,所以所有的流量都会经过主机C(使用ARP欺骗的方法)。我已经成功写好了拦截的部分,可以在屏幕上看到所有的数据,但我还想进一步修改数据包中的数据,而不改变头部的数据(当然,校验和会被改变)。我该如何使用拦截到的数据包和pcapy/impacket来实现这个目标呢?

这可能有点模糊,但主要的思路如下:
1. 主机A向主机B发送“Hello”(主机A和B通过ARP欺骗的方式,使得流量经过主机C)。
2. 主机C接收到主机A的“Hello”(默认情况下,主机C会将“Hello”转发给主机B,但我想做点别的 - 见第3点)。
3. 主机C将“Hello”修改为“Bye”,然后转发(使用内核的ip_forward?)给主机B。
4. 主机B接收到“Bye”。

也许可以通过一些Linux机制来实现这个目标?现在我卡住了,任何想法都非常感谢。

1 个回答

1

我更喜欢用scapy来做这种应用。它是一个强大的Python工具包,可以让你捕获、处理和发送网络数据包,适用于协议栈的不同层次。

进行中间人攻击有几种方法。我可能会使用“sniff”这个功能,并设置一个过滤器来捕获来自主机A的数据包。然后,我会指定一个回调函数(通过“prn”参数)来修改这个数据包,并使用“sendp”把它重新发送到主机B。值得注意的是,scapy还内置了一个“arpcachepoison”的功能。

撰写回答