English 中文(简体)
如何构建一种防火墙
原标题:
  • 时间:2009-01-27 02:24:07
  •  标签:

实际上,我想要建立的是一种类似防火墙的东西。它应该能够了解从我的计算机发送的所有请求。它应该能够停止被选择的请求。我甚至不确定应该如何开始。我拥有带有框架2.0的VS 2008/2005。请让我知道是否有任何特定的类可以开始使用,是否有任何示例可以获取。

最佳回答

防火墙应该在网络堆栈中实现得相当低;我强烈建议使用NDIS。 这篇文章可能会有帮助。

问题回答

像这样的东西可能会帮助你入门:http://www.mentalis.org/soft/projects/pmon/

这个C#项目允许Windows NT管理员拦截通过计算机上的网络接口发送的IP数据包。这非常方便调试网络软件或监视不受信任的应用程序的网络活动。

正如马特所说,它必须是NDIS。

一定要留足夠的時間來開發驅動程序,我建議至少需要 6 至 12 個月的時間才能推出 Alpha 版本。我曾處理過 NDIS,我可以向你保證它是無法想象的痛苦。

如果您计划向公众发布您的产品,则需要向微软支付数千美元以获得驱动程序批准(WHQL),否则在安装过程中(例如“此软件极不安全”)使用者将遭受多个令人讨厌的对话框。批准过程缓慢,且不再适用于Windows 2000,可能很快会消失于XP。64位批准需要额外支付。

你被锁定使用C语言,但是任何微小的错误都会以蓝色屏幕的形式被放大(例如,空引用或轻微的缓冲区溢出)。你不能创建线程,你的API与普通用户模式API完全不同,而实际上尝试与用户模式通信意味着要处理令人毛骨悚然的IRP系统。

NDIS本身以不好的MFC样式过度设计了。您受限于内核API子集(这使一些事情非常困难,例如注册表访问)。未能这样做会导致即时WHQL淘汰(不,您不会退款!)。

每一行代码都需要仔细检查,以确保它在运行时的IRQL级别下行为正确(这基本上决定了您的代码是否可以被其他进程中断)。在错误的级别调用API函数会导致蓝屏。此外,在堆栈上创建一个大于500-1000字节的结构会导致堆栈溢出(当然还有蓝屏)。当您在每个函数中具有一些小分配的调用堆栈15行时,这个问题本身就会产生一些有趣的调试会话。

尽管如此,并且尽管NDIS已经经历了6次修订,如果您想挑战自己,它确实值得一做。奖励是一个软件产品,由于没有多少其他人敢涉足那种事情,因此会很畅销。一个重要的要求是要了解汇编语言(用于调试)。阅读关于Windows内核的工作方式的文章也非常有帮助(不只是NDIS)。

几年前,我需要知道Windows系统上所有应用程序使用的网络带宽情况。

在开始学习如何编写TDI过滤驱动程序时,我没有任何关于这项任务的认知。

大约用了两年时间。这是全职两年,因为我依靠了一些股票期权。NDIS比TDI容易,虽然。可能就像那个人说的那样,需要一年全职。

您可以在TDI级别上执行防火墙工作,并且很不错,因为您可以将套接字与应用程序关联(在NDIS上无法做到这一点)。您还可以阻止和/或带宽形状发送。您可以阻止接收,但是您实际上无法在TDI上形状接收,因为您不允许暂停(接收代码路径执行于DISPATCH_LEVEL)。我找到了一个解决办法,并取得了专利,但我不会从技术上建议它。

另一方面,真正的黑客将直接绕过TDI并直接与NDIS驱动程序通信;TDI防火墙是可绕过的。





相关问题
热门标签