- 论坛徽章:
- 0
|
用户态封装的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报文的话 也就是路由转发 转发到某一个路由器上, 有哪些实现方法? 代码应该怎么写呢。
万分感谢!!! |
|