我希望能够编写一个能在Windows上监测和编辑数据包的软件。我想要能够查看所有进出我的系统的数据包内容,并且可能对其进行修改。可以使用任何语言,但我希望它运行速度足够快,不会负担系统。
我已经了解了一些关于WinPcap的知识,但文档中称你不能使用WinPcap创建防火墙,因为它不能丢弃数据包。那么哪些工具可以帮助我编写这个软件呢?
我希望能够编写一个能在Windows上监测和编辑数据包的软件。我想要能够查看所有进出我的系统的数据包内容,并且可能对其进行修改。可以使用任何语言,但我希望它运行速度足够快,不会负担系统。
我已经了解了一些关于WinPcap的知识,但文档中称你不能使用WinPcap创建防火墙,因为它不能丢弃数据包。那么哪些工具可以帮助我编写这个软件呢?
曾经做过这个,2000年时,我的第一个Windows程序就是筛选钩子驱动程序。
我的做法是实现筛选钩子驱动程序并编写用户空间应用程序,准备一个筛选表来确定哪些是允许的,哪些是不允许的。当你解决了初始一系列蓝屏问题(请参见下面我的内核模式调试提示)之后,筛选模式驱动程序非常容易使用......它将每个数据包传递给你编写的一个函数,根据返回代码丢弃或允许其通过。
不幸的是,在那个级别上的数据包十分原始,片段未重新组合,看起来更像是“网络卡”的端口(但不再有以太网头)。因此,你将在使用该解决方案进行数据包过滤时遇到困难。
还有防火墙钩子驱动程序,就如同在这篇codeproject文章中所讨论的那样。
如果你正在使用Vista或Server 2008,则最好查看WFP(Windows Filtering Platform),因为它似乎是编写防火墙的当今强制使用的API。我刚刚用谷歌搜索筛选钩子驱动程序时发现这个。
更新:忘了调试提示:
Sysinternals DbgView可以显示内核模式下的DbgPrint输出,更重要的是——它还可以从最后一个蓝屏产生的转储文件中读取它们。所以在代码中加入dbgprint,如果出现蓝屏,只需将转储加载到dbgview中即可查看发生了什么......非常有用。使用这个工具,我成功地没有使用内核调试器。
我相信你需要编写一个过滤驱动程序。http://en.wikipedia.org/wiki/Filter_driver除此之外,我不知道更多了:)。这肯定是一个C/C++ Win32应用程序,你可能需要做一些内核方面的工作。首先下载DDK并找到一些示例过滤驱动程序。
如果你只想监视IIS进出的流量,请考虑使用ISAPI过滤器。仍然是Win32中的C/C++,但相对于编写设备驱动程序来说要容易得多。
实现此功能的C#代码在这里
我几年前实际上做过这个。现在我对细节有些模糊了,但我必须使用Windows DDK开发一个过滤器/中间驱动程序。我从pcausa获得了很多有用的信息。这里是一个指向他们的产品的网址,可以实现这一点:http://www.pcausa.com/pcasim/Default.htm
如果你是出于实际目的而非兴趣在做这件事,那么你应该看看Microsoft Network Monitor。首页上提到了3.3 beta版,但你可以从下载页面下载3.2版本。NM还有一个SDK,可以编写自己的网络协议解析器。
有一个问题你需要问,但你不知道需要问什么;你想知道套接字属于哪些应用程序吗?还是你愿意在连接时被限制在IP:端口四元组上?
如果你想知道应用程序,你需要编写一个TDI过滤驱动程序,但这会使处理接收几乎不可能,因为你不能在接收路径上阻塞。
如果你对IP:端口满意,可以在NDIS级别进入,并且我相信你可以尽情地阻止接收。
警告一句话:如果你没有先前的内核经验,编写这两个驱动程序(尽管TDI要困难得多)将需要大约两年的全职时间。
这是:
TdiFw 是一个简单的基于 TDI 的开源个人防火墙,适用于 Windows NT4/2000/XP/2003。
可能会对你有所帮助