RAW套接字和NF_INET_POST_ROUTING

NF_INET_POST_ROUTING中是否有办法知道数据包是否是通过RAW套接字生成的:

#include <sys/socket.h>
#include <netinet/in.h>
raw_socket = socket(AF_INET,SOCK_RAW,int protocol); 

非常感谢您的帮助!

woshiriluobingcheng1 回答:RAW套接字和NF_INET_POST_ROUTING

是的,您可以使用struct socket的{​​{3}}字段。

F.e。:

static unsigned int nfh_handler(...) {
    struct iphdr *ip_header = ip_hdr(skb);
    if(ip_header->protocol == IPPROTO_TCP) {
        struct tcphdr *tcp_header = tcp_hdr(skb);
        if(skb->sk && skb->sk->sk_socket &&
            skb->sk->sk_socket->type == SOCK_RAW)
            printk(KERN_INFO "SOCK_RAW -> src port:%d,dst port:%d\n",ntohs(tcp_header->source),ntohs(tcp_header->dest));
    }
    // ...    
    // return
}

请记住,转发的数据包也可能出现在NF_INET_POST_ROUTING挂钩中。

本文链接:https://www.f2er.com/3169298.html

大家都在问