- 浏览: 973070 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
Yunjey:
Yunjey 写道这样子的话、grid中的editable如何 ...
Flex创建可编辑以及分页的DataGrid -
Yunjey:
这样子的话、grid中的editable如何设置啊?!
Flex创建可编辑以及分页的DataGrid -
di1984HIT:
写的很好~~
JCalendar组件 -
sanny81:
此文真棒!感谢一路风尘的奉献!
但我有一疑 ...
Filter发送自定义数据详解 -
umgsai:
求完整demo umgsai@126.com
Flex和Jsp创建用户登入系统
今天我们来看看如何拷贝NBL中的数据。有时候需要更改数据包中的某些数据,就需要用到此功能(能直接在原来的nBL上更改,然后发送吗?)。
- 新建一个NBL作为你自己要存放拷贝数据的结构:
pCopyNBL = allocateNetBuffAndNetBufferList(pFilter, dataLength);//Defined by self
这个其实是一个自定义的函数,用来分配一个空的NBL.具体代码见后面~ - 这里考虑有很多个NBL,而且每个NB中包含多个MDL.所以拿到原始NBL的第一个NB
pCurrentNB = NET_BUFFER_LIST_FIRST_NB(pCurrentNBL);//The first NB
再得到第一个NB的第一个MDL:pMDL = NET_BUFFER_FIRST_MDL(pCurrentNB);
最后得到MDL中有用数据:包括分析offset,以及dataLength,起始地址等:mdlOffset = NET_BUFFER_DATA_OFFSET(pCurrentNB);//I am not sure ... NdisQueryMdl( pMDL,(PVOID *)&pData,&dataBufferLength,NormalPagePriority); if(pData == NULL) { DEBUGP(DL_TEST,("pData is NULL ---Fail \n")); break; }
- 同理我们得到我们自定义NBL中的MDL(只有一个),同时拿到起始地址:
pCopyMDL = NET_BUFFER_FIRST_MDL(NET_BUFFER_LIST_FIRST_NB(pCopyNBL)); .... NdisQueryMdl(pCopyMDL,(PVOID *)&pNewBuffer, &newBufferLength,NormalPagePriority); if(pNewBuffer == NULL) { DEBUGP(DL_TEST,("pNewBuffer is NULL ---Fail \n")); break; }
- 然后把pData的数据拷贝到pNewBuffer中,这里注意拷贝的长度:
bytesToCopy = dataBufferLength - mdlOffset; if(bytesToCopy > newBufferLength) { bytesToCopy = newBufferLength; } NdisMoveMemory((pNewBuffer + offset),(pData + mdlOffset), bytesToCopy);//copy data newBufferLength -= bytesToCopy; offset += bytesToCopy; mdlOffset = 0;//CurrentMdlOffset is used only for the first Mdl processed. For the remaining Mdls, it is 0.
这里mdlOffset=0,是指以后以后连续的MDL中没有unused 数据。就是整个MDL中的数据都是我们要的。 - 然后循环这个NB中所有的MDL.每个NB拷贝完之后,设置NB的datalength:
NET_BUFFER_DATA_LENGTH(NET_BUFFER_LIST_FIRST_NB(pCopyNBL)) = dataLength; pCopyNBL->SourceHandle = pCurrentNBL->SourceHandle;
- 循环所有的NBL,把每个NBL串起来:
if(pNewNetBufferLists == NULL) { pNewNetBufferLists = pCopyNBLTail = pCopyNBL; } else { NET_BUFFER_LIST_NEXT_NBL(pCopyNBLTail) = pCopyNBL; } pCurrentNBL = NET_BUFFER_LIST_NEXT_NBL(pCurrentNBL);
- 结束拷贝~附上NBL分配函数代码:
PNET_BUFFER_LIST allocateNetBuffAndNetBufferList( IN PMS_FILTER pFilter, IN ULONG BufferSize ) { PMDL pMDL = NULL; PUCHAR pMDLAddress =NULL; PNET_BUFFER_LIST pNetBufferList = NULL; DEBUGP(DL_TEST,("==============>allocateNetBuffAndNetBufferList\n")); pMDLAddress = (PUCHAR)NdisAllocateMemoryWithTagPriority(pFilter->FilterHandle,BufferSize,FILTER_ALLOC_TAG, LowPoolPriority); NdisZeroMemory(pMDLAddress, BufferSize); do { pMDL = NdisAllocateMdl(pFilter->FilterHandle, pMDLAddress, BufferSize); if(pMDL == NULL) { DEBUGP(DL_TEST,("PMDL Fail....\n")); break; } pNetBufferList = NdisAllocateNetBufferAndNetBufferList( pFilter->SendNetBufferListPool, sizeof(FILTER_SEND_NETBUFLIST_RSVD), //Request control offset delta 0, // back fill size pMDL, 0, // Data offset BufferSize); if(pNetBufferList == NULL) { NdisFreeMdl(pMDL); break; } } while(FALSE); DEBUGP(DL_TEST,("<==============allocateNetBuffAndNetBufferList\n")); return pNetBufferList; }
需要注意分配MDL,一定要使用NdisAllocateMemoryWithTagPriority分配一个空间地址~ - 最后是检查是否拷贝正确,参考了这里的代码(打印部分自行添加~):
基于NDIS Filter 抓包:
- 效果图:
浏览百度的:
浏览Javaeye的:
- 还有一些疑问:除了程序编译的时候还有三个Warning.就是好像我只考虑了每个NBL中只有一个NB的情况~可能还需要更多的测试~【今天我把NB也循环了,就是考虑一个NBL多个NB的情况,可是测试中发现一般都自由一个NB】
参考: http://www.osronline.com/showthread.cfm?link=180159
发表评论
-
Filter驱动:过滤(修改)接受数据包
2010-04-20 16:18 9340Filter驱动可以实现简单的防火墙功能。它可以过滤所有接收到 ... -
在Filter驱动内核中获取IP地址
2010-04-18 01:48 3900项目开发中有时候需要在Filter驱动中获取有效地Unic ... -
如何在内核中获得当前系统时间
2010-04-16 15:08 2734在 Windows NT 内核中你是无法使用 tim ... -
Filter发送自定义数据详解
2010-04-16 10:30 5767... -
DebugPrint 格式说明符
2010-04-13 19:46 17691) 直接打印字符串。 DbgPrint(“Hello ... -
WDK+Visual Studio 2008配置编译驱动
2010-04-12 23:36 5571Introduction As it is known, ... -
疑问:关于内存释放
2010-04-12 21:33 1460今天碰到一个比较棘手的内存处理问题。 首先来看一个数据结构: ... -
Windows NT 驱动程序开发人员提示 -- 应注意避免的事项
2010-04-10 11:32 2330原讨论链接: http://community.cs ... -
关于DeviceIoControl实现异步的笔记【2】
2010-04-09 23:17 5112前面我们谈到了关于异步I/O的实现:关于DeviceIoCon ... -
关于DeviceIoControl实现异步的笔记【1】
2010-04-08 22:26 11760一直所做的都是同步实现的。当然很多情况这并不是很好的解决问题。 ... -
驱动和应用层的异步通信
2010-04-08 20:55 5409作 者: sislcb时 间: 2008-01-28,11:1 ... -
Windows系统编程之异步I/O和完成端口
2010-04-08 19:40 2335一、 同步I/O和异步I/O ... -
纵横捭阖C++之从异步谈起
2010-04-08 19:31 3232一般来说,简单的异步(Asynchronous)调用是这样一种 ... -
使用DeviceIoControl通信
2010-04-04 22:53 7926在很多时候,某些用户需要与底层驱动有一个交互式的操作,所 ... -
在驱动中使用链表
2010-04-03 14:06 3296文章作者:grayfox 作 ... -
疑问:数据包Length增大的原因
2010-04-01 14:35 1373现象: 自己定义一个仅含有Ethernet Header的数 ... -
疑问:为何无线网卡无法发送数据?
2010-03-30 22:42 4571所有的测试流程表明,程序已经成功的创建新的数据包,然后调用Nd ... -
InsertHeadList和CONTAINING_RECORD
2010-03-29 16:36 3760LIST_ENTRY定义一个双向链表的数据结构: typed ... -
如何区分不同的Filter Module Instance
2010-03-29 14:50 1547前文 说到如何区分不同Filter Module Inst ... -
大数据是否需要封装在多个MDL中发送
2010-03-27 21:40 2525前段时间,我们已经解决如何发送自定义的网络数据。那么接下来要做 ...
相关推荐
在详细探讨NDIS中间层和过滤驱动开发的过程中,首先需要明确NDIS(Network Driver Interface Specification)网络驱动接口规范的角色与作用。NDIS定义了一组标准接口,它允许开发者能够编写能够在Windows平台上运行...
基于NDIS中间层驱动的网络数据过滤程序开发概括 NDIS中间层驱动程序是基于DDK中passthru框架扩展的,用于网络数据过滤和拦截。NDIS中间层驱动程序可以拦截和过滤网络数据,使得网络数据的传输更加安全。 NDIS中间...
Ndis过滤驱动:拷贝NetBufferList数据 - **拷贝方法**:使用NdisMCopyFromBusMemory等函数可以从NetBufferList中拷贝数据。 - **注意事项**:确保内存对齐和数据长度正确。 #### 50. Filter驱动:过滤(修改)接受...
NDIS(Network Driver Interface Specification)过滤驱动是Windows操作系统中用于网络数据包处理的关键组件,它为网络通信提供了底层接口。在广域网络会话劫持防范技术中,NDIS过滤驱动扮演着至关重要的角色,因为...
NDIS驱动开发涉及到网络驱动的多个层次,包括协议驱动、过滤驱动和微型端口驱动等。本开发指南将深入探讨NDIS驱动开发,特别是中间层驱动程序(IMD)的开发。 一、NDIS概述 NDIS作为网络驱动程序的基础,定义了上层...
### NDIS小端口驱动实现概述 #### 一、引言 随着无线局域网(Wireless Local Area Network, WLAN)技术的不断发展与成熟,特别是IEEE制定的802.11-1999及802.11b标准的推出,使得WLAN的应用越来越广泛。WLAN的实现...
5. **NDIS数据结构**:讲解NDIS中使用的数据结构,如NDIS_PACKET、NDIS_OID请求和应答等,以及如何操作这些数据结构。 6. **NDIS事件和通知**:NDIS如何通过事件和通知机制来协调驱动程序间的操作,如状态指示、 ...
5. NDIS过滤驱动:除了基本的MINIPORT和PROTOCOL驱动,NDIS还支持过滤驱动,它们可以插入到驱动堆栈中,对数据包进行拦截、修改或转发,以实现额外的功能,如网络安全、性能优化等。 6. NDIS版本:随着Windows操作...
NDIS驱动程序是网络通信的关键组成部分,它们处理网络数据的接收和发送,以及硬件的管理和配置。 在NDIS协议驱动程序源代码中,通常包含以下几个主要部分: 1. **初始化和卸载**:驱动程序的初始化函数(如...
描述中提到的"NDIS过滤驱动 小端口驱动 参考文章,DOC类型",暗示了我们有两个文档资料,分别是"NDISWDM驱动学习笔记.doc"和"NDIS驱动框架探究.doc",这两份文档可能是深入解析NDIS驱动技术,特别是小端口驱动和过滤...
NDIS驱动,捕获过滤数据包,防火墙 好东西,分享
2. **过滤驱动**:位于微型端口驱动之上,可以对数据包进行拦截、修改或者转发。它们用于实现网络监控、安全策略和其他高级功能。 3. **协议驱动**:位于NDIS层的顶端,处理上层协议(如TCP/IP)与NDIS之间的交互。...
1. **NDIS数据结构**:驱动开发中,理解NDIS数据结构至关重要,如NDIS_PACKET、NDIS_BUFFER、NDIS_MINIPORT_ADAPTER_CONTEXT等,这些都是驱动程序处理网络数据和状态的核心元素。 2. **NDIS接口函数**:每个NDIS...
VC开发防火墙软件 源代码_WDM,NDIS过滤驱动.zip
这个技术允许用户通过计算机的USB接口与4G/5G模块连接,然后利用NDIS驱动程序实现网络数据传输,从而达到在Windows系统上拨号上网的目的。 描述中的“QUECTEL模块基于windows USB NDIS驱动,可实现基于windows系统...
实现了网络数据流的过滤,嗯,内部也实现了主动发送数据包的函数..... 写不下去了 本来这个项目是之前做的一个系统安全项目>的一小模块,优化版就不发了 这是初始版.... 很适合学习用(想想之前自己查资料的时候一个...
NDIS 协议驱动负责处理网络数据的收发和处理,NDIS 中间层驱动提供数据过滤功能,NDIS 微端口驱动是网卡厂家提供的网卡驱动。 开发 NDIS 协议驱动需要了解 Windows 网络 NDIS 接口模型和 NDIS 框架的相关知识。NDIS...
中间驱动位于微型端口驱动和协议驱动之间,可以用来实现特定的功能,如过滤数据包、性能优化或安全功能。中间驱动可以接收来自上层协议驱动的数据包,处理后转发到下层微型端口驱动,或者直接发送到网络。 对于初学...
### NDIS协议驱动程序设计 #### 一、预备知识 ##### 计算机网络技术基础 计算机网络技术是计算机技术和通信技术相结合的产物,它使分布在不同地理位置的计算机系统能够通过特定的通信设备和线路相互连接,从而...