免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7773 | 回复: 29

[内核模块] 如何解析TCP包内压缩的html页面数据? [复制链接]

论坛徽章:
7
巨蟹座
日期:2015-07-09 16:10:34未羊
日期:2015-07-09 16:11:49数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-03-28 06:20:00IT运维版块每日发帖之星
日期:2016-04-11 06:20:00IT运维版块每日发帖之星
日期:2016-05-22 06:20:00
发表于 2015-01-19 09:53 |显示全部楼层
最近在用钩子模块去抓取 在页面访问时,tcp包内传输的html文件。没料到的是,包内传输的居然是压缩后的数据,无法直接对其进行修改。wireshark在抓包后能够还原这些压缩数据作为参考。查阅资料后发现,wireshark源码在判断gzip或deflate时确实有这样的操作。我现在需要改变html文件的内容,肯定是无法修改包内的压缩数据的。那么我应该怎么做最方便最简单呢,不会去跟wireshark源码学吧??求各位大神指点一二,非常感谢!

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2015-01-19 20:32 |显示全部楼层
方案1:HOOK客户端发起的HTTP请求,把request 中的Accept-Encoding: gzip, deflate参数去掉。让服务器别给你去压缩。
方案2:直接在内核里解压缩也不是不可以呀。内核已经有现成的压缩和解压缩函数呀。

论坛徽章:
7
巨蟹座
日期:2015-07-09 16:10:34未羊
日期:2015-07-09 16:11:49数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-03-28 06:20:00IT运维版块每日发帖之星
日期:2016-04-11 06:20:00IT运维版块每日发帖之星
日期:2016-05-22 06:20:00
发表于 2015-01-20 14:01 |显示全部楼层
回复 2# Tinnal
多谢版主大神指点!方案1的话,原理上是可行,但是这估计会降低传输效率的呢?  方案2的话,我在内核找到了一些相关的比如zlib_inflateInit2等函数,然后我直接把抓到的十六进制数据传参给解压函数,但是错误返回值-3好像是说传入的数据错误,  就这点一直摸不着头脑,不知问题在哪??

   

论坛徽章:
7
巨蟹座
日期:2015-07-09 16:10:34未羊
日期:2015-07-09 16:11:49数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-03-28 06:20:00IT运维版块每日发帖之星
日期:2016-04-11 06:20:00IT运维版块每日发帖之星
日期:2016-05-22 06:20:00
发表于 2015-01-20 14:06 |显示全部楼层
回复 2# Tinnal
对了,还有个大的问题就是,不知道能否实时解压,还是必须得等到接收完才能解压???
   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2015-01-20 19:42 |显示全部楼层
回复 4# qw10371006


    http在解压缩时,好像有些特别的格式改动。见:
http://blog.csdn.net/rainharder/article/details/26342919
Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0×78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0×7801,python zlib.compress()结果头部为0×789c。


http://en.wikipedia.org/wiki/HTTP_compression里有更为官方的说明:
Another problem found while deploying HTTP compression on large scale is due to the deflate encoding definition: while HTTP 1.1 defines the deflate encoding as data compressed with deflate (RFC 1951) inside a zlib formatted stream (RFC 1950), Microsoft server and client products historically implemented it as a "raw" deflated stream,[17] making its deployment unreliable.[18][19] For this reason, some software, including the Apache HTTP Server, only implement gzip encoding.


http://blog.sina.com.cn/s/blog_65db99840100kwh9.html
这里有一些案例。


建议根据具体的服务器、具体的错误返回,去多尝试。当前更为直接的方法是看看服务器生成压缩数据是怎么操作的:
http://httpd.apache.org/docs/2.2/mod/mod_deflate.html
下它的源码来看看吧。


至于你后面的问题,请看啊呢官方的Zlib说明,解压缩应该是支持的。
http://www.zlib.net/zlib_how.html

论坛徽章:
7
巨蟹座
日期:2015-07-09 16:10:34未羊
日期:2015-07-09 16:11:49数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-03-28 06:20:00IT运维版块每日发帖之星
日期:2016-04-11 06:20:00IT运维版块每日发帖之星
日期:2016-05-22 06:20:00
发表于 2015-01-21 11:16 |显示全部楼层
回复 5# Tinnal
讲的非常详细,多谢了!!

   

论坛徽章:
7
巨蟹座
日期:2015-07-09 16:10:34未羊
日期:2015-07-09 16:11:49数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-03-28 06:20:00IT运维版块每日发帖之星
日期:2016-04-11 06:20:00IT运维版块每日发帖之星
日期:2016-05-22 06:20:00
发表于 2015-01-21 19:40 |显示全部楼层
回复 5# Tinnal
忘了还有个问题了,文件分多个tcp数据包传输,, 修改了最后一个tcp数据包的skb,包长度,checksum这些因为我都考虑过了,但是为什么这个包不会被接收呢?

   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2015-01-21 21:06 |显示全部楼层
回复 7# qw10371006

在接收端用抓包软件抓下包,让它给你检查下你的包那错了吧。
另外,你改了一个TCP的包,你是怎么弄回去的,怎么压缩的?别个是一个HTTP报文整体压缩的,你只改了一个TCP包就多重压缩了?那样接收端不是不能正确解压缩了吗。


   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2015-01-22 08:42 |显示全部楼层
回复 2# Tinnal
方案1:HOOK客户端发起的HTTP请求,把request 中的Accept-Encoding: gzip, deflate参数去掉。让服务器别给你去压缩。
方案2:直接在内核里解压缩也不是不可以呀。内核已经有现成的压缩和解压缩函数呀。


方案1可行;
方案2只能工作在代理模式下(因为你解压当前数据包内容的时候可能需要前几个数据包和未来几个数据包才能真正解压开);

   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2015-01-22 09:04 |显示全部楼层
瀚海书香 发表于 2015-01-22 08:42
回复 2# Tinnal


恩,这也是我在8楼要说明的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP