免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1707 | 回复: 3
打印 上一主题 下一主题

[网络子系统] netfilter和网络数据传输问题 [复制链接]

论坛徽章:
1
卯兔
日期:2014-05-29 10:21:33
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-25 14:01 |只看该作者 |倒序浏览
交代下背景:

   测试程序: 注册hook函数,在hook函数中修改应用层数据即:把skb_buff中data的数据中ip+tcp+app格式中的app的数据某些为数据修改:
   伪代码:
     testhook(skb_buf,.......)//注册的hook函数
     {
          struct tcphdr *tcph;
          struct iphdr   *iph;
           iph = (struct iphdr *)(skb_buf->data);
           tcph =(struct tcphdr *)(stk_buf->data+(iph->ihl)*4);   
          skb_buf->data[(iph->ihl)*4+(tcph->doff)*4 +10] = 'a';
          skb_buf->data[(iph->ihl)*4+(tcph->doff)*4 +11] = 'b';
          skb_buf->data[(iph->ihl)*4+(tcph->doff)*4 +12] = 'c';

     ........
     }
  把应用层数据的第10,11,12字节修改成a,b,c。
  

  我现在得到的结果是这样的:
   如果客户端向服务器发送的数据小于200(大概大小没有具体算),那么服务器得到的数据就是修改之后的数据,即数据的10 11 12字节被修改成a b c。
    但是,如果客户端向服务器发送的数据比较大,那么,服务器端接收到的数据就是客户端发送的原始数据,也就是说,数据的10 11 12字节并没有被修改。这里hook函数也是被执行过的。


谁知道这是什么原因啊?

从这里看好像是服务器最后接收到的数据并不是skb_buf这里面的数据,比较像是除了sbk_buff之外,还有另外的一个数据缓存,最后发给服务器的应该是另外的一份缓存数据。


这里小弟有点晕了。  麻烦明白的大神们给小弟指点一下。
谢谢!




   

论坛徽章:
0
2 [报告]
发表于 2015-06-02 17:19 |只看该作者
你好 请问解决了吗

论坛徽章:
0
3 [报告]
发表于 2015-06-23 10:21 |只看该作者
发送的数据比较大时候, data 可能会以fragment 存储, 这样的话, 这样的话data 取数,    list  = skb_shinfo(skb)->frag_list,  list->data  取应用层数据.

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:13:29
4 [报告]
发表于 2015-06-24 08:47 |只看该作者
或者可以在服务器端接收到skb的时候,调用skb_linearize(skb),把skb线性化
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP