ay19880703
驱动牛犊
驱动牛犊
  • 注册日期2008-05-24
  • 最后登录2010-03-25
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望120点
  • 贡献值1点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1728回复:7

关于在PtReceivePackets等部分函数中数据包处理的若干问题

楼主#
更多 发布于:2008-07-22 18:50
我的目的很简单 ,就是想通过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

这样的数据包?由于我不清楚底层一些操作,所以我担心会不会要经过编码才能得到这些内容。


也许你们不经意的一句话会令我茅塞顿开,希望你们多给点意见,谢谢  :)
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2008-07-23 16:37
你的目的很简单,实现起来很麻烦。

有了目的,就要选择正确的解决方案。为什么偏偏迷上ndis?

了解了windows的网络体系,然后选择正确的方法。ndis不适合作高层协议分析,可以到tdi层去做。
走走看看开源好 Solaris vs Linux
ay19880703
驱动牛犊
驱动牛犊
  • 注册日期2008-05-24
  • 最后登录2010-03-25
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望120点
  • 贡献值1点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-07-23 21:35
我是想在任何用户进程接受到这个包之前先对这个包进行处理,我是最近才知道TDI可以做这些事情的,但是NDIS已经看了那么多了不想又转去看TDI  

TDI可以实现我的要求么?但是似乎TDI不能对ARP这些协议过滤对吧?
ay19880703
驱动牛犊
驱动牛犊
  • 注册日期2008-05-24
  • 最后登录2010-03-25
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望120点
  • 贡献值1点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-07-23 21:56
我昨天研究了下代码,似乎步骤清楚了,

在PTRECEIVE中能得到报文,可以通过这个得到IP之类的信息
在MPTRANSFER中得到数据,自己定义IP,TCP之类的结构
取出数据后用TCP结构来提取里面的内容


我的思路对不?我都断断续续学NDIS半个月了让我改看TDI太残忍了吧.......................
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地下室#
发布于:2008-07-24 12:02
建议分两层:传输层以下的协议用ndis, 应用层协议用tdi。
走走看看开源好 Solaris vs Linux
ay19880703
驱动牛犊
驱动牛犊
  • 注册日期2008-05-24
  • 最后登录2010-03-25
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望120点
  • 贡献值1点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-07-29 17:49
谢谢版主  呵呵  我看了下TDI驱动,似乎可以很简洁的实现我的目的

省了我不少工夫啊~
yingdi
驱动牛犊
驱动牛犊
  • 注册日期2007-11-15
  • 最后登录2008-08-14
  • 粉丝0
  • 关注0
  • 积分192分
  • 威望46点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-08-04 14:43
通过80端口判断HTTP协议正确吗?很多是80端口以外的。比如8080,8888
ay19880703
驱动牛犊
驱动牛犊
  • 注册日期2008-05-24
  • 最后登录2010-03-25
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望120点
  • 贡献值1点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-08-04 15:04
我的目的是想获取IIS的请求数据,所以一般情况下都是网页默认都是访问80端口的吧
游客

返回顶部