|
|
|
|
| 紧急!)请哪位大侠帮忙看一下这个数据包重定向程序有什么问题?(代码很短) |
|
|
|
[Original]
[Print]
[Top]
|
为了在netfilter的NF_IP_PRE_ROUTING上对数据包重定向,我设计了一个模块,此模块程序修改从客户机发送过来的数据包的目的地址,但是我在作网关的机器上装载了该模块后,它的客户机不能重定向到目的地址,请哪位大侠帮忙看下这段程序有何问题?
#define __KERNEL__
#define MODULE
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/netdevice.h>
#include<linux/netfilter.h>
#include<linux/netfilter_ipv4.h>
#include<linux/inet.h >
#include<linux/in.h>
#include <linux/module.h>
#include <linux/skbuff.h>
#include <net/checksum.h>
static struct nf_hook_ops nfho;
mynat_cheat_check(__u32 oldvalinv, __u32 newval, __u16 oldcheck) /* ip校验和 */
{
__u32 diffs[] = { oldvalinv, newval };
return csum_fold(csum_partial((char *)diffs, sizeof(diffs),
oldcheck^0xFFFF));
}
static unsigned int /*我的数据包处理函数*/
my_hook(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 * sb = *skb ;
__u32 newip = in_aton("192.168.10.19”)
sb->nh.iph->check=mynat_cheat_check(~sb->nh.iph->daddr, newip, sb->nh.iph ->check);
sb->nh.iph->daddr = newip;
return NF_ACCEPT;
}
int init_module(void)
{
nfho.hook=my_hook;
nfho.hooknum=NF_IP_PRE_ROUTING;
nfho.pf= PF_INET;
nfho.priority=NF_IP_PRI_FIRST;
return nf_register_hook(&nfho);
return 0;
}
void cleanup_module(void)
{
nf_unregister_hook(&nfho);
}
|
|
|
[Original]
[Print]
[Top]
|
|
|