iptable修改的Netlink通知未收到应用程序

时间:2018-11-21 05:52:44

标签: c linux linux-kernel iptables netlink

我编写了一个程序来通过netlink套接字监听iptables的修改,为此,我使用了NETLINK_AUDIT系列,当我执行程序并修改iptables规则时,程序没有收到来自内核的任何消息,它将仅处于阻止模式。您能帮我找到该程序中的问题是什么,或者我需要做些什么来接收iptables通知。

#include "libaudit.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
        int rc;
        struct audit_message rep;
        int fd;
        struct sockaddr_nl sa;

        memset(&sa, 0, sizeof(sa));
        sa.nl_family = AF_NETLINK;
        sa.nl_groups = 0; 

        fd = audit_open();

        bind(fd, (struct sockaddr *) &sa, sizeof(sa));

        rc = audit_get_reply(fd, &rep, GET_REPLY_BLOCKING, 0);
        if(rc < 0)
        {
                printf("Error");
        }
        else
        {       
                printf("msg received %d \n",rep.nlh.nlmsg_type );
                break;
        }       


        audit_close(fd);

        return 0;
}

1 个答案:

答案 0 :(得分:0)

尝试此标志

https://github.com/linux-audit/audit-userspace/blob/master/lib/libaudit.c#L383

来自libaudit源代码

rc = audit_get_reply(fd, &rep, GET_REPLY_NONBLOCKING,0);