免费注册 查看新帖 |

Chinaunix

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

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

晴有林风 该用户已被删除
31 [报告]
发表于 2011-03-31 09:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
32 [报告]
发表于 2011-03-31 16:45 |只看该作者
iptables中的各个目标模块就可以修改数据包中相关的部分,如MARK, DSCP等等,看看就明白了。{:2_172:}

论坛徽章:
0
33 [报告]
发表于 2012-02-05 12:04 |只看该作者
請問G_VAR 大大

你主要是在PAYLOAD的前面加了一些數據
Ex:
在</body>之前加上了一個<table></table>的標籤

然後大概流程如下
  (1) 抓取數據包
  (2)去掉ip頭,tcp頭,剩下payload
  (3)在payload中查找</body>字符串
  (4)之後用pskb_expand_head重新分配空間

我最近也是要做類似的東西 不過是把PAYLOAD中間的資料刪掉 因為這兩天才剛碰到這些東西 所以還不是很清楚SKB的使用方式
所以
1.我應該不用作pskb_expand_head重新分配空間 ?
2.
假設我的PAYLOAD是   | A | B |C|
我要把B拿掉 最後組成 | A | C |
這樣的話在SKB 要怎麼完成呢?

1.重新複製一包SKB?
2.就原本的SKB 去做修改?
   a.使用memove 把C移到B 然後修改skb->tail ?

因為這兩天才剛碰到這些東西 所以還不是很清楚SKB的使用方式
問的問題可能很淺 或是 想法有錯 還請多多指教XD



论坛徽章:
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
34 [报告]
发表于 2014-09-29 18:22 |只看该作者
回复 20# andyzhuangyy

请问哥德巴赫兄,如果我在LOCAL_IN的hook函数里更改tcp包(http页面)内容的话,抓包是显示不出来的吧

显示不出来,已经过了抓包的环节了。

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

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

我在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包头的尾指针)开始的字符串,是可以将全部的页面内容输出的,但是浏览器上却只显示修改前的页面长度的相应长度的页面内容

这是什么原因??

IP 头和 TCP 头部的 checksum 是否都重新计算了?

浏览器段抓包看 response 包含它的长度和你修改的是否一致。按理说,修改了 HTTP response body部分,HTTP header 中包含 length 字段也需要修改的。如果用的是 Content-Length,那么这个也肯定要改的。

此外,为了避免server端收不到ack的确认信息,在LOCAL_OUT里重构了ack,也就是将原有的ack_seq+=strlen(str),此处在代码中已经转了字节序,已经没有问题。

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


浏览器其实管不了那么底层的 next seq,这个是 TCP 协议栈维护的。至于你说的下一个包,是不是仍然是在同一个 TCP 连接上。如果是的话,你直线扩展了长度之后,要一直负责维护 seq 的处理。
   

论坛徽章:
0
35 [报告]
发表于 2014-10-08 15:35 |只看该作者
回复 26# Godbach
如果HTTP响应大于1500  被分片了  该怎么处理呢?


   

论坛徽章:
0
36 [报告]
发表于 2014-10-12 18:09 |只看该作者
我也是一个学生,最近也是做这个东西,也是要修改数据包的内容,修改网页上的数据。
我现在可以获取到数据包,但是用printk输出的时候出现一大串\xfffffffe\xffffffacs3。
我不知道这是什么,现在我想做的就是字符匹配然后替换。
希望楼主和版主给予提示。如果可以的话,楼主能不能把当时项目的一部分代码贴一下。感恩不尽

论坛徽章:
0
37 [报告]
发表于 2015-05-09 14:18 |只看该作者
楼主你好,我也在做跟你一样的事情,不知道数据包中的网页代码你是这么找到的,能提供下你的代码么?谢谢了,我邮箱:1101923161@qq.com 谢谢了!!
royzjh 该用户已被删除
38 [报告]
发表于 2015-09-09 17:06 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP