导航:首页 > 净水问答 > net过滤驱动

net过滤驱动

发布时间:2023-05-24 05:28:06

A. C#.NET 怎么实现WPE一样用,HOOK API实现网络包修改,拦截,构造包,发送包,需完整代码

应该很困难,你实际希望是在驱动这一层进行过滤,而c#的代码是很难再这层运行的。实现的可能性不大

B. 如何把ndis filter框架利用到日膚indows驱动开发工作中

NDIS Filter NET_BUFFER_LIST NET_BUFFER MDL

1

网络数据结构如下图:

5

第二种方法:

/*******************************************************************GetNetBufferData函数的功能:从1个NET_BUFFER里面获取数据。1个NET_BUFFER里面含有1个或者多个的MDL*******************************************************************/VOIDGetNetBufferData(PNET_BUFFERNetBuffer,PUCHAROutputBuffer,ULONGOutputBufferSize,PULONGOutputBytesCopied){PMDLMdl=NetBuffer->CurrentMdl;*OutputBytesCopied=0;if(NetBuffer->DataLength>OutputBufferSize){#ifDBGDbgPrint("Notenoughoutputbufferspace,in:%d,out:%d ",NetBuffer->DataLength,OutputBufferSize);#endifreturn;}NdisMoveMemory(OutputBuffer,(PUCHAR)MmGetSystemAddressForMdlSafe(Mdl,LowPagePriority)+NetBuffer->CurrentMdlOffset,Mdl->ByteCount-NetBuffer->CurrentMdlOffset);OutputBuffer+=Mdl->ByteCount-NetBuffer->CurrentMdlOffset;*OutputBytesCopied+=Mdl->ByteCount-NetBuffer->CurrentMdlOffset;////循环MDL链表,获取每一个结点的数据,数据被保存到OutputBuffer里面//OutputBuffer的空间不断地扩大。//当链表不为空,并且OutputBuffer的长度<1个NET_BUFFER的总长度while(((Mdl=Mdl->Next)!=NULL)&&(*OutputBytesCopied<NetBuffer->DataLength)){NdisMoveMemory(OutputBuffer,MmGetSystemAddressForMdlSafe(Mdl,LowPagePriority),Mdl->ByteCount);OutputBuffer+=Mdl->ByteCount;//数据被保存到OutputBuffer里面*OutputBytesCopied+=Mdl->ByteCount;//OutputBuffer的空间不断地扩大}if(Mdl!=NULL){NdisMoveMemory(OutputBuffer,MmGetSystemAddressForMdlSafe(Mdl,LowPagePriority),NetBuffer->DataLength);OutputBuffer+=Mdl->ByteCount;*OutputBytesCopied+=Mdl->ByteCount;}#ifDBGDbgPrint("buffercopied:%dbytes ",*OutputBytesCopied);#endif}

6

上面的2种方法,只是获取数据。而原本NDISFilter框架提供的这4个函数默认的代码,都没有做任何操作,没有实质性质的功能,这4个函数原本默认的代码,我们都不需要,因为我们的驱动程序需要处理网络数据包。这4个函数分别是:

7

在我们的NDISFilter工程里面,我们需要修改掉这4个函数的功能,把它们替换成我们所想要的功能。比如,你在发送数据包或者接收数据包的时候,需要实现自己的一些业务逻辑,而不是去使用MicrosoftNDISFilter提供的原始代码的功能。

8

函数的功能:NDIS调用把发送的结构和数据返还给FilterDriver。NDIS可以收集多次NdisFSendNetBufferLists发送的结构和数据形成一个单链表传递给。除非到NDIS调用,否则一个发送请求的当前状态总是未知的。一个过滤驱动是不能在NDIS调用返回结构之前对NET_BUFFER_LIST和其关联的数据做检查的。要完成一个发送请求完成后的任何必要的后继处理。当NDIS调用时,FilterDriver就重新获地对结构及结构相关资源的所有权。可以在中释放相关的资源和准备下一个NdisFSendNetBufferLists调用。NDIS总是按照过滤驱动调用NdisFSendNetBufferLists提交的顺序传递给下层驱动,但是回返的顺序则是任意的。FilterDriver可以请求一个回环发送请求,只要把NdisFSendNetBufferLists的SendFlags设置成NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK就行了。NDIS会引发一个包含发送数据的接收包指示。

9

一个FilterDriver应该对自己引发的发送请求保持跟踪并确保在完成时不调用NdisFSendNetBufferComplete例程。

步骤阅读

10

FilterSendNetBufferLists函数的功能:NDIS调用一个FilterDriver的FilterSendNetBufferLists例程来过滤上层驱动的发送请求。FilterDriver不能改变其它驱动传来的NET_BUFFER_LIST结构中的SourceHandle成员的值。它可以过滤数据并发送过滤的数据到下层驱动。

11

对每一个提交到FilterSendNetBufferLists的NDIS_BUFFER_LIST,我们可做下面的操作:

1)可以把缓冲区通过NdisFSendBufferLists传递给下层驱动,NDIS保证上下文空间对FilterDriver的有效性。过滤驱动可以在发送前修改缓冲区的内容。可以像处理自己引发的发送请求的缓冲区一样处理这个缓冲区。2)可以调用拒绝传递这个包3)排队缓冲区内容到本地的供以后处理。例如要在一定超时后处理或要接收到特定包后才处理等。如果支持这种处理方式就要支持取消请求的操作。4)可以拷贝缓冲区并引发一个发送请求。它类似自己引发一个发送请求,但必须先调用NdisFSendNetBufferComplete返回上层驱动的缓冲区。

12

发送请求在驱动栈继续完成,当一个微端口驱动调用完成一个发送请求时,NDIS会调用微端口

13

在一个发送操作完成后,FilterDriver可以做在FilterSendNetBufferLists中所有修改的相反操作。返回一个NET_BUFFER_LIST结构的单链表和发送请求的最终状态给上层的驱动。当最顶层的FilterMole的被调用完成后NDIS会调用引发发送请求的协议驱动的。如果FilterDriver不提供FilterSendNetBufferLists它还是可以引发一个发送操作的,但它必须提供一个并且不能在这个例程里把这个事件传递给上层驱动。

14

一个FilterDriver可以传递或过滤一个上层驱动的回环请求,要传递一个回环请求,NDIS会设置FilterSendNetBufferLists的SendFlags参数为NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK,FilterDriver在调用NdisFSendNetBufferLists时把这个标记传给它即可。在回环请求的情况下NDIS会指示一个包含发送数据的接收包。

15

如果一个FilterDriver修改的任何行为不是NDIS提供的标准服务,那么它应该当自己为NDIS提供相应的服务。例如,如果一个FilterDriver修改了一个硬件地址请求,就必须处理直接到这个新地址回环包。在这种情况下,因为FilterDriver已经更改了地址NDIS是不能提供一个回环服务的。

16

_Use_decl_annotations_VOIDFilterSendNetBufferLists(NDIS_HANDLEFilterMoleContext,PNET_BUFFER_LISTNetBufferLists,NDIS_PORT_NUMBERPortNumber,ULONGSendFlags){PMS_FILTERpFilter=(PMS_FILTER)FilterMoleContext;PNET_BUFFERNetBuffer;UCHARTempBuffer[MAX_BUFFER_SIZE];ULONGBytesCopied;pEthHdrEthernetHeader;pIPHdrIpHeader;#ifDBGDbgPrint(">>>FilterSendNetBufferLists:%p ",NetBufferLists);#endiffor(NetBuffer=NetBufferLists->FirstNetBuffer;NetBuffer!=NULL;NetBuffer=NetBuffer->Next){GetNetBufferData(NetBuffer,TempBuffer,MAX_BUFFER_SIZE,&BytesCopied);if(BytesCopied==0){#ifDBGDbgPrint("Netbuffercatcherror ");#endif}else{EthernetHeader=TempBuffer;if(EthernetHeader->Type==0x0800)//以太网类型{IpHeader=EthernetHeader+sizeof(EthHdr);//去掉以太网头,抓出IP头#ifDBGDbgPrint("Getippacket ");#endif}}}NdisFSendNetBufferLists(pFilter->FilterHandle,NetBufferLists,PortNumber,SendFlags);}

17

FilterReturnNetBufferLists函数的功能:如果FilterDriver设置了的状态为NDIS_STATUS_SUCCESS,NDIS通过驱动的FilterReturnNetBufferLists返回指示数据。在这种情况下FilterDriver失去了对NET_BUFFER_LIST的所有权,直到FilterReturnNetBufferLists被调用。FilterDriver调用NdisFIndicateNetBufferLists传递接收指示给驱动栈上的上层驱动,如果上层驱动保留了对缓冲区(NET_BUFFER_LIST)的所有权,NDIS会调用FilterDriver的FilterReturnNetBufferLists例程。在FilterReturnNetBufferLists中应该撤消在接收路径上(如在FilterReciveNetBufferLists中做的一些处理)的操作。当最底层的FilterMole完成对缓冲区(NET_BUFFER_LIST)的处理后,NDIS把缓冲区返回给微端口驱动。如果FilterReceiveNetBufferLists的ReceiveFlags没有设置NDIS_RECEIVE_FLAGS_RESOURCES标记,FilterDriver调用NdisFReturnNetBufferList返回这个缓冲区数据,如果设置了FilterReceiveNetBufferLists直接返回时就把缓冲区返还给了下层微端口驱动。

步骤阅读

18

FilterReceiveNetBufferLists函数的功能:FilterDriver调用来指示发送数据。这个函数通过NET_BUFFER_LIST结构给上层驱动指示数据。FilterDriver可以从池中分配这个结构。如果FilterDriver设置了的状态为NDIS_STATUS_SUCCESS,NDIS通过驱动的FilterReturnNetBufferLists返回指示数据。在这种情况下FilterDriver失去了对NET_BUFFER_LIST的所有权直到FilterReturnNetBufferLists被调用。如果FilterDriver在调用时设置ReceiveFlags为NDIS_RECEIVE_FLAGS_RESOURCES,在函数返回后FilterDriver会立即恢复对NET_BUFFER_LIST的所有权,这时FilterDriver必须立即处理这个NET_BUFFER_LIST的返回,因为NDIS在这种情况下是不会调用FilterReturnNetBufferLists返回NET_BUFFER_LIST结构的。注意:一个FilterDriver应该跟踪自己引发的接收指示确保它在FilterReturnNetBufferLists中不调用NdisFReturnNetBufferLists。

19

_Use_decl_annotations_(NDIS_HANDLEFilterMoleContext,PNET_BUFFER_LISTNetBufferLists,NDIS_PORT_NUMBERPortNumber,ULONGNumberOfNetBufferLists,ULONGReceiveFlags){PMS_FILTERpFilter=(PMS_FILTER)FilterMoleContext;PNET_BUFFERNetBuffer;UCHARTempBuffer[MAX_BUFFER_SIZE];ULONGBytesCopied;pEthHdrEthernetHeader;pIPHdrIpHeader;#ifDBGDbgPrint(">>>FilterReceiveNetBufferLists:%p ",NetBufferLists,ReceiveFlags,NumberOfNetBufferLists);#endifdo{for(NetBuffer=NetBufferLists->FirstNetBuffer;NetBuffer!=NULL;NetBuffer=NetBuffer->Next){GetNetBufferData(NetBuffer,TempBuffer,MAX_BUFFER_SIZE,&BytesCopied);if(BytesCopied==0){#ifDBGDbgPrint("Netbuffercatcherror ");#endif}else{EthernetHeader=TempBuffer;if(EthernetHeader->Type==0x0800){IpHeader=EthernetHeader+sizeof(EthHdr);#ifDBGDbgPrint("IPpacketexist ");#endif}}}}while(FALSE);

20

调用来指示发送数据。如果FilterDriver设置了的状态为NDIS_STATUS_SUCCESS,NDIS通过驱动的FilterReturnNetBufferLists返回指示数据。如果FilterDriver设置了的ReceiveFlags值为NDIS_RECEIVE_FLAGS_RESOURCES,那么在函数返回后FilterDriver会立即恢复对NET_BUFFER_LIST的所有权,这时FilterDriver必须立即处理这个NET_BUFFER_LIST的返回。在这种情况下是不会调用FilterReturnNetBufferLists返回NET_BUFFER_LIST结构的。

C. java监控聊天内容 高手进

楼主,完全用java无法闹渗实现以上任何一种监控,更没有可能实现远程控制。
首先,你要实现过滤文件系统,过滤WINDOWS窗口,过滤网络包的各种驱动,再把各种监控的应用层实现用C语言写成dll,然后闭数用java建立一个dll的映射,调用dll里这些和操作系统内核打交道的函数。
光第一步的一两个功能就够你一个毕业设计了,每一个功能你都得用C写过滤驱动。你还想映射到JAVA上去,又得写接口函数,还要设计GUI,SWING虽然好过MFC但也不是一时半会儿就能玩熟的,所以别太贪心吧,如液态脊果写软件这么简单那么人人都是富翁了。

D. 请教各位高手,用c#或vb.net如何监视或阻止系统读取某个文件

都不是C#能够简单做出盯判来的。
相颂则游关野销技术: shell hook, ifs(文件过滤驱动)。

E. NetGroup Packet Filter Driver是什么驱动程序

模块NPF(Netgroup Packet Filter),是一个虚拟设扮脊备驱动程序文件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这圆腊个过程中包括了橘缺滑一些操作系统特有的代码

F. 怎么用代码实现WDM文件过滤驱动安装

为了让这个驱动被系统加载,必须创建一个inf文件。由于是使用现成的例子,因此这一步也可以省下来。直接右键点击例子中的inf文件,在弹出的菜单中选择“安装”即可。
这里要注意的是,inf中的StartType参数,它可以控制驱动被加载的方式:
SERVICE_AUTO_START (2) 安全模式下不会自动加载 SERVICE_BOOT_START (0) 在系统安全模式下启动时 驱动也会自动加载
SERVICE_DEMAND_START(3) 则驱动不会自动加载
因为是测试,我使用SERVICE_DEMAND_START,即由手动加载驱动。例子是miniFilter驱动,因此可以在命令提示行中用“fltmc load 驱动名称”来加载,相应的卸载是“fltmc unload”。如果是其它驱动,则用"net start 驱动名称"来加载,相应的卸载是"net stop 驱动名称"。注意驱动名称不是文件名,而是inf中[Settings]的ServiceName值。驱动要发布时,也可以通过CreateService & StartService API来动态安装。
Inf文件的写法,可以参考例子,或者拿现成的改一改。下面的是摘自驱动开发网的
XiangXiangRen整理的Inf文件,改起来比较方便,谢谢XiangXiangRen

阅读全文

与net过滤驱动相关的资料

热点内容
医疗污水处理臭氧的投加量 浏览:308
750瓦污水泵1小时能抽多少水 浏览:593
污水的文献有哪些 浏览:977
化学蒸馏瓶 浏览:706
800石英砂过滤器 浏览:847
不粘锅除垢小苏打 浏览:385
提升泵反水 浏览:369
蒸馏法过程视频 浏览:759
绍兴有机污水处理多少钱 浏览:236
小鸟饮水机中装的什么液体 浏览:226
酸洗废水提升泵 浏览:659
合肥空气过滤设备 浏览:480
有机物蒸馏设备 浏览:120
树脂切割片配方比例 浏览:522
edi除盐装置三个字母怎么意思 浏览:468
水处理是商标注册多少类 浏览:684
新型果汁污水处理设备哪里卖 浏览:770
丽水反渗透膜修复剂怎么样 浏览:966
浙江电镀污水除氰价格如何 浏览:800
ro膜红色头是什么 浏览:870