如何挂钩Windows中的TCP堆栈以侦听和修改数据包?

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

我已经读了一些关于WinPcap的文档,但是文档声称不能使用WinPcap创build防火墙,因为它不能丢弃数据包。 哪些工具可以帮助我编写这个软件?

在那里,做到了:-)早在2000年,我的第一个Windows程序就是一个过滤器钩子驱动程序 。

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

在这个级别的Unfortunatley数据包是QUITE原始的,片段不重新组装,看起来更像是“网卡”结束的事情(但不再有以太网头)。 所以你将有相当不好的时间来解码数据包来过滤该解决方案。

还有防火墙钩子驱动程序,正如在这个codeproject文章中所讨论的。

如果你使用的是Vista或者server 2008,那么最好看一下WFP( Windows Filtering Platform , Windows过滤平台 ),它似乎是编写防火墙的当天规定的API。 我不知道除了Google几分钟前,当我搜索过滤器钩子驱动程序。

更新:忘记调试提示:

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

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

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

C#代码来做到这一点在这里

我几年前就是这么做的。 在这一点上,我对这个细节很朦胧,但是我必须使用Windows DDK来开发一个过滤器/ pass-thru / intermediate驱动程序。 我从pcausa得到了很多很好的信息。 这是一个指向他们的产品的网址: http : //www.pcausa.com/pcasim/Default.htm

如果你出于实际的原因这样做,而不仅仅是为了好玩,那么你应该看看微软网络监视器 。 主页讨论3.3版本,但是你可以从Downloads页面下载3.2版本。 NM还有一个SDK,可以为自己的网络协议编写解析器。

有一个问题,你需要问,你不知道你需要问, 你想知道哪些应用套接字属于? 或者你很高兴被限制在一个连接的IP:端口四?

如果你想知道应用程序,你需要编写一个TDI过滤器驱动程序,但是这使得处理接收几乎不可能,因为你不能阻塞接收路径。

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

一句警告; 如果你没有先前的内核经验,写这些驱动程序(尽管TDI要困难得多)大约需要两年的时间。

这个:

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

http://tdifw.sourceforge.net/

可能会帮助你