Уведомление Netlink для iptable модификации не получено к приложению - PullRequest
0 голосов
/ 21 ноября 2018

Я написал программу для прослушивания модификации iptables через сокеты netlink, для этого я использовал семейство 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 голосов
/ 21 ноября 2018

попробуйте этот флаг

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

из исходного кода libaudit

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