阅读:1529回复:1
关于NDIS HOOK的几个小问题请教各位大虾!
小弟近日在研究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我怎么初始化呢? 真诚感谢各位! |
|
最新喜欢:![]() |
沙发#
发布于:2004-11-26 18:16
在PtReceive里判断得到的数据是不是完整的,如果不是完成的,
再调用NdisTransferData,如果没有返回Pending,那么剩余的数据 就直接返回给你了,如果返回pending,则系统会在某个时刻调用 PtTransferDataCompleteHandler,剩余数据作为参数传给你,你需要把这些数据和在ptReceive中得到的数据组合起来得到整个包的内容 用NdisAllocatePacket分配包描述符,然后还需要分配buffer,具体你可以参考本论坛上的代码,自己搜索吧 :) |
|