在 solaris 11.4 (UNIX) 中拦截源审计记录

问题描述 投票:0回答:1

我试图了解来自内核环形缓冲区的日志是如何被 solaris 操作系统中的 audit_binfile 和 audit_syslog 等插件捕获和修改的。我在网上看到有一个套接字通过它发送日志消息 -> /dev/log ,所以我尝试使用以下程序访问它:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <syslog.h>

#define SOCK_PATH "/dev/log"

int main(int argc, char *argv[])
{
    struct sockaddr_un addr;
    char buf[4096];
    int fd, n, yes = 1;

    // Create socket
    if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1) {
        perror("socket");
        exit(EXIT_FAILURE);
    }

    // Set SO_REUSEADDR option
    if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }

    // Bind to /dev/log socket
    memset(&addr, 0, sizeof(addr));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path, SOCK_PATH, sizeof(addr.sun_path)-1);
    if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
        perror("bind");
        exit(EXIT_FAILURE);
    }

    // Read from socket and print log messages
    while ((n = recv(fd, buf, sizeof(buf), 0)) > 0) {
        buf[n] = '\0';
        printf("%s", buf);
    }

    // Close socket
    close(fd);

    return 0;
}

当我运行它时,我得到这个错误 -> bind: Address already in use 即使我已经使用了 SO_REUSEADDR

请让我知道我出了什么问题,或者我对 /dev/log 的整个想法是错误的吗?非常感谢有关此的任何见解。提前致谢!

c sockets unix plugins solaris
1个回答
0
投票

/dev/log 用于系统日志,而不是审计消息。

© www.soinside.com 2019 - 2024. All rights reserved.