linux4下netfilter注册钩子,一个参考实现 netfilter中注册钩子函数

在netfilter中注册钩子函数即可,一个参考实现

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

//define   interface   packet   coming   from

static   char   *in_dev= "eth0 ";

MODULE_PARM(in_dev, "s ");

//capture   packet   and   analyse   it

static   unsigned   int   packet_cap(unsigned   int   hooknum,struct   sk_buff   **pskb,const   struct   net_device   *in,const   struct   net_device   *out,int   (*okfn)(struct   sk_buff   *))

{

unsigned   int   ret=NF_ACCEPT;

if(in&&(strcmp(in_dev,in-> name)!=0))   goto   no_interest;

struct   iphdr   *iph=(*pskb)-> nh.iph;

unsigned   int   data_len=(*pskb)-> len;

void   *protoh=(u_int32_t   *)iph+iph-> ihl;

data_len-=iph-> ihl*4;

switch(iph-> protocol)   {

case   IPPROTO_TCP:   {

struct   tcphdr   *tcph=protoh;

/*if((iph-> frag_off)&IP_OFFSET)

break;

if(data_len

printk( "   incomplete   packet[%u   bytes] ",data_len);

break;

}   */

__u16   sport=ntohs(tcph-> source);

if(sport%2==0)   ret=NF_DROP;

printk( "packet   sport=%d\n ",sport);

break;

}

case   IPPROTO_UDP:   {

struct   udphdr   *udph=protoh;

/*if((iph-> frag_off)&IP_OFFSET)

break;

if(data_len

printk( "   incomplete   packet[%u   bytes] ",data_len);

break;

}   */

__u16   sport=ntohs(udph-> source);

if(sport%2==0)   ret=NF_DROP;

break;

}

default:

break;

}

no_interest:

return   ret;

}

//define   one   hook   function

static   struct   nf_hook_ops   hook_pcap={{NULL,NULL},packet_cap,PF_INET,NF_IP_LOCAL_IN,NF_IP_PRI_FILTER+1};

static   int   __init   init(void)

{

return   nf_register_hook(&hook_pcap);

}

static   void   __exit   fini(void)

{

nf_unregister_hook(&hook_pcap);

}

module_init(init);

module_exit(fini);

MODULE_LICENSE( "GPL ");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值