如何构建一种防火墙

时间:2009-01-27 02:24:07

标签: c# visual-studio firewall

实际上我想要构建的就像一种防火墙。它应该能够了解从我的机器发出的所有请求。它应该能够停止选定的。我不确定如何开始这个。我正在使用框架2.0的VS 2008/2005。如果有任何特定的课程,我可以告诉我,我可以获得任何样品。

4 个答案:

答案 0 :(得分:4)

防火墙确实应该在网络堆栈中实现得相当低;我强烈建议NDIS。 This article可能会引起关注。

答案 1 :(得分:3)

这样的事情可以帮助您入门:http://www.mentalis.org/soft/projects/pmon/

  

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

答案 2 :(得分:2)

正如马特所说,它必须是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)。

答案 3 :(得分:0)

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

如果不知道我正在进行的任务的重要性,我开始学习如何编写TDI过滤器驱动程序。

花了大约两年时间。两年全职,因为我靠一些股票期权生活。但NDIS比TDI更容易。正如男人所说的那样,一年全职。

您可以在TDI级别执行防火墙工作,这很好,因为您可以将套接字与应用程序相关联(您无法在NDIS中执行此操作)。您还可以阻止和/或带宽形状发送。您可以阻止接收,但是您无法在TDI处真正形成接收,因为您不允许暂停(接收代码路径在DISPATCH_LEVEL执行)。我找到了解决问题的方法并取得了专利,但我不会从技术POV中推荐它。

OTOH真正的黑客只会绕过TDI并直接与NDIS驱动程序通话; TDI防火墙是可以绕过的。