+ -
当前位置:首页 → 问答吧 → 用户态封装的IP报文 使用内核钩子函数进行路由转发 如何实现呢?

用户态封装的IP报文 使用内核钩子函数进行路由转发 如何实现呢?

时间:2010-10-25

来源:互联网

用户态封装的IP报文:  BYTE *  p_BufferPacket

point_IP = (IP_HEADER*)p_BufferPacket
数据报文长度(不包括IP头):arg_lengh;

   
unsigned int hook_PocketEncap(unsigned int hooknum,
                              struct sk_buff *skb,
                              const struct net_device *in,
                              const struct net_device *out,
                              int (*okfn)(struct sk_buff *))
{

             struct sk_buff *skb = NULL;      
                   skb =*pskb;

           /* IP头部填充*/
                  memcpy(skb-> network_header, dwSize_IP, point_IP);

           /* Data数据填充*/
                  memcpy(skb-> tail, dwSize, ++point_IP);
         
          return NF_ACCEPT;
   
}

               
int init_module()
{
   
              struct nf_hook_ops nfho;

                /*填充钩子结构体*/
            nfho.hook     =  hook_func;                  /*函数接口*/
           nfho.hooknum  =  NF_INET_PPOST_ROUTING; /*发送*/
            nfho.pf        =  PF_INET;
           nfho.priority    =  NF_IP_PRI_FIRST;         /*优先级*/

               /*注册钩子结构体*/
               nf_register_hook(&nfho);                  
        
               return 0;
    }


我这样写代码可以吗?   过程是这样的:


         需求:从套接字接受一个报文,修目的IP后,想利用LINUX内核 进行IP层转发

         用户态修改过的IP报文  如何才能让内核认识呢?  我这样直接拷贝不行吧?  如何和套接字缓存区  联系上呢?  
            哪位大侠帮忙指点一下吧  如果借助内核转发3层IP报文的话  也就是路由转发  转发到某一个路由器上, 有哪些实现方法?  代码应该怎么写呢。
        万分感谢!!!

作者: xufeng917   发布时间: 2010-10-25

修改报文要考虑的环节比较多。

想利用 Netfilter 的hook 函数,那么就要对 NF 有一定程度的了解。

如果你是要出来进入系统的包,那么数据包是先经过 IP 层,如果是需要转发的包,数据包就不会往上层传输了。 感觉LZ 的一些概念没有搞清楚。

作者: Godbach   发布时间: 2010-10-25