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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电机控制器电路板布局布线参考指导(五)

电机控制器电路板布局布线参考指导(五)大容量电容和旁路电容的放置 1.大容量电容的放置2.电荷泵电容器3.旁路电容/去耦电容的放置3.1 靠近电源3.2 靠近功率器件3.3 靠近开关电流源3.4 靠近电流感测放大器3.5 靠近稳压器 tips:资料主要来自网络…

Java旅行商问题知识点(含面试大厂题和源码)

旅行商问题(Travelling Salesman Problem,简称TSP)是组合优化中的一个经典问题。问题的目标是找到最短可能的路径,让旅行商从一个城市出发,经过所有其他城市恰好一次,然后回到起始城市。 TSP是一个NP-hard…

Modality-Aware Contrastive Instance Learning with Self-Distillation ... 论文阅读

Modality-Aware Contrastive Instance Learning with Self-Distillation for Weakly-Supervised Audio-Visual Violence Detection 论文阅读 ABSTRACT1 INTRODUCTION2 RELATEDWORKS2.1 Weakly-Supervised Violence Detection2.2 Contrastive Learning2.3 Cross-Modality Knowle…

读天才与算法:人脑与AI的数学思维笔记02_激发创造力

1. 心理创造力 1.1. 自我创造力的实现结果对个体来说可能是全新的,但纵观历史其实已算是“明日黄花”,这就是心理创造力的概念 2. 激发创造力 2.1. 理智是创造力最大的敌人 2.1.1. 巴勃罗毕加索(P…

Jmeter 场景测试:登录--上传--下载--登出

为了练习Jmeter的使用,今天我要测试的场景是“登录--上传--下载--登出”这样一个过程. 测试的目标是我曾经练手写的一个文件分享系统,它要求用户只有登录后才可以下载想要的文件。 Jmeter总体结构: 第一步:添加HTTP Cookie管理器…

47.HarmonyOS鸿蒙系统 App(ArkUI)创建轮播效果

创建轮播效果,共3页切换 Entry Component struct Index {State message: string Hello Worldprivate swiperController: SwiperController new SwiperController()build() {Swiper(this.swiperController) {Text("第一页").width(90%).height(100%).bac…

电动汽车退役锂电池SOC主动均衡控制MATLAB仿真

微❤关注“电气仔推送”获得资料(专享优惠) 仿真简介 模型选用双向反激变换器作为主动均衡拓扑电路,均衡策略采用基于SOC的主动均衡策略,旨在解决电动汽车退役锂电池的不一致性问题。模型选用双向反激变换器作为主动均衡拓扑电路…

pytorch Neural Networks学习笔记

(1)输入图像,13232,通道数1,高32,宽32 (2)卷积层1,滤波器的shape为6155,滤波器个数6,通道数1,高5,宽5。卷积层1的输出为62…

【介绍下负载均衡原理及算法】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

使用docker配置DSP-SLAM

一.Docker环境配置 1.简单介绍 –docker容器技术–。 简单理解:Anaconda用于隔离不同的python环境;docker可以理解成在你的机器里面安装了一个独立的系统,因此它可以隔离不同的CUDA环境,还有着独立的文件系统,防止别…

BERT 微调中文 NER 模型

查看GPU数量和型号 import torch# 检查CUDA是否可用 if torch.cuda.is_available():print("CUDA is available!")# 还可以获取CUDA设备的数量device_count torch.cuda.device_count()print(f"Number of CUDA devices: {device_count}")# 获取第一块GPU的…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用HDR功能(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用HDR功能(C#) Baumer工业相机Baumer工业相机通过NEOSDK进行图像压缩的技术背景代码分析第一步:先引用合适的类文件第二步:通过NEOAPI SDK使用HDR高动态范围功能第二步&#xff1a…

设计模式学习(五)——《大话设计模式》

文章目录 设计模式学习(五)——《大话设计模式》UML类图主要组成元素绘制UML类图的步骤如何绘制好UML类图确定类定义关系使用标准符号添加注释工具选择复审与优化求反馈 UML类图和设计模式的关系根据设计模式绘制UML类…

计算机网络----由概述到ICMP

麻烦先把五个层次刻进DNA里面 应用层 传输层 网络层 数据链路层 物理层 网络层和传输层的区别 网络层:设备到设备 传输层:端口到端口,进程到进程 物理层: 考虑的是怎样才能在连接计算机的传输媒体上传输比特流, 主要考虑的是屏蔽掉不同传输媒体和通信手段…

高级IO和5种IO模型

目录 1. 高级IO1.1 IO的基本概念1.2 OS如何得知外设当中有数据可读取1.3 OS如何处理从网卡中读取到的数据包1.4 IO的步骤 2. 五种IO模型2.1 利用钓鱼来理解2.2 阻塞IO2.3 非阻塞IO2.4 信号驱动IO2.5 IO多路转接2.6 异步IO 3. 高级IO的概念3.1 同步通信 VS 异步通信3.2 阻塞 VS …

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法,主要用于数据聚类。其工作原理基于迭代优化,将数据点划分为K个集群,使得每个数据点都属于最近的集群,并且每个集群的中心(质心)是所有属于该集群的数据点的平均值。以下是…

数据仓库元数据管理

数据仓库元数据管理是数据仓库中至关重要的一环,它涉及到对数据仓库中的元数据进行收集、存储、组织、查询、维护和安全管理等方面的工作。本文将介绍数据仓库元数据管理的定义、分类、应用、价值、管理方案、具体实施和挑战,以帮助读者更好地理解和应用…

STM32有什么高速接口吗?

STM32系列微控制器在高速接口方面也提供了一些强大的功能,虽然没有像Zynq那样的可编程逻辑部分,但有一些特性值得注意。我这里有一套嵌入式入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习嵌入式,不妨点…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈,实现一个队列功能 add delete length 队列 用数组可以实现队列,数组和队列的区别是:队列是逻辑结构是一个抽象模型,简单地可以用数组、链表实现,所以数组和链表是一个物理结构,队列是一个逻…

【C语言笔记】strncpy()和strcpy()的异同点

文章目录 一,简介二,相同点:2.1 两者都用于将一个字符串复制到另一个字符串中。2.2 它们都以源字符串的结束符 \0 结尾。 三,不同点:3.1 指定复制的最大长度:3.2 处理目标缓冲区溢出的方式:3.3 …