免费注册 查看新帖 |

Chinaunix

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

大神牛人救救:LOCAL_IN截获数据重新构造数据包的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-15 11:42 |只看该作者 |倒序浏览
本帖最后由 iPowerX 于 2012-03-15 16:10 编辑

程序大致是这样的,通过钩子节点,在LOCAL_IN和LOCAL_OUT两个节点将IP数据包截获。

IP数据包(含IP头)做为原始数据,构造为新的加密数据(新的IP包头(目的地址肯能更换+协议变换)+原始数据的加密数据)

在LOCAL_IN节点截获数据后,如果为加密数据的话
  1.    
  2.     if(skb_shared(skb))
  3.     {
  4.         struct sk_buff* skb2=skb_clone(skb, GFP_ATOMIC);
  5.         if(!skb2)
  6.         {
  7.             ERR("skb clone failed\n");
  8.             goto FAIL1;
  9.         }
  10.                 if (skb->sk) skb_set_owner_w(skb2, skb->sk);
  11.                 kfree_skb(skb);
  12.         skb=skb2;
  13.     }

  14.     if(skb_is_nonlinear(skb)||skb_cloned(skb))
  15.     {
  16.         if(__skb_linearize(skb)<0)
  17.         {
  18.             ERR("psck pull tail failed\n");
  19.             goto FAIL1;
  20.         }
  21.     }
  22.     [将SKB扔进待加密数据队列]
  23.     return NF_STOLEN;
  24. FAIL1:
  25.     kfree_skb(skb);
  26.     return NF_STOLEN;
复制代码
有一个写加密卡线程,当待加密数据队列不为空时,将数据写入加密卡。
有一个线程一直读加密卡,当读取到数据时,判断如果是进入本机的,则调用如下
  1. int income(struct sk_buff* skb)
  2. {
  3.     struct iphdr* ip=ip_hdr(skb);
  4.     int ipLen;

  5.     ipLen=ntohs(ip->tot_len);

  6.     if( ip->version != 4)
  7.     {
  8.         MSG("ip version:%d len:%d\n",ip->version,ipLen);
  9.              goto drop;
  10.     }

  11.     nf_reset(skb);

  12.     if(skb->dst)dst_release(skb->dst);
  13.     skb->dst = 0UL;

  14.     netif_rx_ni(skb);
  15.     return 0;
  16. drop:
  17.     kfree_skb(skb);
  18.     return NET_RX_DROP;
  19. }
复制代码
备注:关于GSO/TSO的处理是通过注册消息通知链regeister_netdevice_notifier,
将UP的网卡dev->features&=~NETIF_F_GSO_MASK|NETIF_F_GSO

我想请问下,我有没有处理不妥当的地方,因为程序在运行几天后,出现了系统崩溃。
位置出现在income->netif_rx_ni->ip_local_deliver->skb_chksm->tcp_v4_do_rcv->tcp_rcv_established->tcp_ack

论坛徽章:
0
2 [报告]
发表于 2012-03-15 12:05 |只看该作者
没有高手能帮着分析一下吗?跪求高手指点啊

论坛徽章:
0
3 [报告]
发表于 2012-03-15 23:33 |只看该作者
这个点儿了 依然没人理睬

能帮我反推下 我的数据包在tcp_ack函数遇到什么问题了吗

给点提示提醒吧
牛人 你们的一点点帮助可能对我很重要

论坛徽章:
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
4 [报告]
发表于 2012-03-16 08:10 |只看该作者
回复 1# iPowerX
你现在的提供的信息,只能确定能否运行。现在的情况是可以运行,只是运行一段时间后出现bug,那么你需要给出更多的bug信息(比如panic信息),这样才能帮你分析问题啊。

   

论坛徽章:
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
5 [报告]
发表于 2012-03-16 08:16 |只看该作者
回复 1# iPowerX
备注:关于GSO/TSO的处理是通过注册消息通知链regeister_netdevice_notifier,
将UP的网卡dev->features&=~NETIF_F_GSO_MASK|NETIF_F_GSO

这个用ethtool就可以啊,没必要非得自己写代码实现。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP