我一直想知道软件防火墙是如何工作的,并且希望能够编写我自己的自定义工具来分析或拦截数据包,然后再由操作系统发送或接收。我非常熟悉核心网络原则;如果我想编写适合网络堆栈的软件,我就不知道从哪里开始,类似于防火墙的方式。谁能给我一些指示?
如果可以使用C#完成,我会特别感兴趣,但我也可以使用其他语言。我主要关注Windows,但想知道是否还有任何跨平台库。
编辑使用NDIS驱动程序(正如Wireshark所做的那样)听起来是个不错的选择,Vista的数据包过滤功能听起来很整洁,但防火墙如何在Windows XP上实现?他们不必安装我所知道的特殊驱动程序。
答案 0 :(得分:5)
在Windows Vista及更高版本中,您可能需要查看Windows Filtering Platform。在早期版本的Windows中,您需要使用过滤器驱动程序(链接到MSDN页面提到了WFP替换的技术。)
答案 1 :(得分:1)
我记得它涉及编写NDIS驱动程序。它实际上位于NIC(网络接口卡)的顶部,您可以完全控制NIC之前或之外的内容 - 直到以太网数据包级别。
使用C#无法实现。你真的需要使用C或C ++来完成这项任务。
<强>更新强>: 我最后在Window XP中做过这个。我从另一个响应中看到,如果您使用的是Windows Vista,那么有一个新的,从它看起来更简单的API。
答案 2 :(得分:1)
答案 3 :(得分:0)
看看WinPcap - 它使用NDIS驱动程序来实现其数据包过滤功能。这个库可能为您想要编写的任何数据包检查/防火墙程序提供了一个很好的基础,它是开源的。来自http://www.winpcap.org/docs/docs_40_2/html/group__internals.html:
首先,捕获系统需要 绕过操作系统 协议栈才能访问 原始数据在网络上传输。 这需要在里面运行一部分 OS的内核,直接交互 与网络接口驱动程序。 这部分与系统有关, 在我们的解决方案中,它被实现为 一个名为Netgroup的设备驱动程序 包过滤(NPF);我们提供 不同版本的驱动程序 Windows 95,Windows 98,Windows ME, Windows NT 4,Windows 2000和Windows XP。这些驱动程序提供基本的 数据包捕获和 注射,以及更先进 像可编程过滤的那些 系统和监控引擎。该 第一个可以用来限制一个 捕获会话到一个子集 网络流量(例如,它是可能的 仅捕获ftp流量 由特定主机生成) 第二个提供了强大但 简单易用的机制来获得 有关流量的统计数据(例如,它是 可能获得网络负载或 之间交换的数据量 两位主持人)。