greatydavidz
驱动牛犊
驱动牛犊
  • 注册日期2004-11-15
  • 最后登录2005-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1529回复:1

关于NDIS HOOK的几个小问题请教各位大虾!

楼主#
更多 发布于:2004-11-18 15:27
 小弟近日在研究ndis hook,想做一个防火墙,写驱动的时候,发现有这样的问题,我把驱动装在服务器上
如果是本机 浏览网页  (假设电信动态ip:219.140.85.74)

数据包 是这样的: 219.140.85.74-->202.114.79.63(网址的ip)

                 202.114.79.63-->219.140.85.74

                  .........

如果是局域网另外一个用户(192.168.0.2) 上网
         (UDP)  219.140.85.74-->202.103.24.68(DNS服务器)
         (UDP)  202.103.24.68-->219.140.85.74
         (UDP)  202.103.24.68-->192.168.0.2
         (TCP)  219.140.85.74-->202.114.79.63(网址的ip)
         (TCP)  202.114.79.63-->219.140.85.74
         (TCP)  202.114.79.63-->192.168.0.2

  由于我没有hook, TransferDataHandler,所以没有逮到剩余的数据,那么我在做 网站过滤的时候就碰到了一个这样的问题:

  如果是本机(服务器)上网,那么在219.140.85.74-->202.114.79.63
申请包里面 可以抓到 http头  

   但是其他用户上网,在上面写到的这六类包里面根本抓不到http头,是不是因为 TransferDataHandler的原因?

   关于TransferDataHandler,我知道它是用来copy剩余的数据的,但是它是在protocolreceive里面调用的,那么send的剩余数据就不管了吗,http头应该是在send里面的啊!


   我在写TransferDataHandler的时候,如果把它hook了,是不是在我自己的protocolreceive调用这个函数就行了,它里面的一个参数
IN OUT PNDIS_PACKET Packet ,  这个packet我怎么初始化呢?

  
   真诚感谢各位!
        


 
                

最新喜欢:

WY.lslrtWY.lsl...
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-26 18:16
在PtReceive里判断得到的数据是不是完整的,如果不是完成的,
再调用NdisTransferData,如果没有返回Pending,那么剩余的数据
就直接返回给你了,如果返回pending,则系统会在某个时刻调用
PtTransferDataCompleteHandler,剩余数据作为参数传给你,你需要把这些数据和在ptReceive中得到的数据组合起来得到整个包的内容

用NdisAllocatePacket分配包描述符,然后还需要分配buffer,具体你可以参考本论坛上的代码,自己搜索吧 :)
游客

返回顶部