NFQ演示:为什么我所有的netfilter示例都不起作用?

NFQ演示:为什么我所有的netfilter示例都不起作用?,netfilter,Netfilter,在Suricata中,它使用NFQ来实现其IPS(入侵保护服务)功能,但在我的情况下,NFQ并没有按预期工作(我的内核是3.11),我编写了一个简化的演示来测试NFQ功能: #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> /* timeval */ #include <arpa/inet.h> #inc

在Suricata中,它使用NFQ来实现其IPS(入侵保护服务)功能,但在我的情况下,NFQ并没有按预期工作(我的内核是3.11),我编写了一个简化的演示来测试NFQ功能:

#include <stdio.h> 
#include <sys/types.h>
#include <sys/socket.h> 
#include <sys/time.h> /* timeval */ 
#include <arpa/inet.h> 
#include <linux/netfilter.h>
#include <libnetfilter_queue/libnetfilter_queue.h>

#define NFQ_NUM 4
#define QUEUE_MAXLEN 4096

static int nfq_cb(struct nfq_q_handle *qh, struct nfgenmsg *msg, struct nfq_data *nfa, void *data) {
    return 0;
}

int nfq_demo(void) {
    struct nfq_handle *h = nfq_open();
    if (!h) {
        return -1;
    }

    /* here, failed on nfq_unbind_pf */
    if (nfq_unbind_pf(h, AF_INET) < 0) {
        printf("nfq_unbind_pf failed\n");
        return -1;
    }

    if (nfq_unbind_pf(h, AF_INET6) < 0) {
        printf("nfq_unbind_pf failed\n");
        return -1;
    }

    if (nfq_bind_pf(h, AF_INET) < 0) {
        printf("nfq_bind_pf failed\n");
        return -1;
    }

    if (nfq_bind_pf(h, AF_INET6) < 0) {
        printf("nfq_bind_pf failed\n");
        return -1;
    }

    /* if comment above bind/unbind, the create fail too */
    struct nfq_q_handle *qh = nfq_create_queue(h, NFQ_NUM, nfq_cb, NULL);
    if (!qh) {
        printf("nfq_create_queue failed\n");
        return -1;
    }

    /* ... */
}

int main() {
    nfq_demo();
    return 0;
}
我检查了
/proc/net/netfilter/
,除了
nf\u日志之外什么都没有:

0 NONE ()
1 NONE ()
2 NONE ()
3 NONE ()
4 NONE ()
5 NONE ()
6 NONE ()
7 NONE ()
8 NONE ()
9 NONE ()
10 NONE ()
11 NONE ()
12 NONE ()
我的NFQ演示有什么问题


第二个问题是,当我调试Suricata时,所有的NFQ设置都工作得很好,当
curl google.com
时,会有一个HTTP请求发送到google,但是与NFQ相关的套接字上的调用
recv
总是返回-1,并且意味着没有收到任何内容(以及
curl
超时),为什么会发生这种情况?

获得第一个答案,以root用户身份运行程序,所有NFQ API均按预期工作。

获得第一个答案,以root用户身份运行程序,所有NFQ API均按预期工作。

获得第一个答案,以root用户身份运行程序,所有NFQ API均按预期工作。

获得第一个答案,以root用户身份运行程序,所有NFQAPI都按预期工作

0 NONE ()
1 NONE ()
2 NONE ()
3 NONE ()
4 NONE ()
5 NONE ()
6 NONE ()
7 NONE ()
8 NONE ()
9 NONE ()
10 NONE ()
11 NONE ()
12 NONE ()