2009-01-27 39 views
1

其实我试图建立的就像一种防火墙。它应该能够了解从我的机器发出的所有请求。它应该能够阻止选定的。我不知道如何开始这件事。我有VS 2008/2005与框架2.0。请让我知道是否有任何特定的课程可以开始,并且是否有我可以获得的任何样本。如何构建一种防火墙

+0

我不会删除它们,因为我不知道它们为什么在那里...但标签(asp.net,proxy,proxy-classes和ajax)有什么问题。他们与防火墙有什么关系? – 2009-01-27 02:26:43

回答

4

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

2

像这样的东西可以帮助你开始:http://www.mentalis.org/soft/projects/pmon/

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

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)。

0

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

对于我正在进行的任务的重要性没有丝毫的线索,我开始学习如何编写TDI过滤器驱动程序。

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

你可以在TDI级别做防火墙的东西,它很好用,因为你可以将套接字与应用程序关联起来(在NDIS中你不能这样做)。您还可以阻止和/或带宽形状发送。您可以阻止接收,但您无法真正在TDI上调整接收,因为您不允许暂停(接收代码路径在DISPATCH_LEVEL中执行)。我想出了一个解决办法,并取得了专利,但我不会从技术POV推荐它。

OTOH一个真正的黑客将简单地绕过TDI并直接与NDIS驱动程序交谈;一个TDI防火墙是可以绕过的。