它们被发送/接收的由OS之前如何分析/拦截数据包?
-
12-09-2019 - |
题
我一直想,软件防火墙在幕后是如何工作的,并希望能写自己的自定义工具来分析或拦截数据包被发送或操作系统接收之前。我相当与核心网络的原则认识;我只是不知道从哪里开始,如果我想写一个类似于防火墙的方式做网络堆栈内适合的软件。任何人都可以给我一些指点?
我会特别感兴趣,这是否可以使用C#来完成,但我可以做其他的语言了。我主要专注于Windows,但想知道是否有任何跨平台的库出有作为。
修改是一个NDIS驱动程序(如Wireshark的那样)听起来是个不错的选择,而Vista的包过滤功能健全的整齐,但防火墙如何做到这一点,比如说,在Windows XP?他们没有安装专用的驱动程序,我知道的。
解决方案
在Windows Vista和起来,你可能想看看的 Windows过滤平台。在早期版本的Windows,你需要使用筛选器驱动程序(链接到MSDN页提到什么样的技术WFP取代。)
其他提示
我记得它涉及编写NDIS驱动程序。这实际上坐的NIC(网络接口卡)的顶部,你有什么进入或出来的网卡的任何事情之前绝对控制 - 一直到以太网数据包级别
这不能与C#来完成。你真的需要使用C或C ++完成这个任务。
<强>更新强>: 我上次在窗口XP天这样做。我从另一个响应看到有一个新的,和它的外观,简单的API,如果你使用的是Windows Vista的开始。
不知道这是否是“之前的O / S”,但看看 Wireshark的和库,它使用, libpcap的。
看看WinPcap的 - 它使用一个NDIS驱动程序执行其包过滤功能。这个库也许可以提供你想要编写的任何数据包检测/防火墙程序一个很好的基础,它是开源的。从 http://www.winpcap.org/docs/docs_40_2/html/group__internals html的:
首先,捕获系统需要 绕过操作系统的 为了访问协议栈 原始数据过渡到网络上。 这需要内运行的部分 OS的内核,直接交互 与网络接口的驱动程序。 这部分是非常依赖于系统, 在我们的解决方案它是这样实现的 设备驱动程序,称为网络组 分组过滤器(NPF);我们提供 不同版本的驱动程序的 Windows 95中时,Windows 98,Windows Me中, 的Windows NT 4,Windows 2000和Windows XP。这些驱动程序提供两种基本 功能,如数据包捕获和 注射,以及更先进 的像的可编程滤波 系统和监控引擎。该 第一个可以被用来限制一个 捕捉会话的一个子集 网络业务(例如,可以 只捕捉FTP流量 由一个特定的主机生成的),则 第二个提供了强大的,但 简单易用的机制来获得 上的流量统计数据(例如它是 可能获得网络负载或 数据量之间交换 两个主机)。