[英]auditd real-time events processing C/C++
我正在尝试用C / C ++编写一个过程来实时分析审计事件。
目前,我正在使用af_unix插件从Unix套接字读取审计事件(默认情况下为/var/run/audisp_events
)。
我尝试使用select()
, recv()
来使用套接字中的事件,如下所示:
select(FD_SETSIZE, &set, NULL, NULL, NULL);
recv(sockfd, message, size, MSG_DONTWAIT);
然后发送到auparse回调来解析缓冲区similer到这个例子 :
auparse_feed(au, buf, (size_t)len);
auparse_flush_feed(au);
这里的问题是审计事件可以是多记录事件(如SYSCALL),并且使用recv()
只消耗一些记录而不是所有记录,因此在解析回调中,我没有所有信息。
然后我尝试使用getline()
使用一条记录,但我仍然无法判断记录是一个记录事件还是多个记录事件。
在这里阅读审计文档后,我发现: EOE Triggered to record the end of a multi-record event.
我可以用它来知道何时停止消费(因为getline()
是一个阻塞操作)但EOE
事件只存在于多记录事件中。
我的问题是:
af_unix
插件是实时消费审计事件的最佳方式吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.