【发布时间】:2012-05-05 14:09:36
【问题描述】:
我希望能够在 tcp 客户端一侧拦截/修改 tcp 流中的数据。 pcap 的示例显示了如何解析 tcp 数据包标头/有效负载。 但是假设,我想在 tcp 客户端读取数据包之前修改数据包有效负载,或者完全丢弃数据包。如何使用 pcap capure 做到这一点?
【问题讨论】:
我希望能够在 tcp 客户端一侧拦截/修改 tcp 流中的数据。 pcap 的示例显示了如何解析 tcp 数据包标头/有效负载。 但是假设,我想在 tcp 客户端读取数据包之前修改数据包有效负载,或者完全丢弃数据包。如何使用 pcap capure 做到这一点?
【问题讨论】:
使用 libpcap 或 WinPcap 无法做到这一点; libpcap 构建在不支持的操作系统机制之上(这些机制的存在是为了支持被动数据包捕获和低级数据包捕获和注入,不支持数据包输入和输出路径中的数据包修改),WinPcap 的驱动程序构建在一个那种操作系统机制。
您必须在您使用的任何操作系统中找到某种机制,以支持窃听网络堆栈的方式,允许窃听程序在数据包通过网络堆栈时对其进行修改。这种机制在某些操作系统上可能不存在;在确实存在的操作系统上,如果有的话,它可能非常依赖于操作系统。 (libpcap 使用的机制也依赖于操作系统;libpcap 的存在部分是为了尽可能最大程度地隐藏应用程序的这些差异。)
【讨论】:
如上所述,您不能使用 pcap 进行拦截/修改。为此,您需要以下依赖于操作系统的技术之一:
(通常披露:WinDivert 是我的项目)。
【讨论】:
【讨论】: