Windows网络数据包修改

4
我希望编写一个小程序,在网络数据包发送前截获并修改它们(在本地机器上)。我需要能够修改报头,而不仅仅是数据。
我已经查看了几种可能性,但不确定哪个是最好的。有一些开源的数据包过滤器,但过滤似乎只能允许或拒绝数据包,没有更多选项。
另一个解决方案是编写一个NDIS中间驱动程序,但编写驱动程序超出了我的能力范围。即使是WinDDK中的简单示例也有数千行代码。我也不想每次测试代码都要不断重新安装驱动程序并重启系统。
我希望这个程序是自包含的,不依赖于第三方驱动程序/软件/其他安装。
如果你们能指点我正确的方向,提供一些有用的链接,我将不胜感激。
4个回答

5

取决于您想要过滤/修改什么类型的数据包。

如果您想进行应用程序级别的过滤,并希望获取HTTP或类似数据包,您最好使用LSP。但请注意,这种方法有一定的缺点。首先,微软似乎正在试图摆脱这项技术,而且我IRC Windows 7徽标要求之一是“您的产品中不得有LSP”,他们似乎正在推广Windows Filtering Platform。其次,您会对第三方LSP兼容性的问题感到非常惊讶。第三,一个非常简单的LSP仍然需要大约2 KLOC的代码量:)

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

Windows Filtering Platform提供了您在任何情况下所需的功能。但是,它仅适用于Windows Vista及更高版本的产品,因此无法在XP上使用。另一件需要考虑的事情是,WFP只能在用户空间允许/拒绝数据包,如果您需要修改它们,则需要进入内核模式。(至少在它出现时是这种情况,也许现在已经改进了一些)。


2
如果您想修改数据包,您需要与硬件进行通信,需要某种驱动程序。如果您不想使用自己的驱动程序,您可以获取第三方驱动程序进行交互操作。
对于过滤,可以使用类库,如winpcap或libpcap。
另外,请查看此链接:http://www.ntkernel.com/w&p.php?id=7 还有一个链接:http://bittwist.sourceforge.net/ 希望这可以帮助您!

2

1
LSP 不是驱动程序,而是一个谦卑的用户态 DLL。 - Dmitry

2
我不是专家,但我想在我的局域网上做类似的事情。我想拦截来自一个固定IP的数据包,并在它们到达我的路由器之前修改它们,然后再传输到互联网。我还想捕获和修改返回的数据包,然后才能允许它们通过到达我的主机。我设想的方法是这样的...
  1. ARP欺骗主机和路由器,使我的嗅探机可以经过所有数据包。
  2. 分析未来要修改的数据包,并寻找与这些数据包独特的特征,以便我可以捕捉到它们。
  3. 编写一个宏/脚本,实时查找所述特征,然后在发送之前即时修改它。
我知道Windows的Cain&Abel可以进行ARP欺骗,但我不确定它是否能够提供原始数据包内容的转储。Wireshark可以转储所有数据包,但我不确定它是否可以进行ARP欺骗,以便只获取我需要的内容。如果不行,那么我可以通过以太网将我想要拦截的主机连接到我的嗅探机上,然后通过嗅探共享互联网,以便所有数据包都会经过嗅探机。
所以第一步可以完成,我不知道这些程序是否已经具有基于特定内容的过滤功能,但我猜想它们肯定有。这就是我所做的,希望对某人有所帮助,也许其他人可以进一步发展?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接