- 论坛徽章:
- 0
|
问题解决了,所以还是存在效率上面的问题
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/netfilter.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <linux/netdevice.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <net/tcp.h>
#include <linux/netfilter_ipv4.h>
unsigned int
winnuke_local_in_func (unsigned int hooknum,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn) (struct sk_buff *))
{
struct iphdr *iph ;
struct tcphdr *tcph ;
struct tcphdr _otcph ;
iph = ip_hdr (skb);
switch (iph->protocol)
{
case IPPROTO_TCP:
printk ("It's a TCP PACKET\n");
tcph = skb_header_pointer(skb,ip_hdrlen(skb),sizeof(_otcph),&_otcph);
break;
case IPPROTO_ICMP:
return NF_ACCEPT;
break;
case IPPROTO_UDP:
return NF_ACCEPT;
break;
default:
return NF_ACCEPT;
}
printk ("s_port=%d,d_port=%d!",(int)tcph->source,(int)tcph->dest);
printk ("urg=%d",(int)tcph->urg);
return NF_ACCEPT;
}
static struct nf_hook_ops winnuke_ops[] __read_mostly = {
{
.hook = winnuke_local_in_func,
.owner = THIS_MODULE,
.pf = PF_INET,
.hooknum = NF_INET_LOCAL_IN,
.priority = NF_IP_PRI_FIRST,
},
};
static int __init winnuke_init(void)
{
int ret;
printk("ins winnuke module\n");
ret = nf_register_hook (winnuke_ops);
if(ret < 0)
return ret;
return 0;
}
static void __exit winnuke_fini(void)
{
printk("rm winnuke module\n");
nf_unregister_hook (winnuke_ops);
}
module_init(winnuke_init);
module_exit(winnuke_fini); |
|
|