基石:WFP
1、简介
Windows过滤平台(Windows Filtering Platform, WFP),是从Vista系统后新增的一套系统API和服务。开发者可以在WFP框架已划分的不同分层中进行过滤、重定向、修改网络数据包,以实现防火墙、入侵检测系统、网络监控等软件。(Windows内核安全与驱动开发)
2、框架
3、基本对象模型
过滤引擎
WFP内部存在多个分层,每个分层对应网络协议栈特定的层。而每个分层中可以存在不同优先级的子层和对应的过滤器,过滤器中存在规则与对应的动作。
由于分层中存在多个子层和多个过滤器,可能存在同时名中多个过滤器规则的网络事件。由此过滤仲裁器(Filter Arbitration)计算出最终过滤动作,交给内核态过滤引擎,引擎再反馈给垫片。
垫片
安插再系统网络协议站的不同层中。除了用于获取网络数据传递给内核态过滤引擎,还负责把内核态过滤引擎过滤结果反馈给网络协议栈。垫片对于开发者透明。
呼出接口
呼出接口由一系列回调函数组成,当某个过滤器规则被名中,对应的呼出接口的回调函数被调用。
分层
分层代表系统网络协议栈的一个特定的层,常见的"管理过滤分层标识"
子层
子层是分层内更小的划分,一个分层可以划分多个子层。每个子层需要分配一个权重,权重值越大,优先级越高。(前面分层拦截后,后方分层无法收到)
过滤器
过滤器实际上是一套规则和动作的集合。规则指明了需要过滤哪些网络数据包,以及对于的执行动作。
引用1:NPF
知名抓包工具wireshark使用的Npcap sdk,底层使用NDIS和WFP,在loopback部分,使用的WFP功能。
引用2:WinDivert
官网
WinDivertTool github 地址 上有很多使用WinDivert库的开源项目,可供参考
关于性能问题:目前看WinDivertRecv和WinDivertSend都非线程安全,需要考虑如何实现多线程处理。