如何在Windows中挂钩TCP堆栈来嗅探和修改数据包?

时间:2009-03-29 18:05:08

标签: windows sockets packet-capture winpcap sniffer

我想为Windows编写数据包嗅探器和编辑器。我希望能够看到进出系统的所有数据包的内容,并可能修改它们。任何语言都可以,但我希望它运行得足够快,不会给系统带来负担。

我已经阅读了一些关于WinPcap的内容,但文档声称您无法使用WinPcap创建防火墙,因为它无法丢弃数据包。有哪些工具可以帮助我编写这个软件?

7 个答案:

答案 0 :(得分:10)

去过那里,完成了:-)早在2000年,我的第一个Windows程序就是filter hook driver

我所做的是实现过​​滤器钩子驱动程序并编写一个用户空间应用程序,该应用程序准备了允许的内容和禁止内容的过滤器表。当你绕过你的初始蓝屏时(见下面我在内核模式下的调试提示),过滤模式驱动程序非常容易使用...它将每个数据包提供给你编写的函数,并根据返回代码丢弃它或让它通过。

该级别的Unfortunatley数据包是QUITE raw,片段没有重新组装,它看起来更像是“网卡”结尾(但不再有以太网头)。因此,解码数据包以便使用该解决方案进行过滤将会非常糟糕。

还有防火墙钩子驱动程序,如本codeproject article中所述。

如果您使用的是Vista或Server 2008,那么最好先看看WFP(Windows Filtering Platform),这似乎是当天编写防火墙的强制性API。 几分钟前,当我搜索过滤器钩子驱动程序时,我不知道除了google图片之外的其他内容。

更新:忘记调试提示:

Sysinternals DbgView显示内核模式DbgPrint输出,更重要的是 - 它还可以从最后一个蓝屏生成的转储文件中读取它们。所以用dbgprint撒上你的代码,如果它是蓝屏,只需将转储加载到dbgview中,看看它在死之前发生了什么......非常有用。使用这个我管理没有内核调试器。

答案 1 :(得分:1)

我很确定你需要编写一个过滤器驱动程序。 http://en.wikipedia.org/wiki/Filter_driver我不仅仅知道:)。它肯定是一个C / C ++ Win32应用程序,你可能正在做一些内核方面的工作。首先下载DDK并找到一些示例过滤器驱动程序。

如果您只想监控进出IIS的内容,请考虑使用ISAPI过滤器。仍然是Win32中的C / C ++,但比编写设备驱动程序要容易。

答案 2 :(得分:1)

执行此操作的C#代码是here

答案 3 :(得分:0)

几年前,我实际上是这样做的。此时我对细节很朦胧,但我不得不使用Windows DDK开发过滤器/ pass-thru / intermediate驱动程序。我从pcausa那里得到了很多很好的信息。这是一个指向其产品的网址:http://www.pcausa.com/pcasim/Default.htm

答案 4 :(得分:0)

如果你出于实际原因这样做,而不只是为了好玩,那么你应该看看Microsoft Network Monitor。主页讨论版本3.3 beta,但您可以从下载页面下载3.2版。还有一个用于NM的SDK,以及为您自己的网络协议编写解析器的能力。

答案 5 :(得分:0)

你需要问一个问题,你不知道你需要问什么;你想知道哪些应用程序套接字属于?或者您是否乐于被限制在IP:端口四进制连接?

如果您想了解应用程序,则需要编写TDI过滤器驱动程序,但这使得处理接收几乎不可能,因为您无法阻止接收路径。

如果您对IP:端口感到满意,请进入NDIS级别,我相信您可以阻止接收内容。

一句警告;如果你没有以前的内核经验,那么编写这些驱动程序中的任何一个(尽管TDI非常难)将需要大约两年的全职时间。

答案 6 :(得分:0)

这样:

TdiFw是一个简单的基于TDI的开源个人防火墙,适用于Windows NT4 / 2000 / XP / 2003

http://tdifw.sourceforge.net/

可以帮到你