免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: qw10371006
打印 上一主题 下一主题

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

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
21 [报告]
发表于 2015-02-02 09:34 |只看该作者
qw10371006 发表于 2015-01-30 10:50
回复 17# wait_rabbit
2.   并不是收到每一个tcp数据包都会返回一个ack。..


连续到来的数据包,至少应该隔一个就回复一个ack。

FreeBSD 的协议栈严格遵守这个标准,但是 linux 没有,并且间隔的tcp包数貌似没有规律。所以才比较奇怪。

论坛徽章:
0
22 [报告]
发表于 2015-02-03 14:34 |只看该作者
回复 20# qw10371006
代理模式性能损失更厉害吧。因为每个包跑到了应用层
想知道你方案1 是如何实现的。根据记录看。你应该不是每个包都修改ack和seq的吧
之前做过给你类似的东西。然后修改http包头后,整个tcp会话的ack 和seq都要重新维护了,很是麻烦。

论坛徽章:
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
23 [报告]
发表于 2015-02-03 16:12 |只看该作者
回复 22# anyhit
代理服务器内存占用确实会变高,空闲时会降至最低。老大还让我看源码,看的头疼。

方案1因为我需要添加的东西不多,只有一句html代码,撑死长度也就几十。改中间肯定太麻烦,所以我修改的最后一个tcp包,在最后加上我自己的东西。这样有个问题就是客户端返回的最后一个ack会是错误的,你需要改回去或者你自己DIY一个ack也行,要不然服务器会重复发送最后一个tcp。我是直接就懒得管他了,因为所有的数据全都收到了。。。。

   

论坛徽章:
0
24 [报告]
发表于 2015-02-03 17:04 |只看该作者
回复 23# qw10371006
最后一个包ack 不管确实问题不大。除非一些非常特别的服务器 配置了安全策略,比如“发现你老打开链接 不关闭,然后把你按照攻击处理,不让你访问了”

但我指的不是最后一个包
方案1:HOOK客户端发起的HTTP请求,把request 中的Accept-Encoding: gzip, deflate参数去掉。让服务器别给你去压缩。
是这个方案 因为改的是request 。应该是3次握手建立起来链接后的第一个包,你如何去掉Accept-Encoding: gzip, deflate这些的。去了之后 服务端返回的ack 肯定跟客户端希望收到的不一致了(也就是客户端request包的seq)

这个不一致是如何解决的?


你说的代理服务器消耗大的问题。如果你的应用比较简单。可以尝试自己写个代理服务器。这样结合自己的需求,可能1,2百行代码就ok了
如果嫌麻烦 可以借助一些http库来实现
   

论坛徽章:
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
25 [报告]
发表于 2015-02-04 10:25 |只看该作者
回复 24# anyhit

你如何去掉Accept-Encoding: gzip, deflate这些的。

因为请求包的每一项参数都是以\r\n(也即0d 0a)结束的,你可以从包的数据部分开始遍历找到好像是第六个吧,然后往前把参数区置0注意Accept-Encoding:这个要保留(不保留我也没试过。。。)。


这个不一致是如何解决的?

因为包的序列号是跟长度相关的,只要你不改变包的长度,那么序列号就不会改变。所以你改完数据后,重新校验各层的校验和之后就ok了。另外你可以注意一下完整的http响应数据分为多个chunk发送(不分的话也就是一整个chunk),每个chunk都在开头部分有其长度。如果你要改变长度,那么最好在最后再添加一个chunk,这样客户端才能完整接收。。。
   

我们的需求是要去模仿另一家的固件,那家用的直接就是代理,所以就算自己写老大也不会要的(更何况我也不会。。。。)

论坛徽章:
0
26 [报告]
发表于 2015-02-04 10:42 |只看该作者
回复 25# qw10371006
哦。你是直接清0了。明白了。之前怕有问题,是采用的直接删除的方式
自己写代理服务器。说白了就是写个简易的web server。然后http数据通过iptables做dnat 。没那么复杂的。当然若性能没问题,你也可以直接使用你之前的web server
   

论坛徽章:
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
27 [报告]
发表于 2015-02-04 14:36 |只看该作者
回复 26# anyhit

这样的代理服务器能有哪些功能呢
   

论坛徽章:
0
28 [报告]
发表于 2015-02-04 17:20 |只看该作者
回复 27# qw10371006

若你的需求是实现复杂的代理,那另说
但是若仅仅为了改指定域名的个别http包

那自己定制就很有优势
对客户端你是提供一个简易的web server
对服务端你是提供一个简易的客户端,类似wget

然后剩下的就是改包

复杂的web server提供的那些 安全管理,session机制,动态页面解析,线程负载均衡,缓存超时 等等
你都可以抛弃

这样对内存 和 cpu的消耗 肯定不是一个数量级的

关键还是看需求




   

论坛徽章:
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
29 [报告]
发表于 2015-02-04 17:49 |只看该作者
回复 28# anyhit


那些复杂的好像还真是不需要,因为这个代理是跑在路由器上面的,不能占用太多资源。这也就是我发这个帖子的原因,就是想过滤修改html页面内容。
   

论坛徽章:
0
30 [报告]
发表于 2015-02-04 18:51 |只看该作者
回复 29# qw10371006
嵌入式。那确实对 性能要求比较高。 可以看下你的chinaunix博客
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP