windows网络驱动开发

基石: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都非线程安全,需要考虑如何实现多线程处理。

上一篇:外包干了3天,技术退步明显.......


下一篇:运维前端vue部署