分组数据拦截和修改

时间:2012-04-24 21:38:19

标签: pcap libpcap

我希望能够在tcp客户端的tcp流中拦截/修改数据。 pcap的示例显示了如何解析tcp包头/有效负载。 但是假设,我想在tcp客户端读取之前修改数据包有效负载,或者完全丢弃数据包。我怎么能用pcap capure做到这一点?

3 个答案:

答案 0 :(得分:5)

如上所述,您无法使用pcap进行拦截/修改。为此,您需要以下一种与操作系统相关的技术:

  • Linux :libnetfilter_queue + iptables
  • MacOS FreeBSD :转移套接字+ ipfw
  • Windows :WinPkFilter(商业),WinDivert(LGPL),或编写您自己的NDIS IM或WFP标注驱动程序。

(通常披露:WinDivert是我的项目)。

答案 1 :(得分:1)

与python一起使用的Scapy是一个非常好的工具兼库。

您可以通过命令行进行各种数据包监控和编辑

此外,您可以在scapy之上构建应用程序以执行特定任务。

Scapy

答案 2 :(得分:0)

你不能用libpcap或WinPcap做到这一点; libpcap是在不支持它的OS机制之上构建的(这些机制用于支持被动数据包捕获和低级数据包捕获和注入,不支持数据包输入和输出路径中的数据包修改),而WinPcap的驱动程序是在这种操作系统机制。

你必须找到一些机制,无论你使用什么操作系统,它都支持以一种允许攻丝程序在数据包通过网络堆栈时修改数据包的方式进入网络堆栈。某些操作系统可能不存在这样的机制;在它确实存在的操作系统上,如果存在,它可能非常依赖于操作系统。 (libpcap使用的机制也依赖于操作系统; libpcap部分存在,以便尽可能地将这些差异与应用程序隐藏起来。)