zoukankan      html  css  js  c++  java
  • Linux Netfilter注册钩子点

    注册钩子点首先要包含响应的头文件,因为这应该已经属于对kernel的编程了。

    1 #include <linux/module.h>
    2 #include <linux/kernel.h>
    3 #include <linux/init.h>
    其次,要定义钩子函数
     1 static unsigned int example(unsigned int hooknum,struct sk_buff* skb,const struct net_device *in,const struct net_device *out,int (*okfn)(struct sk_buff *))
     2 {
     3     //可以定义一些处理
     4     //这里一般要做一个skb非空的判断,可以用if(skb)判断
     5     /*
     6        struct sk_buff* sk = NULL;
     7        sk = skb; 
     8         一些常用的处理函数:
     9         struct iphdr *iph;
    10         iph = ip_hdr(sk);
    11         注:tcp、udp同理。
    12     */
    13 return NF_ACCEPT;
    14 } 
    第三,设置相关信息
    1  struct nf_hook_ops example_ops = {
    2    .list =  {NULL,NULL},
    3    .hook = example,//Hook函数
    4    .pf = PF_INET,//协议
    5    .hooknum = NF_INET_PRE_ROUTING,//钩子点
    6    .priority = NF_IP_PRI_FILTER+2//钩子的优先级,其实代表钩子处理函数的调用次序。
    7  };
    调用注册和注销函数 
     1 nf_register_hook(&example_ops);
     2 nf_unregister_hook(&example_ops); 
     3 可以写入初始化和注销函数里面
     4 static int __init example_init()
     5 {
     6   nf_register_hook(&example_ops);
     7   return 0;
     8 }
     9  static void __exit example_exit()
    10 {
    11   nf_unregister_hook(&example_ops);
    12 }
    关于SKB
    skb是linux内核存储描述数据包的一种结构体
    也是skb双向链表的一个节点结构体。
    1 module_init(example_init);
    2 module_exit(example_exit); 
    3  
    4 MODULE_AUTHOR("*********");
    5 MODULE_VERSION("0.0.1");
    6 MOUDLE_ALIAS("test"); 
    7 MODULE_DESCRIPTION("example") ;
  • 相关阅读:
    CodeForces
    CodeForces
    FZU
    FZU
    UESTC
    测试用例概述
    软件测试流程
    软件测试(二)软件测试过程
    软件测试(一)软件的生命周期(SDLC,Systems Development Life Cycle,SDLC)
    系统测试的策略
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/7866876.html
Copyright © 2011-2022 走看看