【问题标题】:send a message to a remote rsyslog in c++在 C++ 中向远程 rsyslog 发送消息
【发布时间】:2013-06-13 00:31:40
【问题描述】:

有没有办法用 C++ 代码向远程系统日志发送消息?

相当于linux命令中的这一行:

nc -w0 -u 192.168.1.1 514 <<< "logging from remote"

这段代码应该用套接字做一些事情,但它不起作用。

int main(int argc, char *argv[])
{
int listenfd = 0, connfd = 0,n;
struct sockaddr_in serv_addr;
    struct hostent *server;


char sendBuff[1025];
sprintf(sendBuff,"bla bla");

time_t ticks; 

listenfd = socket(AF_INET, SOCK_DGRAM , 0);
memset(&serv_addr, '0', sizeof(serv_addr));
memset(sendBuff, '0', sizeof(sendBuff)); 

serv_addr.sin_family = AF_INET;
server = gethostbyname("192.168.1.108");
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);

//serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(514); 

    if ((n=connect(connfd,(const sockaddr*)&serv_addr,sizeof(serv_addr))) < 0){
            printf(" Connection to has failed Server ");
    }


bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 

listen(listenfd, 10); 

while(1)
{
    connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); 

    write(connfd, sendBuff, strlen(sendBuff)); 

    close(connfd);
    sleep(60);
}

}

【问题讨论】:

  • 作为临时措施,您可以使用 `system(nc -w0 -u 192.168.1.1 514 stackoverflow.com/questions/478898/…
  • 是的,我知道,但我不想在我的源代码中使用 netcat。
  • 这就是为什么我提到它是暂时的。

标签: c++ linux rsyslog


【解决方案1】:

在包括 Linux 在内的多个 Unix 上,您可以简单地使用客户端命令 http://linux.die.net/man/3/syslog 并安装当前的 syslog 服务器,例如 syslog-ng。该服务器不仅可以根据您的规则过滤消息,还可以将它们发送到任何远程系统日志。

如果您使用的是 Windows,恐怕您必须实现自己的 syslog 协议。幸运的是,它并没有那么难,而且或多或少是明确的。

【讨论】:

    【解决方案2】:

    nc -u 只是通过 UDP 套接字发送数据。它没有什么特别之处,也没有要遵循的特定协议:它只是原始数据。您可以简单地通过 C++ 中的 UDP 套接字发送消息(参见 socketAF_INET, SOCK_DGRAM 参数和其他相关函数)。

    但这意味着您会错过很多 syslog 的功能,例如设施和优先级。

    @Moose 是对的:syslog API 更符合您的需求,因为它更加灵活(如果您想更改行为,无需修改程序,您只需重新配置系统日志守护进程)。

    【讨论】:

    • 什么不起作用?通过 UDP 发送数据还是使用原生 syslog API?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多