免费注册 查看新帖 |

Chinaunix

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

[网络子系统] netfilter修改http报文后抓包正常,浏览器无法显示 [复制链接]

论坛徽章:
1
子鼠
日期:2014-05-05 10:36:02
发表于 2014-05-05 10:53 |显示全部楼层
本帖最后由 泽畔无材 于 2014-05-06 09:13 编辑

rt, 在网关处加载一个内核模块,利用netfilter在网页中加一小段代码。
参考了网上很多朋友的资料,昨天曾经几乎做出来了,后来不知道改了哪里,结果就出现了标题说的问题。。
主要处理方式就是:
if (ct && __nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
         iph->ihl*4 , (int)(head - payload), 0,
        _ins, LEN_INS, true )) {
                skb->local_df = 1;        //强制分片
                skb_shinfo(skb)->gso_size = 0;        //hack:防止warning。。
}
貌似__nf_nat_mangle_tcp_packet里都处理好了一切,另外还用了ct->status的高几位标示连接状态,方便插入。
在PC端的wireshark里的抓包结果是:
抓包.jpg
可见整个http通信过程非常顺利啊。。
然而chrome浏览器显示无法显示此网页,错误代码:ERR_INVALID_CHUNKED_ENCODING
chrome端的处理过程是:
chrome.jpg
也就是说接收完头部之后,处理body时出现了错误。。但是查看body部分报文也是非常正常的。。
后来用较早前备份的成功的代码测试也是相同的错误,很诡异。。

求问大婶们,可能是什么地方出了问题呢?我可能调太久调头晕了。。

PS:对于有些网页,比如2345网址导航, 不管其长度是否要分片,上述模块可以正确添加一小段代码,比如<!-- test -->, 但是对于多数网页来说,都是返回ERR_INVALID_CHUNKED_ENCODING。。
PPS:刚发现是网页内容被截断了,但content-length已经被我改过了的啊,见下面截图,不清楚为什么实际上还是按原始长度解析:
pkt.jpg

更新:已查明是Transfer-Encoding: chunked 搞的鬼,这都是http部分的事情了,害我在底层找半天。。
更新:修正 上面这个属性后,初步搞定了~


                       

评分

参与人数 1可用积分 +2 收起 理由
Godbach + 2 很给力!

查看全部评分

论坛徽章:
0
发表于 2014-05-05 11:12 |显示全部楼层
content-length是不是正确的?

论坛徽章:
1
子鼠
日期:2014-05-05 10:36:02
发表于 2014-05-05 11:19 |显示全部楼层
回复 2# lonelyair
content length 也改过了的,有些动态生成的网页是没有content length的,经过测试,即使不改centent length, chrome也可以显示整个网页。
另外,诡异的是,对于有些网页,不管其长度是否要分片,上述模块可以正确添加一小段代码,比如<!-- test -->, 但是对于多数网页来说,都是返回ERR_INVALID_CHUNKED_ENCODING。。


   

论坛徽章:
0
发表于 2014-05-05 11:27 |显示全部楼层
那这个是本身chrome有几率出现这个错误,还是你修改导致的?
另外content cache与encode怎么设置的?不知道有没有影响


另,修改BODY部分也没成功过,还请赐教

论坛徽章:
1
子鼠
日期:2014-05-05 10:36:02
发表于 2014-05-05 11:36 |显示全部楼层
回复 4# lonelyair
移除模块后不会出现这个错误。
content cache没有设置,不过每次测试前都清除浏览器缓存数据,并且将请求改为不允许gzip压缩编码等
应该只要找出目前这个问题所在,就差不多能完成http的报文修改了(虽然昨天已经实现过了的啊,后来不知道改了哪里就成这样了。。)


   

论坛徽章:
0
发表于 2014-05-05 17:34 |显示全部楼层
回复 1# 泽畔无材


    恭喜恭喜啊,能不能把过程详细些,chunk会导致content-length的长度?对于HTTP处理不太理解

论坛徽章:
3
午马
日期:2013-09-09 21:55:38天秤座
日期:2014-03-04 10:39:14午马
日期:2014-05-05 18:56:36
发表于 2014-05-05 18:56 |显示全部楼层
楼主,你好,请问你能不能把你写的代码给我一份吗,我现在特别想学netfiter,可是没有例子,想借你的程序看看,demo也行,谢谢

论坛徽章:
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
发表于 2014-05-05 19:37 |显示全部楼层
回复 7# 我不重要
楼主,你好,请问你能不能把你写的代码给我一份吗,我现在特别想学netfiter,可是没有例子,想借你的程序看看,demo也行,谢谢

直接看net/netfilter的源码不就行了

   

论坛徽章:
0
发表于 2014-05-05 21:01 |显示全部楼层
恭喜lz找出问题。chunk以\r\n'0'\r\n\r\n作为结束标志,

论坛徽章:
3
午马
日期:2013-09-09 21:55:38天秤座
日期:2014-03-04 10:39:14午马
日期:2014-05-05 18:56:36
发表于 2014-05-06 09:16 |显示全部楼层
回复 8# 瀚海书香
不好意思啊,因为我对netfilter不是很熟,我刚才看了一下,不知道如何入手,我觉得应该先netfilter的接口先入手吧,以后弄熟了在去看他的源代码比较好,不知道我说的对不对,谢谢大神


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP