2012-04-24 61 views
0

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

回答

0

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

无论您使用哪种操作系统,您都必须找到一些机制,支持攻丝到网络堆栈,使攻击程序可以在数据包通过网络堆栈时对其进行修改。某些操作系统可能不存在这样的机制;在确实存在的操作系统上,如果有的话,它可能非常依赖操作系统。 (libpcap使用的机制也取决于操作系统; libpcap存在,部分原因是为了尽可能最大限度地隐藏与应用程序之间的差异。)

+0

你必须找到某种机制,在任何操作系统您正在使用中,支持轻敲到网络堆栈的方式,允许窃听程序,因为他们通过网络堆栈修改数据包。 – user270398 2012-04-25 19:47:41

+0

谢谢,但我还是不太清楚..看起来像这样的框架很少,像“scapy”或“克星”......他们可以“手工”和“注入”数据包,虽然我不能查找如何更改现有数据包的有效负载,或者为现有连接注入tcp数据包。你认为“netfilter”会在Linux/BSD中提供这样的机制吗? – user270398 2012-04-25 19:57:29

+0

你找不到那个,因为他们不支持;他们通过在网络上传输数据包来“注入”数据包,而不是在接收数据包到达TCP并将修改后的数据包传递给TCP之前捕获数据包。 Netfilter可能会让你在Linux上做你想做的事情; ipfirewall或PF可能会让你在* BSD上执行。 – 2012-04-25 22:50:00

5

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

  • Linux的:libnetfilter_queue + iptables的
  • MacOS的 FreeBSD的:转移插座+ ipfw的
  • 的Windows:WinPkFilter(商业),WinDivert(LGPL)或编写您自己的NDIS IM或WFP呼出驱动程序。

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

1

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

你可以做各种包监控和编辑通过命令行

你也可以建立在Scapy的做特定任务的上层应用。

Scapy