WFP开发学习笔记

1 篇文章 0 订阅

自己在开发学习过程中得到的经验,供新手参考,老鸟请指点不足之处:

1.如何关联数据(路径、进程ID等)到其他层?
答:使用函数FwpsFlowAssociateContext。

2. FlowContext关联的数据是否可以关联到FWPS_LAYER_*任意层?
答:经过实践测试,发现数据可以关联到TRANSPORT以上层,但不能关联到IPPACKET层(原因未知,微软没有给出明确说明)。

3.TRANSPORT层是否包含了IP头?
答:发送时MDL中部分包含IP头,部分不包含IP头(原因未知,也可能是数据从应用层往下传时,系统还未加上IP头信息)。接收时MDL中都包含有IP头。

4.IPPACKET层是否包含了IP头?
答:发送时OUTBOUND,MDL中全部包含了IP头,MDL的偏移量与数据长度都正确。
接收时INBOUND,MDL中全部包含了IP头,但MDL的偏移量与数据长度不匹配(原因未知)。且接收时微软默认把IP头给隐藏了(原因未知),可以通过修改偏移量来获取有效IP头。
具体变量为:NetBuffer->DataLength(真实长度),NetBuffer->CurrentMdlOffset(真实偏移地址,如果需要获取IP头,需要前移),Mdl->ByteCount(此数据接收时不准,需根据实际数据长度去获取数据,类似UNICODE_STRING)。

5.接收时MDL中的偏移量与数据长度不匹配该如何调整,获取有效数据?
答:通过函数NdisRetreatNetBufferDataStart 前移偏移地址。
通过函数NdisAdvanceNetBufferDataStart 还原便宜地址。
通过函数 NdisGetDataBuffer或者自己写获取数据函数。记得需要判断偏移地址CurrentMdlOffset所在的MDL,和实际的数据长度。

6. FWPM_LAYER_ALE_AUTH_CONNECT_V4与FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4的区别。
答:FWPM_LAYER_ALE_AUTH_CONNECT_V4 不带数据包,只是一个发起连接的动作,里面不能进行数据拦截操作。
FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4带有数据包,里面可以进行数据拦截操作。

7.可否修改IP数据包?
答:可以修改IP数据包。修改IP包信息,在IPAPCKET层。修改TCP/UDP包信息,在TRANSPORT层。修改数据包体,在ALE层即可。

8.可否获取整个IP包数据?
答:不能获取MAC包数据,WFP只支持获取IP头以后的数据。后面的WDK版本可能支持获取MAC包数据。

9.新接触WFP该参考哪些资料?
答:参考 D:\WinDDK\7600.16385.1\src\network\trans 目录下的工程,或者参考看雪上面的例子,还有寒江的第15章(入门用)。

10.WFP启动/结束流程图:(图1)

11.FlowContext操作流程和注意事项?
答:要关联Context,注册callout时必须有Deletion回调函数,否则关联会失败。
1.创建Context。2.添加到Context链表。3.关联Context。4.在指定层通过参数UINT64 flowContext获取Context。
5.使用Context。6.Context生命周期结束时,系统会自动调用Deletion回调函数,你需要在此从链表删除并释放内存。7.驱动卸载时,通过执行FwpsFlowRemoveContext,将没有销毁的Context销毁掉。调用FwpsFlowRemoveContext后,删除过程还会出现在Deletion回调函数中(注意)。

12.个人对WFP的简单理解:
注册一组回调函数,所有进出网络数据系统都会调用这组回调函数,你在里面进行逻辑判断,得出结果BLOCK/PERMIT,系统根据你提供的结果进行拦截/放行。

13.WFP常用函数:
FwpsInjectionHandleCreate
FwpsInjectionHandleDestroy
FwpsQueryPacketInjectionState
FwpmEngineOpen
FwpmEngineClose
FwpmTransactionBegin
FwpmTransactionCommit
FwpmTransactionAbort
FwpsCalloutRegister
FwpmCalloutAdd
FwpmSubLayerAdd
FwpmFilterAdd
FwpsCalloutUnregisterById
FwpsFlowAssociateContext
FwpsFlowRemoveContext
MmGetSystemAddressForMdlSafe

加载/卸载
(图1)

FlowContext
(图2)

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如何修改TCP/IP并发连接数,网络上提供不少修改办法,但其中有不少是行通的,本文将做详细分析. 一、注册表修改法的误区 为了突破SP2对TCP并发连接数的限制,网上曾经流传过一种修改注册表的方法,操作步骤如下: 单击“开始”/运行,输入Regedit打开注册表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,修改的“TcpNumConnections”的键值,将之由10改为150,即设置TCP最大并发连接数为150。 经过实际测试,我们发现该方法看起来有效,但实质上并不能突破并发连接数限制,提高SP2的多线程访问速度。因为SP2对线程数目的控制,是通过“Tcpip.sys”这个系统文件来实现的,并不是通过注册表实现的,因此,该方法不能增加SP2的TCP并发连接数。 二、使用工具来替换Tcpip.sys 为了突破SP2的TCP并发连接数限制,正确地方法是修改Windows XP SP2的系统文件Tcpip.sys。Tcpip.sys是Windows XP SP2重要的系统文件,位于“C:\Windows\system32\drivers目录下。该文件由于平时受到系统保护,所以正常情况下你是无法替换它的,必须在安全模式或纯DOS模式下才能替换,建议你使用以下专门工具、来替换“Tcpip.sys”文件,操作步骤如下: 从网上http://www.lvllord.de/download.php?url=en/EvID4226Patch223d-en.zip下载替换工具(仅为30KB),用它来修改系统文件Tcpip.sys最大安全并发连接限制;然后备份一下C:\Windows\system32\drivers\Tcpip.sys文件。 接下来,双击打开下载文件ZIP压缩包,运行其中的替换工具EvID4226Patch.exe,随之将弹出一个命令行提示符窗口,首先显示Windows当前的Tcpip.sys文件版本,以及并发连接的限制数值(默认为10);接着询问你是否将连接数限制在50,你可以选择“Yes/No/Change”,如果你输入“Y”,则会将并发连接数改为“50”,如果想改为其他数(例如150),可以在提示符后输入“c”,然后输入最大的并发连接数(例如150)回车,最后在提示符下输入“Y”并回车,这样就替换了Tcpip.sys文件;Tcpip.sys文件被替换后,随之会弹出系统文件保护对话框,你可以点击“取消”按钮,然后点击“是”按钮,重新启动后,Tcpip.sys文件的替换就大功告成了! 现在你的最大并发连接数已超过10个,达到了150个,因此Windows XP SP2的多线程访问速度得到了提升,当你用FlashGet、BT等多线程下载时,就不会感到网络带宽的限制了。 三、DOS下修改Tcpip.sys文件 以上替换程序EvID4226Patch.exe也可以在DOS下使用,方法是:首先把EvID4226Patch.exe拷贝到C盘根目录下;然后再进入DOS模式,进入C盘根目录,输入命令EvID4226Patch/L=$n$/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可修改Tcpip.sys文件。 注意:以上$n$为你要设置的最大安全连接数,假如要把最大并发连接数设置为150个线程,那么输入命令EvID4226Patch/L=150/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值