阅读:1728回复:7
关于在PtReceivePackets等部分函数中数据包处理的若干问题
我的目的很简单 ,就是想通过NDIS中间层驱动截获HTTP包的内容
但是遇到一些疑问 1. 想请问你们是通过怎样截获到HTTP数据包的?我的方案是先在PtReceivePackets这类函数中得到数据包的缓冲区,然后提取出该包目的地址的端口,如果不是80端口就丢弃。如果是80端口那么就将HTTP包内容提取出来 2. 我现在就只知道如何从数据包中提取IP等基本的信息,那么我想提取HTTP包的内容该怎么做呢?我说的HTTP内容指的是我下面的那个红色字标注的例子 3. 我在底层截获的HTTP数据包会不会存在什么编码问题,也就是说如果我得到了HTTP数据包内容的缓冲区,那么我是否能直接得到类似 GET /mSend/1/show.aspx?f=100452&fn=有没有人告诉你&mt=002002013&m=13125689536&a=20658&b=218569&c=601&d=119&e=0&s= HTTP/1.1 Accept: application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: http://www.u8u.com/mSend/1/?f=100452&a=20658&b=218569&c=601&e=0&d=119 Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: www.u8u.com Connection: Keep-Alive Cookie: ASP.NET_SessionId=5ox43xynkjflpwin4w2umc45 这样的数据包?由于我不清楚底层一些操作,所以我担心会不会要经过编码才能得到这些内容。 也许你们不经意的一句话会令我茅塞顿开,希望你们多给点意见,谢谢 :) |
|
沙发#
发布于:2008-07-23 16:37
你的目的很简单,实现起来很麻烦。
有了目的,就要选择正确的解决方案。为什么偏偏迷上ndis? 了解了windows的网络体系,然后选择正确的方法。ndis不适合作高层协议分析,可以到tdi层去做。 |
|
|
板凳#
发布于:2008-07-23 21:35
我是想在任何用户进程接受到这个包之前先对这个包进行处理,我是最近才知道TDI可以做这些事情的,但是NDIS已经看了那么多了不想又转去看TDI
TDI可以实现我的要求么?但是似乎TDI不能对ARP这些协议过滤对吧? |
|
地板#
发布于:2008-07-23 21:56
我昨天研究了下代码,似乎步骤清楚了,
在PTRECEIVE中能得到报文,可以通过这个得到IP之类的信息 在MPTRANSFER中得到数据,自己定义IP,TCP之类的结构 取出数据后用TCP结构来提取里面的内容 我的思路对不?我都断断续续学NDIS半个月了让我改看TDI太残忍了吧....................... |
|
地下室#
发布于:2008-07-24 12:02
建议分两层:传输层以下的协议用ndis, 应用层协议用tdi。
|
|
|
5楼#
发布于:2008-07-29 17:49
谢谢版主 呵呵 我看了下TDI驱动,似乎可以很简洁的实现我的目的
省了我不少工夫啊~ |
|
6楼#
发布于:2008-08-04 14:43
通过80端口判断HTTP协议正确吗?很多是80端口以外的。比如8080,8888
|
|
7楼#
发布于:2008-08-04 15:04
我的目的是想获取IIS的请求数据,所以一般情况下都是网页默认都是访问80端口的吧
|
|