- 论坛徽章:
- 1
|
本帖最后由 泽畔无材 于 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里的抓包结果是:
可见整个http通信过程非常顺利啊。。
然而chrome浏览器显示无法显示此网页,错误代码:ERR_INVALID_CHUNKED_ENCODING
chrome端的处理过程是:
也就是说接收完头部之后,处理body时出现了错误。。但是查看body部分报文也是非常正常的。。
后来用较早前备份的成功的代码测试也是相同的错误,很诡异。。
求问大婶们,可能是什么地方出了问题呢?我可能调太久调头晕了。。
PS:对于有些网页,比如2345网址导航, 不管其长度是否要分片,上述模块可以正确添加一小段代码,比如<!-- test -->, 但是对于多数网页来说,都是返回ERR_INVALID_CHUNKED_ENCODING。。
PPS:刚发现是网页内容被截断了,但content-length已经被我改过了的啊,见下面截图,不清楚为什么实际上还是按原始长度解析:
更新:已查明是Transfer-Encoding: chunked 搞的鬼,这都是http部分的事情了,害我在底层找半天。。
更新:修正 上面这个属性后,初步搞定了~
|
评分
-
查看全部评分
|