我编写了一个程序来通过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;
}
答案 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);