我想为 Windows 编写一个数据包嗅探器和编辑器。我希望能够看到所有进出我的系统的数据包的内容,并可能修改它们。任何语言都可以,但我希望它运行得足够快,不会给系统带来负担。
我已经阅读了一些有关 WinPcap 的信息,但文档声称您不能使用 WinPcap 创建防火墙,因为它不能丢弃数据包。什么工具可以帮助我编写这个软件?
我想为 Windows 编写一个数据包嗅探器和编辑器。我希望能够看到所有进出我的系统的数据包的内容,并可能修改它们。任何语言都可以,但我希望它运行得足够快,不会给系统带来负担。
我已经阅读了一些有关 WinPcap 的信息,但文档声称您不能使用 WinPcap 创建防火墙,因为它不能丢弃数据包。什么工具可以帮助我编写这个软件?
去过那里,做到了 :-) 早在 2000 年,我的第一个 Windows 程序就是一个过滤器挂钩驱动程序。
我所做的是实现过滤器挂钩驱动程序并编写一个用户空间应用程序,该应用程序准备了一个过滤器表,说明允许什么和禁止什么。当您绕过最初的一组蓝屏时(请参阅下面的内核模式调试技巧),过滤模式驱动程序非常易于使用......它将每个数据包提供给您编写的函数,并根据返回代码丢弃它或者让它过去。
不幸的是,那个级别的数据包是相当原始的,片段没有重新组装,它看起来更像是“网卡”端的东西(但不再有以太网头)。因此,您将很难用该解决方案解码数据包以进行过滤。
还有防火墙挂钩驱动程序,如本codeproject 文章中所述。
如果您在 Vista 或 Server 2008 上,您最好看看 WFP(Windows 过滤平台),这似乎是编写防火墙的当天授权 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:port quad 进行连接?
如果您想了解应用程序,您需要编写一个 TDI 过滤器驱动程序,但这使得处理接收几乎不可能,因为您不能阻塞接收路径。
如果您对 IP:port 感到满意,请进入 NDIS 级别,我相信您可以阻止接收到您心中的内容。
一句警告;如果您之前没有内核经验,那么编写这些驱动程序中的任何一个(尽管 TDI 要困难得多)都需要大约两年的时间。