0

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

4

3 回答 3

5

如上所述,您不能使用 pcap 进行拦截/修改。为此,您需要以下依赖于操作系统的技术之一:

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

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

于 2012-05-07T07:20:12.173 回答
1

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

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

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

斯卡皮

于 2012-10-15T07:26:56.727 回答
0

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

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

于 2012-04-25T19:22:45.363 回答