阅读:3046回复:24
哪位用“注册假协议”的方法做过FW,或VPN,帮忙看看,谢了!
我在发送数据包的时候出了问题,我只是在我的发送函数里,
申请了一个packet,一个buffer,和一块memory,把原来数据包的数据copy到新的packet里来,然后把新的packet发送出去,可是,问题出在发送出去之后如果释放我申请的packet,本来也得到sendcompletehandler了,可是它却不能被激活(有的机器可以,但有的不行,不知道为什么?) 我用的结构是ndis_protocol_block 和 ndis_open_block,系统是win 2000 pro 我把open_block里的sendcompletehandler和protocolhandle->char...s.sendcompletehandle都做了处理,可是我的网卡依然不调用sendcomplete,不知道为什么? 还有,哪位知道如何处理多网卡?谢谢! |
|
最新喜欢:chili |
沙发#
发布于:2002-06-17 17:27
NdisSend 先判断返回STATUS值。
是不是NDIS_STATUS_PENDING 如果是-->确认NdisBindingHandle是否是要发送的ndis_open_block 如果是---> 确认ndis_open_block-->sendcompletehandle是否正勾挂不同的版本位置一样。 如果是--->在发送时请确认sendcompletehandle是否是指向自己的勾挂程序,因为有可能别的防火墙,包过滤软件在你后面重新勾挂,或者在网络断开通常是HUB断电或网线被拨后再接通后,NDIS重新初始华NDIS_OPEN_BLOCK的。 如果以上都不是。 |
|
|
板凳#
发布于:2002-06-18 08:41
可是在ndis_open_block结构里的sendcompletehandler,我已经勾挂出来了,但是系统send完之后并没有进入我的函数,ndis_open_block结构里有一个protocolhandle,这个handle里也有一个sendcompletehandler,我也进行了勾挂,在勾了这两个handler后,在有的机器上会进入我自己的处理函数,但是有的机器就不行,不知道为什么?gjp知道吗?
|
|
地板#
发布于:2002-06-18 08:56
gjp,你所说的“确认NdisBindingHandle是否是要发送的ndis_open_block ”时原NdisBindingHandle是否是Send函数传入的参数MacBindingHandle,这个参数是什么结构,怎么判断它是否是要发送的ndis_open_block? 3x
|
|
地下室#
发布于:2002-06-18 11:44
gjp,你所说的“确认NdisBindingHandle是否是要发送的ndis_open_block ”时原NdisBindingHandle是否是Send函数传入的参数MacBindingHandle,这个参数是什么结构,怎么判断它是否是要发送的ndis_open_block? 3x 是的没错,通常情况下是由NDISOPENADAPTER时获得的。即NDIS_OPEN_BLOCK,你可以打印一下NDIS_OPEN_BLOCK--》NDIS_ADAPTER_BLOCK-->AdapterName 或者pAdapterInstanceName protocol里的sendcompletehandle其实是一张对照表当你的协议BIND到一个ADPATER上去的时候NDIS会将protocol里的SENDCOMPLETEHANDLE复制到ndis_open_block里。 |
|
|
5楼#
发布于:2002-06-18 17:15
gjp,我想处理modem等wan设备,怎么找到它的发送和接收函数?
是要得到\"TcpIp_WanArp\"这个协议的protocol_block吗? 是在它的openblock里面吗?我找到了,但是接不到包! |
|
6楼#
发布于:2002-06-18 23:22
我能够得到发送的数据包,但是得不到接受的数据包啊!
我已经把ndis_open_block里面的发送和接受函数入口值都替掉了!还有把ndis_protocol_block里面的接受函数入口值也替掉了,可是就是不能得到接受的数据包,不知道为什么呢?还有什么地方的接受数据包入口函数值我没有替掉的啊? |
|
7楼#
发布于:2002-06-19 08:52
里面有个PostNt31...receive的,你替换了吗?试试看!
|
|
8楼#
发布于:2002-06-19 09:33
是哪个结构里面的成员啊?
|
|
9楼#
发布于:2002-06-19 10:25
swift的hook做成功了么?
|
|
10楼#
发布于:2002-06-19 10:36
还有很多技术难点,不能实现,特别是在接收发送数据包时的内存释放问题,一直未能解决,不过要是做FW应该没问题,做VPN就不行了!
各位帮忙,谢了 :) |
|
11楼#
发布于:2002-06-19 10:40
还有很多技术难点,不能实现,特别是在接收发送数据包时的内存释放问题,一直未能解决,不过要是做FW应该没问题,做VPN就不行了! 呵呵,慢慢来。 |
|
12楼#
发布于:2002-06-19 10:41
急呀,你也在做吗?
|
|
13楼#
发布于:2002-06-19 10:42
急呀,你也在做吗? 我没有在做;只是对hook比较感兴趣。。 |
|
14楼#
发布于:2002-06-19 21:23
做VPN建议还是使用IMD。
|
|
|
15楼#
发布于:2002-06-19 22:47
可是IMD的安装问题不太好处理,且IMD不好处理象PPPoE这样的设备,所以想用其他的技术!
VPN用ndis hook不能做吗? |
|
16楼#
发布于:2002-06-20 10:02
gjp,发送的时候我已经可以用MacBindingHandle区分网卡了,可是在接收的时候还是不行,接收的时候只有ProtocolBindingContext,用这个可以区分网卡吗?怎么区分?3x!
|
|
17楼#
发布于:2002-06-20 11:56
gjp,发送的时候我已经可以用MacBindingHandle区分网卡了,可是在接收的时候还是不行,接收的时候只有ProtocolBindingContext,用这个可以区分网卡吗?怎么区分?3x! 哇,你好厉害,能从MacBindingHandle来区分网卡啊,佩服。 其实不用那么复杂啊,我的实现方法是。 在勾挂ProcotolReceive和ProtocolSend时,其实就是勾挂NDIS_OPEN_BLOCK结构里的ProtocolReceive和protocolSend. 这个时候你可以做一个上下文关联(Context)将这个NDIS_OPEN_BLOCK 保存在CONTEXT时,当NDIS CALL Receive 或SEND时你可以根据这个Context知道是由那个NDIS_OPEN_BLOCK调用的。然后就可以知道由那块BINDING的网卡了. |
|
|
18楼#
发布于:2002-06-20 13:34
能否说的详细些,有点不太懂???
保存的open_block是hook前的还是hook后的,它调用receive或send的时候怎样区分,context的内容应该是什么样的?谢谢了! :) |
|
19楼#
发布于:2002-06-20 15:08
能否说的详细些,有点不太懂??? 当驱动程序ndis hooking初始化的时候, 遍历ndis_protocol_block和ndis_open_block结构并替换结构里 ProtocolReceive ProcotolSend函数的时候。你这个时候在替换每一个函数时,你都要做一个上下文关联(context)来保存ndis_open_block结构.以便要知道当NDIS调用protocolreceive时是调用那个ndis_open_block里的(即哪个BINDING miniport发出的)protocolreceive. 还有你的protocolreceive里有没有使用NdisTransferData函数。 如果有NdisBindingHandle就是我所说的ndis_open_block你可以通过这个来判断/ |
|
|
上一页
下一页