- 浏览: 970806 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
Yunjey:
Yunjey 写道这样子的话、grid中的editable如何 ...
Flex创建可编辑以及分页的DataGrid -
Yunjey:
这样子的话、grid中的editable如何设置啊?!
Flex创建可编辑以及分页的DataGrid -
di1984HIT:
写的很好~~
JCalendar组件 -
sanny81:
此文真棒!感谢一路风尘的奉献!
但我有一疑 ...
Filter发送自定义数据详解 -
umgsai:
求完整demo umgsai@126.com
Flex和Jsp创建用户登入系统
NDIS 6.0中有了一个新框架,号称比NDIS IMD更牛B。开始关注这个东西是因为卡巴的防火墙取个名字叫Kaspersky
Anti-Virus NDIS Filter ,又听说WDK中才有新框架,但是卡巴老早就在用了,就觉得卡巴真牛。(后来看Filter
的时候,自己的Filter驱动既不能在编译到XP平台的,编译VISTA的安装上去也没用,怀疑卡巴就是一个IMD的驱动,取了个名字NDIS
Filter 而已,有空F5下。)
说正题,微软建议使用NDIS Filter替代NDIS IMD。Filter
Driver比IMD驱动更容易实现,Filter驱动被插入在Miniport驱动和Protocol Driver之间。Filter
Driver会 attach到Miniport Driver上,对于Protocol Driver来说,Filter
Driver是透明的。Filter Driver与任何设备对象无关。Filter
Driver可以动态的安装和卸载。在IMD驱动的里面,你需要注册一个Miniport和Protocol两层驱动。(所以以前的IMD有两个相关联的
INF文件。)Filter驱动就没那么麻烦,直接一步搞定。我也不会怎么写理论的文章直接看图吧!
如下图所示:
Filter Driver 框架介绍
WDK中\src\network\ndis\filter中Filter的主要框架,在MSDN文档里面有对这个框架的详细解释,这里我们只简单说几个
函数。
DriverEntry
// NDIS调用这个函数为一些数据结构分配内存和作初始化工作
// 主要的结构体有:
//NDIS_FILTER_DRIVER_CHARACTERISTICS 指定一些Filter驱动的特性,并把这些参数传给NDIS。
// 主要的函数:
// NdisFRegisterFilterDriver 把Filter驱动注册给NDIS
FilterAttach
// NDIS调用这个函数为一些数据结构分配内存和作初始化工作
// 主要的结构体有:
// NDIS_FILTER_ATTACH_PARAMETERS 初始化参数
// NDIS_FILTER_ATTRIBUTES Filter模块的属性
FilterRegisterDevice
// 填充分派函数,初始化设备属性。并注册。
// 主要的结构体有:
// NDIS_FILTER_ATTACH_PARAMETERS 初始化参数
// NDIS_FILTER_ATTRIBUTES Filter模块的属性
FilterSendNetBufferLists
// 用这个函数去过滤一个NET_BUFFER_LIST的发送
// 主要的结构体有:
// NET_BUFFER_LIST NET_BUFFER的链表
FilterReceiveNetBufferLists
// 用这个函数去过滤一个NET_BUFFER_LIST的接收
// 主要的结构体有:
// NET_BUFFER_LIST NET_BUFFER的链表
如果要读取数据包,那么有两个结构体就相当重要了。它们是NET_BUFFER_LIST和 NET_BUFFER。定义如下:
typedef struct _NET_BUFFER_LIST{ NET_BUFFER_LIST_HEADER NetBufferListHeader; PNET_BUFFER_LIST_CONTEXT Context; PNET_BUFFER_LIST ParentNetBufferList; NDIS_HANDLE NdisPoolHandle; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID NdisReserved[2]; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID ProtocolReserved[4]; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID MiniportReserved[2]; PVOID Scratch; NDIS_HANDLE SourceHandle; ULONG NblFlags; LONG ChildRefCount; ULONG Flags; NDIS_STATUS Status; PVOID NetBufferListInfo[MaxNetBufferListInfo]; }NET_BUFFER_LIST,*PNET_BUFFER_LIST; typedef struct _NET_BUFFER { NET_BUFFER_HEADER NetBufferHeader; USHORT ChecksumBias; USHORT Reserved; NDIS_HANDLE NdisPoolHandle; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID NdisReserved[2]; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID ProtocolReserved[6]; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID MiniportReserved[4]; NDIS_PHYSICAL_ADDRESS DataPhysicalAddress; // was NdisReserved1; } NET_BUFFER, *PNET_BUFFER;
另外,还有一些宏定义。
NET_BUFFER_LIST_FIRST_NB 从NET_BUFFER_LIST结构中获得第一个NDIS_BUFFER
NET_BUFFER_DATA_OFFSET 从NDIS_BUFFER中获得DATA的偏移
NET_BUFFER_FIRST_MDL 从NDIS_BUFFER中获得第一个MDL
NET_BUFFER_DATA_LENGTH 取得DATA的长度
更具体的自己去看MSDN了。
我根据MSDN和GOOGLE的指点大概写了一段代码了读取数据包。读出数据包的地址和长度。
void ReadNetBuffer( PNET_BUFFER_LIST NetBufferLists ) { PUCHAR data,info; ULONG len,i,offset=0; PNET_BUFFER_LIST CurrNbl; PNET_BUFFER Currbuff; PMDL mdl; int DataLen; CurrNbl = NetBufferLists; while (CurrNbl) { Currbuff = NET_BUFFER_LIST_FIRST_NB(CurrNbl); while(Currbuff) { offset = NET_BUFFER_DATA_OFFSET(Currbuff); mdl = NET_BUFFER_FIRST_MDL(Currbuff); DataLen = NET_BUFFER_DATA_LENGTH(Currbuff); if ( mdl && DataLen ) { data = (UCHAR*)MmGetSystemAddressForMdlSafe( mdl,NormalPagePriority ); if(data) { info = data + offset; KdPrint((" PacketData : %p , PacketSize : %d ",info,DataLen)); } } Currbuff = NET_BUFFER_NEXT_NB(Currbuff); } CurrNbl = NET_BUFFER_LIST_NEXT_NBL(CurrNbl); } }
本文转自: http://www.softrce.net/archives/189
发表评论
-
Filter驱动:过滤(修改)接受数据包
2010-04-20 16:18 9310Filter驱动可以实现简单的防火墙功能。它可以过滤所有接收到 ... -
Ndis过滤驱动:拷贝NetBufferList数据
2010-04-19 22:40 9558今天我们来看看如何拷贝NBL中的数据。有时候需要更改数据包中的 ... -
在Filter驱动内核中获取IP地址
2010-04-18 01:48 3893项目开发中有时候需要在Filter驱动中获取有效地Unic ... -
如何在内核中获得当前系统时间
2010-04-16 15:08 2719在 Windows NT 内核中你是无法使用 tim ... -
Filter发送自定义数据详解
2010-04-16 10:30 5757... -
DebugPrint 格式说明符
2010-04-13 19:46 17641) 直接打印字符串。 DbgPrint(“Hello ... -
WDK+Visual Studio 2008配置编译驱动
2010-04-12 23:36 5562Introduction As it is known, ... -
疑问:关于内存释放
2010-04-12 21:33 1453今天碰到一个比较棘手的内存处理问题。 首先来看一个数据结构: ... -
Windows NT 驱动程序开发人员提示 -- 应注意避免的事项
2010-04-10 11:32 2323原讨论链接: http://community.cs ... -
关于DeviceIoControl实现异步的笔记【2】
2010-04-09 23:17 5101前面我们谈到了关于异步I/O的实现:关于DeviceIoCon ... -
关于DeviceIoControl实现异步的笔记【1】
2010-04-08 22:26 11743一直所做的都是同步实现的。当然很多情况这并不是很好的解决问题。 ... -
驱动和应用层的异步通信
2010-04-08 20:55 5405作 者: sislcb时 间: 2008-01-28,11:1 ... -
Windows系统编程之异步I/O和完成端口
2010-04-08 19:40 2317一、 同步I/O和异步I/O ... -
纵横捭阖C++之从异步谈起
2010-04-08 19:31 3217一般来说,简单的异步(Asynchronous)调用是这样一种 ... -
使用DeviceIoControl通信
2010-04-04 22:53 7904在很多时候,某些用户需要与底层驱动有一个交互式的操作,所 ... -
在驱动中使用链表
2010-04-03 14:06 3291文章作者:grayfox 作 ... -
疑问:数据包Length增大的原因
2010-04-01 14:35 1366现象: 自己定义一个仅含有Ethernet Header的数 ... -
疑问:为何无线网卡无法发送数据?
2010-03-30 22:42 4564所有的测试流程表明,程序已经成功的创建新的数据包,然后调用Nd ... -
InsertHeadList和CONTAINING_RECORD
2010-03-29 16:36 3754LIST_ENTRY定义一个双向链表的数据结构: typed ... -
如何区分不同的Filter Module Instance
2010-03-29 14:50 1538前文 说到如何区分不同Filter Module Inst ...
相关推荐
基于Passthru的扩展,抓取IP数据包,并在内核中利用队列、系统线程实时将IP数据包解析到磁盘文件中,同时提供用户控制,在RING3使用SDK编写界面。 本程序可以帮助您熟悉驱动编写、windows编程、用户态和内核态交互...
### NDIS Filter Drivers指南 #### 一、介绍NDIS Filter Drivers NDIS (Network Driver Interface Specification) Filter Drivers 是一种特殊的网络驱动程序,它们被设计用于在网络驱动程序栈中执行过滤和其他高级...
"NDIS-filter.rar_NDIS Filter_Windows NDIS Filter_filter_ndis_ndis"这个压缩包包含的资源是关于NDIS Filter驱动的实例,其中"NDisMonitor_v1-00"和"NDisMonitor_v1-00_plusSOURCE"可能是两个版本的监控工具,用于...
NDIS Filter Drivers是网络驱动程序接口规范(Network Driver Interface Specification)的一个重要组成部分,主要用于在网络堆栈中添加自定义逻辑或扩展功能。NDIS6是Windows Vista及后续版本中引入的NDIS版本,它...
基于NDISFilter抓包 - **抓包工具**:使用NDISFilter开发的抓包工具可以实现对网络数据包的实时捕获。 - **应用场景**:网络监控、故障排查等。 #### 30. 大数据是否需要封装在多个MDL中发送 - **MDL**:当数据...
NDIS 6.x LightWeight Filter , Windows Driver , Smaple , Networking , replacement of NDIS 5 Sample Intermediate Driver (Passthru driver)
基于NDIS的防火墙驱动程序设计.pdf
《基于WinPcap的抓包工具详解》 在信息技术领域,网络数据包捕获(Packet Capture)是一项重要的技术,它允许我们分析网络流量,检查网络性能,排查问题,甚至进行安全审计。WinPcap,全称Windows Packet Capturer...
NDIS Filter Drivers是Windows操作系统中网络驱动程序架构的一部分,它为网络通信提供了过滤和扩展的能力。这个指南,"NDIS Filter Drivers 指南.rar",显然是为了帮助开发者,尤其是初学者,理解如何构建和使用NDIS...
基于 NDIS 隐蔽通信技术的木马病毒分析 该论文主要集中在基于 NDIS 隐蔽通信技术的木马病毒分析,旨在提供反病毒研究技术参考和依据。论文首先分析了 NDIS 体系结构,然后提出了基于 NDIS 驱动的木马隐蔽通信方法,...
基于中间层驱动的个人防火墙实现,包括ndis实现的框架,对网络包过滤的实现。
基于NDIS中间层驱动的网络数据过滤程序开发概括 NDIS中间层驱动程序是基于DDK中passthru框架扩展的,用于网络数据过滤和拦截。NDIS中间层驱动程序可以拦截和过滤网络数据,使得网络数据的传输更加安全。 NDIS中间...
为此 ,分析基于 NDIS( network driver interface specification)中间层驱动和 Windows网络数据包过滤技术的特点 ,采用核心态 NDIS中间层驱动程序实现了与底层网络接口设备具体细节无关的高速网络设备监测技术 ,设计...
在C#中,可以使用第三方库如`Pcap.Net`或者直接操作Windows的网络驱动接口(NDIS)来实现TCP抓包功能。 4. **UDP抓包**: UDP抓包与TCP类似,但因为UDP是无连接、不可靠的协议,所以抓包时需要特别关注数据包的...
基于windows ndis的网关防火墙
基于Ndis Hook技术开发的网络防火墙源代码
操作系统: win 10 x64 VS版本: VisualStudio.17.Release/17.11.4+35312.102 Windows Driver Kit 10.0....内容概要: 默认情况下生成的NDIS Filter Sample,作为讲解用的; 可以从里面看到WDF和NDIS的基本运行方式。
【标题】"基于NDIS Passthru 扩展源码" 涉及的主要知识点是网络驱动程序开发,特别是NDIS(Network Driver Interface Specification)中间层驱动程序的Passthru技术。NDIS Passthru是一种允许硬件供应商创建自定义...
这篇论文详细探讨了基于NDIS的协议驱动的开发技术,旨在实现协议驱动与网络接口卡(NIC)的直接通信。 在第一章的绪论中,作者概述了NDIS的重要性和研究背景,强调了NDIS在简化网络驱动开发中的作用。论文还介绍了...
一个驱动级的防火墙源程序,基于ndis hook,可以设定外部设定过滤规则,