免费注册 查看新帖 |

Chinaunix

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

如何用netfilter修改数据包的内容?【急救】 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
21 [报告]
发表于 2011-03-16 18:14 |只看该作者
请问哥德巴赫兄,如果我在LOCAL_IN的hook函数里更改tcp包(http页面)内容的话,抓包是显示不出来的吧

应该是的,已经过了抓包所在的位置了。
不过建议还是抓包确认一下。

并且现在遇到这样一个问题。
我在原页面的末尾某处
如</body></html>前插入一段字符"1234567890",但是浏览器中只能显示"1234567890</bo"

意思就是传到浏览器的数据长度还是原来的那么长


感觉数据包的长度修改没有生效,修改完毕之后,打印一下 skb->len 看一下

我在local in的回调函数里这么做的:
1.判断tailroom,从而判断是否使用pskb_expand_head分配更多的连续空间。if tailroom>strlen(str)
则不使用pskb_expand_head。其中str为待插入字符串。
2.使用skb_put设置tail指针,扩展strlen(str)大小的空间。
3. 转字节序重设ip头的tot_len
4.插入待插入数据
5. return NF_ACCEPT

现在问题是,如果我在log里输出从haystack(tcp包头的尾指针)开始的字符串,是可以将全部的页面内容输出的,但是浏览器上却只显示修改前的页面长度的相应长度的页面内容

检验和重新计算了吗。


但是由于浏览器期望的next seq已经改变,所以页面下一个包(是一张图片),就无法传送到浏览器,不知怎样解决。

你应该负责这个 TCP 连接随后的所有数据包的序列号转换了。

论坛徽章:
0
22 [报告]
发表于 2011-03-16 19:32 |只看该作者
回复 21# Godbach

检验和计算了,但是发现检验和计算与否都得到这样的结果。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
23 [报告]
发表于 2011-03-16 19:39 |只看该作者
skb->len 呢

论坛徽章:
0
24 [报告]
发表于 2011-03-16 19:45 |只看该作者
回复 23# Godbach


    在做完skb->put操作之后,skb->len比原来增加了strlen(str)个长度,没有问题。

我再想是不是还有其他的一些信息会告诉浏览器应该读多长的数据啊?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
25 [报告]
发表于 2011-03-16 19:49 |只看该作者
对了,想起来了, HTTP 响应的页面中还记录的有长度

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
26 [报告]
发表于 2011-03-16 19:50 |只看该作者
有个 content-length 字段

论坛徽章:
0
27 [报告]
发表于 2011-03-16 21:34 |只看该作者
本帖最后由 andyzhuangyy 于 2011-03-16 21:36 编辑

回复 26# Godbach


    十分感谢,哥德巴赫兄!确实是content-length的问题!修改了之后显示就正常了!!!
    小弟还有一问:就是如何实现用Netfilter在lo网卡中收发包呢?比如浏览网页的时候,我在local out处设置一个hook点,将请求的数据包发送到lo网卡上,可是在local in的hook点上没有任何反应?到底该如何来做呢?
    或者我还有个想法是在local out点监听报文,只要有请求,我就在local in中发送一个返回报文给浏览器!这样行得通么?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
28 [报告]
发表于 2011-03-16 23:56 |只看该作者
    小弟还有一问:就是如何实现用Netfilter在lo网卡中收发包呢?比如浏览网页的时候,我在local out处设置一个hook点,将请求的数据包发送到lo网卡上,可是在local in的hook点上没有任何反应?到底该如何来做呢?

建议你先分别在 LOCALIN 和 LOCALOUT 处通过 hook 函数,来查看一下这个流程

论坛徽章:
0
29 [报告]
发表于 2011-03-17 14:34 |只看该作者
回复 28# Godbach


    在local out处发送http请求到lo,之后在local in处给浏览器返回web页面,我有几个疑问,还请哥德巴赫兄指教:
(1)这个过程还需要自己建立tcp的连接么?还是可以直接给浏览器返回web数据包呢?
(2)在local in处给浏览器返回web页面,这个过程是什么样的呢?是直接ACCEPT,还是需要调用dev_queue_xmit()来发送呢?
(3)如何将.html的文件放到skb中返回呢?是用vfs_read读取.html文件到一个buffer之后再加入skb中么?

论坛徽章:
0
30 [报告]
发表于 2011-03-17 21:32 |只看该作者
唉。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP