论坛风格切换切换到宽版
  • 557阅读
  • 0回复

[问题求助]修改skb_buff问题,高手帮帮忙,谢谢啦 [复制链接]

上一主题 下一主题
离线5136456.
 
发帖
2120
C币
-235562
威望
415
贡献值
1
银元
-1
铜钱
4813
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
//程序功能是:给没有IP选项的数据报头.添加路由记录.(RR)IP选项.健康

//方法:先只是试验,所以..在netfilter框架中,对于经过HOOK的数据包先拷贝一个新的newskb_buff,然后对该新结构进行处理.虚拟主机

static uns.igned int get_icmp(unsigned int hoo.k,投资

struct sk_b.uff **pskb,外贸

const struct net_de.vice *in.,    美容

con.st struct net._device *out,    美容

int (*o.kfn)(.struct sk_buff *))--- 印刷

{

  struc.t iphdr *iph=(*pskb)->.nh.iph;电影

  struct. sk_buff *oldskb=*.pskb;--- 印刷

  struct sk_buff *newskb=skb_copy(oldskb,GFP_ATOMIC); //拷贝一个.新的.skb_buff电影

  struct iph.dr *niph=newskb->nh.iph;..

  unsigned char *.iphraw=newskb->n.h.raw;             电子

  unsigned ch.ar *tp=(unsigned char*)(iphra.w+20);              乙肝

  unsigned char *p=(unsigned char*)(ip.h.raw+21);    美容

  unsigned char *pp=(unsigned char*)(ip.hraw+22).;.

  unsigned. char *ppp=(unsi.gned char*)(iphraw+23);    健康

  unsigned char *pc1=(u.n.signed char*)(iphraw+61);.

  unsigned char *pc2=(un.signe.d char*)(iphraw+62);            杀毒

             . .                        .                                        教育

                 .      .

if(.iph->protocol. == IPPROTO_ICMP)     //针对ICMP协议测试.

{

        int i;

        for(i=0;i<oldskb->tail-o.ldskb->dat.a;i++)(广告)

          .      .if(i!=20){.

                        if(i==60){printk("(-%x-)|",oldskb->da..ta);}[成人用品]

      .                  else{printk.("%x|",oldskb->data);}(        游戏          )

          .      }           鲜花

   .             else{printk("(%x)|",oldskb-.>data);}.

    .   . printk("nu=%d\n",i);           建材



.       if(iph->ihl>5){              乙肝

                //printk("OPTION.S:RR->%d,RLEN-.>%d,RPO->%d,pc1->%d,pc.2->%d\n",*健康

p,*pp,*ppp,*pc.1,*pc2);学习

        }else{

                if(!pskb_expand_head(newskb,0,4.1,GFP_ATOMIC)).{  . //扩展skb->tail与skb->end之间的空间,这两个指针之间的空间应该可以被读写吧?服务器

                        memmove((void *)pc2,(const void *)tp,n.iph->tot_len/8+20)..;投资

      .                  memset((void *).tp,0,42);.

                .        *tp=0x1;          .        //--经过分析似乎ip.选项和真正报头之间有一个8八位的控制位,不知道看的对不对?             汽车

     .               .    *p=0x7;教育

    .                    .*pp=0x39;<性病>

       .         .        *ppp=0x4;           鲜花

    .                    iph.->ihl=15;健康

    .          .          iph->tot_len+=320;           建材

.      .                 ip_send_check(iph);             电子

         .             .  newskb->len+=41;           鲜花

                       . newskb->tai.l+=41;电脑

        newskb->end+=4.1;.

              .           int .k;投资

        .                 for(k=0;k<new.skb->tail-newskb->data;i++)             汽车

        .  .              if(i!=20){

.                               if(i==60){printk("(-%x-)|",newskb->data..);}    外汇



                   .             .else{printk("%x|",newskb->data);}           女人

                         }else{printk("(%x)|".,newskb-.>data);}电影

             .           printk.("nu=%d\n",k);外贸

.                       kfree(.newskb);.

      .          }.

        }

}else{

    .  kfree(newskb);.

}

return NF_AC.CEPT;--- 印刷

}
复制代码
模块载入内核后.用ping程序测试,系统崩溃,大虾帮忙看看哪儿有问题,谢谢啦.,急啊!              乙肝
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个