免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 19804 | 回复: 11
打印 上一主题 下一主题

[其他] 关于HTTP请求报文的分片分析[已解决] [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-11 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-02 21:48 |只看该作者 |倒序浏览
本帖最后由 linuxchyu 于 2013-06-04 13:44 编辑

最近在做抓取Http请求报文分析的工作,先上抓取分析结果:(我是基于libpcap用C语言写的工具)
  1. **** *****1: 21:11:27  cap len :1514 **** ****
  2. frag : 0x4000 //相应IP报文的标记字段  
  3. data length :1460  //TCP数据段的数据长度 ,以下是数据字段对应的字符显示:
  4. POST /aj/mblog/add?_wv=5&__rnd=1370178687496 HTTP/1.1
  5. Host: weibo.com
  6. User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.11) Gecko/20121121 Firefox/10.0.11
  7. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  8. Accept-Language: en-us,en;q=0.5
  9. Accept-Encoding: gzip, deflate
  10. Connection: keep-alive
  11. Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  12. X-Requested-With: XMLHttpRequest
  13. Referer: http://weibo.com/u/2948108023?wvr=5&wvr=5&lf=reg
  14. Content-Length: 100
  15. Cookie: __utma=15428400.2100457009.1357316613.1357316613.1357316613.1; __utmz=15428400.1357316613.1.1.utmcsr=blog.sina.com.cn|utmccn=(referral)|utmcmd=referral|utmcct=/s/blog_86fe5b440100uni3.html; UOR=www.sina.com.cn,weibo.com,www.sina.com.cn; SINAGLOBAL=790171170880.6036.1370174363284; ULV=1370174363524:1:1:1:790171170880.6036.1370174363284:; ALF=1372766390; un=linuxchyu@sina.com; wvr=5; SinaRot_wb_r_topic=38; USRUG=usrmdins1540_24; _s_tentry=www.sina.com.cn; Apache=790171170880.6036.1370174363284; USRHAWB=usrmdins540_96; SUE=es%3Dc3adf336a31c0ee65023772a769a60cf%26ev%3Dv1%26es2%3D889111db824299fda73c6d0055de9600%26rs0%3DClD8mrOWsCZnFYSL8kTv2aVIVmRRV7xT2UWXM3uGgQPXtcP4P0LlhztuA5zBwLUUkQOVaBSJreyg6pLmHBjbZsN%252BdgREjcIAcUU0ozXyXHgmOA5DPbG2w5wb30jObcprOAS0AiZcWCkO75oS6eW1qm6F9lLd3SDWso8QEXu%252Fsfg%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1370174391%26et%3D1370260791%26d%3Dc909%26i%3D5df2%26us%3D1%26vf%3D0%26vt%3D0%26ac%3D0%26st%3D0%26uid%3D2948108023%2

  16. **** *****2: 21:11:27  cap len :427 **** ****
  17. frag : 0x4000 //相应IP报文的标记字段  
  18. data length :373  //TCP数据段的数据长度 ,以下是数据字段对应的字符显示: 6user%3Dlinuxchyu.%252A%252A%26ag%3D9%26name%3Dlinuxchyu%2540sina.com%26nick%3D%25E8%2583%259C%25E5%25AF%2592%26fmp%3D%26lcp%3D; SUS=SID-2948108023-1370174391-GZ-rufv3-d826802439e42d1599021a9c28e68649; SSOLoginState=1370174391
  19. Pragma: no-cache
  20. Cache-Control: no-cache

  21. text=6666666666666666&pic_id=&rank=0&rankid=&_surl=&hottopicid=628&location=home&module=stissue&_t=0
复制代码
通过分析以上两个报文可以知道,一个Http请求被拆分为两个报文发送,但是第一个报文的Ip MF字段又没有被标记,请问大家根据什么才能将以上两个报文的数据字段合并?也就是说怎么才能知道以上两个报文实际上是属于同一个Http请求的报文?又知道用wireshark抓取的以上同一个Http报文,发现抓取结果是合并后的报文。wireshark又是根据什么来合并以上两个分开的报文?

解决问题的方向找到了,其实就是TCP会话重组,下一步就是实现TCP会话重组了。

论坛徽章:
1
丑牛
日期:2013-09-29 19:04:50
2 [报告]
发表于 2013-06-02 23:49 |只看该作者
http是TCP协议

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-11 06:20:00
3 [报告]
发表于 2013-06-03 00:00 |只看该作者
本帖最后由 linuxchyu 于 2013-06-03 00:00 编辑

回复 2# solu
是TCP协议,问题是怎么把几个分片组合到一起,依据是什么?
   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2013-06-03 07:48 |只看该作者
http是更上层的东西。你抓到的是tcp包,理论上有可能出现一个包里包含了前一个请求的末尾部分核后一个包的开始部分的。你抓到包后严格按照http协议来就可一了(http包的length头或着空行结尾),这就跟自己写了一个协议一样的。假设你自己写了一个http服务器,你怎么从客户端发来的数据里提取一个个http请求呢? 一样的道理。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-11 06:20:00
5 [报告]
发表于 2013-06-03 13:56 |只看该作者
本帖最后由 linuxchyu 于 2013-06-03 13:59 编辑

回复 4# csumck


    谢谢你的回答,但是这些不是问题,我想知道的是如何知道几个不同的分片是属于同一个HTTP请求数据?因为抓取的所有的分片IP包头里的MF标志位为0.
并且这和自己写HTTP服务器不用,如果是在服务器中则很容易获得完整的HTTP请求数据,但是我的需求是利用libpcap抓取数据包,如何根据抓取的数据包判断哪
几个数据包是属于同一个HTTP请求?

论坛徽章:
0
6 [报告]
发表于 2013-06-03 16:20 |只看该作者
HTTP是七层协议,所以会由七层应用去把握,TCP关心不到。
至于判断哪几个数据包是属于同一个HTTP请求,会有对应的头字段作标记的,你看一下RFC 2616文档后,应该就知道了。

论坛徽章:
0
7 [报告]
发表于 2013-06-03 16:22 |只看该作者
你需要对数据做一下解析,如果你在不解析HTTP协议数据的情况下,应该是无法实现你的目的。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-11 06:20:00
8 [报告]
发表于 2013-06-03 18:45 |只看该作者
回复 7# lenky0401


    呵呵,对HTTP请求报文分析是肯定要做的事情,但是,在服务器端要用基于libpcap的工具抓取所有到达服务器的http请求报文,并且,抓取的数据是直接过滤复制网卡的数据,那么需要根据什么规则判断哪些报文是属于同一个HTTP请求报文呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2013-06-03 18:56 |只看该作者
回复 5# linuxchyu


    没用过libpcap,不太理解难点在哪里? 你是说所有连接的http包你都抓到一起了吗, 如果是的话,那通过客户端端口号就可以区分请求所在连接了。
   看你1楼贴的抓到的内容,似乎就是同一连接上的1个http请求分到两次抓包抓到了, 这跟自己做服务器的时候不是一样的麼,自己做服務器也是1個請求可能分兩次收取完。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-11 06:20:00
10 [报告]
发表于 2013-06-03 19:10 |只看该作者
本帖最后由 linuxchyu 于 2013-06-03 19:11 编辑

回复 9# csumck

呵呵,这是通过libpcap工具抓取的包,是直接复制网卡上的数据,这个工具运行在服务器端的机器上,抓取的是所有发到端口号是80的tcp数据包,所有的客户端的http请求数据包会同时出现在网卡上,需要通过一些规则找出哪些属于同一个HTTP请求报文的数据包。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP