2010-01-03 64 views
4

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

我已经浏览了几种可能性,但我不确定哪一种最适合追求。那里有开源数据包过滤器,但过滤似乎只能允许或拒绝数据包,而不是其他数据包。

另一种解决方案是编写一个NDIS中间驱动程序,但写驱动程序是一个超越我。即使WinDDK中的简单pass-thru示例也有数千行。我也不希望不断重新安装驱动程序并重新启动以测试我的代码。

我理想地喜欢该程序是自包含的,而不是依赖第三方驱动程序/软件/任何安装。

所以,如果你们可以指引我正确的方向,用我的方式扔一些有用的链接,无论如何,我会很感激。

回答

4

取决于你想过滤/修改什么样的数据包。

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

如果你是在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

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

+1

LSP不是一个驱动程序,它是一个不起眼的用户级DLL。 – Dmitry 2010-01-03 13:39:19

2

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

  1. ARP毒害主机和路由器,所以我的嗅探机器已经通过它的所有数据包。
  2. 分析我将来要修改的数据包,并查找这些数据包的独特特性,以便我可以捕获它们。
  3. 编写一个实时查找所述特征的宏/脚本,然后在发送它的方式之前进行修改。

我知道凯恩& Abel for Windows能够(哈哈)ARP毒害,但我不知道它是否可以提供数据包内容的原始转储。 Wireshark能够转储所有,但不知道它是否可以ARP毒化,以便获得我后来的,如果不是,那么我可以通过以太网轻松地将我想拦截的主机连接到我的嗅探器,然后通过共享互联网嗅探器,以便所有数据包无论如何都会通过嗅探器。

因此,第1步可以完成,我不知道所说的程序是否有能力根据细节进行过滤,但我猜他们是这样做的。

这就和我一样。希望这对某人有帮助,也许别人可以进一步采取这种做法?