Windows网络数据包修改

时间:2010-01-03 11:10:12

标签: c++ c networking packet

我正在寻找一个小程序,它将拦截网络数据包(在本地机器上)并在它们出网之前对其进行修改。我还需要能够修改标题,而不仅仅是数据。

我已经看过几种可能性,但我不确定哪种方法最好。那里有开源数据包过滤器,但过滤似乎只能允许或拒绝数据包,而不是其他。

另一种解决方案是编写NDIS中间驱动程序,但编写驱动程序是我的不足之处。甚至WinDDK中的简单pass-thru示例也是数千行。我也不期待不断重新安装驱动程序并重启以测试我的代码。

我理想情况下该程序是自包含的,而不是依赖于第三方驱动程序/软件/安装的安装。

所以,如果你们有人能指出我正确的方向,那就扔一些有用的链接,无论如何,我很感激。

4 个答案:

答案 0 :(得分:4)

取决于您想要过滤/修改哪种数据包。

如果您正在进行应用程序级别过滤,并希望获得HTTP或类似数据包,那么最好的选择可能是LSP。但请注意,遵循此路径有一定的缺点。第一个MS似乎试图摆脱这种技术,而IIRC的一部分Windows 7标识要求是“你的产品中没有LSP”,它们似乎正在推广Windows Filtering Platform。其次,你会对你在第三方LSP兼容性方面遇到的麻烦感到非常惊讶。第三,非常虚拟LSP仍然在2 KLOC附近:)

如果您正在进行IP级数据包过滤,则需要使用驱动程序。

Windows Filtering Platform为您提供两种情况下所需的功能。但是,它仅适用于Windows Vista及更高版本的产品,因此没有XP。另外需要考虑的是,WFP只能在用户区中允许/拒绝数据包,如果需要修改它们,则需要进入内核模式。 (至少那个情况出现的时候,也许他们现在已经改善了一些东西)。

答案 1 :(得分:2)

恕我直言,如果你想修改数据包,你需要与硬件通信,某种类型的驱动程序。如果您不想使用自己的,您应该获得第三方驱动程序进行互操作。

对于过滤库,例如:winpcap或libpcap。

另请看这里:http://www.ntkernel.com/w&p.php?id=7

另一个链接:http://bittwist.sourceforge.net/

希望这有帮助!

答案 2 :(得分:2)

winpcap只能过滤预编译条件的数据包。您需要的是编写LSP级网络驱动程序。每次重新安装时都不需要重新启动,但它可以在数据包进入网络之前真正修改数据包。 更多信息:http://blogs.msdn.com/wndp/archive/2006/02/09/529031.aspx或此处:http://www.microsoft.com/msj/0599/LayeredService/LayeredService.aspx

答案 3 :(得分:2)

我不是专家,但我希望在我的局域网上做类似的事情。我想拦截一个固定IP的数据包并在它们进入我的路由器然后进入互联网之前修改它们。我还希望在允许它们通过主机之前捕获和修改返回的数据包。我设想的方法是这样的......

  1. ARP毒害主机和路由器,所以我的嗅探机器正在通过它传递所有数据包。
  2. 分析我将来要修改的数据包,并查找这些数据包的独特特征,以便我可以抓住它们。
  3. 编写一个实时查找所述特征的宏/脚本,然后在发送之前动态修改它。
  4. 我知道Cain& Abel for Windows能够(哈哈)使用ARP毒药,但我不确定它是否可以提供数据包内容的原始转储。 Wireshark能够转储所有但不确定它是否可以ARP毒药,以便得到我所追求的,如果没有那么我可以通过以太网轻松连接我想截取到我的嗅探器机器的主机,然后通过以下方式共享互联网嗅探器使所有数据包无论如何都会通过嗅探器。

    所以第1步可以完成,我不知道所述程序是否有能力根据具体情况进行过滤,但我猜它们确实如此。

    就我而言,这就是我的意思。希望这对某人有帮助,也许其他人可以更进一步?