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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

谢谢!

答案

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

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

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

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

另一答案

要修改数据包,最好是将修改后的数据包注入网络。 C有一个库libnet,可以完成与数据包注入相关的所有事情。 Python有scapy来注入数据包。

现在你可以用自由和scapy做很有趣的事情,而不是修改你的数据包ip / tcp头,执行arp欺骗,然后注入伪造数据包并将它们重定向到受害者。

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

为了让生活更简单,有像burp suite等工具。你可以在转发之前修改http标头。

另一答案

它应该为你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头。

以上是关于如何在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)的主要内容,如果未能解决你的问题,请参考以下文章

如何从多个 IP 数据包重建 TCP 流?

理解IP及DNS中的TTL

外网主机如何将数据包发送到共用一个公网IP的局域网某特定主机上的

14.IP协议的工作方式

如何配置NAT?

网络协议