如何在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)

时间:2013-03-15 09:25:13

标签: c network-programming linux-kernel

我希望在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)。

例如,如果我使用firefox进行浏览,那么我想拦截来自firefox的所有数据包并修改IP / TCP标头,然后将它们发送到网络中。

基本上,有两个要求: 1拦截来自firefox(但不是其他程序)的所有数据包。如果这不可能,是否可以拦截来自特定端口或IP /端口对的数据包

2修改IP / TCP标头,然后将它们注入网络

有没有方法,API来实现这一目标? libpcap怎么样? 是否有类似的源代码片段? 我正在使用linux c

谢谢!

3 个答案:

答案 0 :(得分:3)

要修改数据包,最好将修改后的数据包注入网络中。 C有一个库libnet,它可以完成与数据包注入有关的所有工作。 Python具有注入数据包的能力。

现在,您可以使用libent和scapy来做一些非常有趣的事情,而不是修改数据包的ip / tcp标头,执行arp欺骗,然后注入伪造的数据包并将其重定向到受害者。

Libpcap用于捕获数据包,但不用于修改数据包。因此,您可以使用libpcap构建自己的嗅探器,但是要注入/修改数据包,则需要使用libnet。

为了简化生活,有一些工具,例如burp suite等。在其中,您只能在转发http头之前对其进行修改。

答案 1 :(得分:1)

Razorback是一种用于深度数据包注入的开源API。 您可以在以下网址找到来源:

http://sourceforge.net/projects/razorbacktm/files/Razorback/

您也可以请求他们提供他们建议的系统的源代码。

http://www.icir.org/vern/papers/pktd-pam03.pdf

答案 2 :(得分:-3)

它应该适合你Network packet capturing for Linux

但它似乎拦截了系统中的所有进程。


也许你可以使用

#include <sys/ptrace.h>
long ptrace (enum __ptrace_request request,
             pid_t pid,
             void *addr,
             void *data);

并挂钩send(2)或recv(2)来修改tcp头。