RAW сокет и NF_INET_POST_ROUTING - PullRequest
       60

RAW сокет и NF_INET_POST_ROUTING

1 голос
/ 04 ноября 2019

Есть ли способ узнать в NF_INET_POST_ROUTING, генерируется ли пакет через сокет RAW:

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

Любая помощь очень ценится!

1 Ответ

3 голосов
/ 05 ноября 2019

Да, вы можете использовать поле type, равное struct socket.

Fe:

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 крючках.

...