• netfilter_queue


    1、nfq_set_verdict

    int nfq_set_verdict(struct nfq_q_handle *qh, uint32_t id,
    		    uint32_t verdict, uint32_t data_len,
    		    const unsigned char *buf)
    
    • 函数功能
      对一个数据包发表裁决。
    • 函数参数
      qh:通过调用nfq_create_queue()获得的Netfilter队列句柄。
      id:由netfilter分配给数据包的ID
      verdict:决定返回到netfilter
      data_len: buf缓冲区的字节数
      buf:包含数据包数据的缓冲区
    • 函数返回值
      出错返回-1,否则返回值大于等于0。

    向netfilter通知给定数据包的用户空间判定。 每个排队的数据包_must_都有一个由用户空间指定的结论,可以通过调用此函数,nfq_set_verdict2()函数或这些函数的_batch版本来指定。

    2、nfq_get_payload

    int nfq_get_payload(struct nfq_data *nfad, unsigned char **data)
    
    • 函数功能
      获取payload(有效载荷)
    • 函数参数:
      nfad:Netlink数据包数据句柄传递给回调函数
      data:指向有效负载的指针的指针
    • 函数返回值:
      出错返回-1,否则大于0。

    检索队列中数据包的有效负载。 此函数检索的实际数据量和类型取决于nfq_set_mode() 函数设置的模式。

    3、nfq_get_indev

    uint32_t nfq_get_indev(struct nfq_data *nfad)
    
    • 函数功能:获取接收数据包的接口
    • 函数参数:Netlink数据包数据句柄传递给回调函数
    • 函数返回值:
      排队的数据包通过其接收的设备的索引。 如果返回的索引为0,则说明该数据包是在本地生成的,或者输入接口未知(即POSTROUTING?)。

    所有nfq_get_dev()函数,如果未设置,则返回0,因为linux 仅允许ifindex> = 1。

    4、nfqnl_msg_packet_hdr

    struct nfqnl_msg_packet_hdr *nfq_get_msg_packet_hdr(struct nfq_data *nfad)
    
    • 函数功能:返回包装数据包的元头
    • 函数参数:
      nfad:Netlink数据包数据句柄传递给回调函数
    • 函数返回值:
      给定nfq_data参数的netfilter队列netlink数据包头。 通常,nfq_data值作为第三个参数传递给通过调用nfq_create_queue()设置的回调函数。

    5、iphdr

    struct iphdr {
    #if defined(__LITTLE_ENDIAN_BITFIELD)
        __u8    ihl:4,
                version:4;
    #elif defined (__BIG_ENDIAN_BITFIELD)
        __u8    version:4,
                ihl:4;
    #else
    #error "Please fix "
    #endif
        __u8    tos;
        __be16 -tot_len;
        __be16 -id;
        __be16 -frag_off;
        __u8    ttl;
        __u8    protocol;
        __be16 -check;
        __be32 -saddr;
        __be32 -daddr;
    };
    

    6、udphdr

    struct udphdr {
          __u16   source;
          __u16   dest;
          __u16   len;
          __u16   check;
     };
    

    7、struct ifreq

    struct ifreq 
    {
    #define IFHWADDRLEN    6
        union
        {
            char    ifrn_name[IFNAMSIZ];        /* if name, e.g. "en0" */
        } ifr_ifrn;
        
        union {
            struct    sockaddr ifru_addr;
            struct    sockaddr ifru_dstaddr;
            struct    sockaddr ifru_broadaddr;
            struct    sockaddr ifru_netmask;
            struct  sockaddr ifru_hwaddr;
            short    ifru_flags;
            int    ifru_ivalue;
            int    ifru_mtu;
            struct  ifmap ifru_map;
            char    ifru_slave[IFNAMSIZ];    /* Just fits the size */
            char    ifru_newname[IFNAMSIZ];
            void __user *    ifru_data;
            struct    if_settings ifru_settings;
        } ifr_ifru;
    };
    

    8、ifconf

    struct ifconf 
    {
        int    ifc_len;            /* size of buffer    */
        union 
        {
            char __user *ifcu_buf;
            struct ifreq __user *ifcu_req;
        } ifc_ifcu;
    };
    
  • 相关阅读:
    flask基础 MUI
    flask基础 MongoDB
    falsk 基础 语音识别与语音合成()
    flask基础 websocket ()
    flask基础四 请求上下文()
    flask基础三
    学习整理
    Elasticsearch
    课程学习:Linux系统管理
    课程学习:程序设计与算法
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764106.html
Copyright © 2020-2023  润新知