3

我一直想知道软件防火墙是如何在幕后工作的,并且希望能够编写自己的自定义工具来分析或拦截操作系统发送或接收的数据包。我相当熟悉核心网络原则;如果我想编写适合网络堆栈的软件,就像防火墙一样,我只是不知道从哪里开始。谁能给我一些指示?

如果这可以使用 C# 来完成,我会特别感兴趣,但我也可以使用其他语言。我主要关注 Windows,但想知道是否还有任何跨平台库。

编辑使用 NDIS 驱动程序(如 Wireshark 所做的那样)听起来是一个不错的选择,而且 Vista 的数据包过滤功能听起来很简洁,但防火墙是如何做到的,比如在 Windows XP 上呢?他们不必安装我知道的特殊驱动程序。

4

4 回答 4

5

在 Windows Vista 及更高版本上,您可能需要查看Windows Filtering Platform。在早期版本的 Windows 中,您需要使用过滤器驱动程序(链接到 MSDN 页面提到了 WFP 取代的技术。)

于 2009-09-21T23:58:41.440 回答
1

我记得它涉及编写 NDIS 驱动程序。这实际上位于 NIC(网络接口卡)的顶部,您可以绝对控制进出 NIC 的内容,然后再进行其他任何操作 - 一直到以太网数据包级别。

这不能用 C# 完成。您确实需要使用 C 或 C++ 来完成此任务。

更新:我最后一次这样做是在 Window XP 时代。我从另一个响应中看到,如果您使用的是 Windows Vista 及更高版本,则有一个新的、从外观上看更简单的 API。

于 2009-09-21T23:59:32.970 回答
1

不确定它是否“在 O/S 之前”,但请查看WireShark及其使用的库libpcap

于 2009-09-22T00:09:29.187 回答
0

看看 WinPcap - 它使用 NDIS 驱动程序来实现其数据包过滤功能。这个库可能可以为您想要编写的任何数据包检查/防火墙程序提供一个很好的基础,而且它是开源的。来自http://www.winpcap.org/docs/docs_40_2/html/group__internals.html

首先,捕获系统需要绕过操作系统的协议栈才能访问在网络上传输的原始数据。这需要在操作系统内核中运行一部分,直接与网络接口驱动程序交互。这部分非常依赖于系统,在我们的解决方案中,它被实现为设备驱动程序,称为 Netgroup Packet Filter (NPF);我们为 Windows 95、Windows 98、Windows ME、Windows NT 4、Windows 2000 和 Windows XP 提供不同版本的驱动程序。这些驱动程序提供了数据包捕获和注入等基本功能,以及可编程过滤系统和监控引擎等更高级的功能。第一个可用于将捕获会话限制为网络流量的子集(例如

于 2009-09-22T01:09:05.900 回答