linux — отправить сообщение удаленному rsyslog в Stack Overflow

Есть ли способ отправить сообщение на удаленный системный журнал в коде 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);
}

}

2

Решение

nc -u просто отправляет данные через UDP-сокеты. В этом нет ничего особенного, нет конкретного протокола, которому нужно следовать: это просто необработанные данные. Вы можете просто отправлять свои сообщения через сокеты UDP в C ++ (см. socket с AF_INET, SOCK_DGRAM параметры и другие связанные функции).

Но это означает, что вам не хватает многих функций системного журнала, таких как объекты и приоритеты.

@ Лос прав: syslog API больше соответствует вашим потребностям, так как он гораздо более гибкий (нет необходимости изменять вашу программу, если вы хотите изменить поведение, вам нужно только перенастроить демон syslog).

1

Другие решения

В нескольких Unix, включая Linux, вы можете просто использовать команду client http://linux.die.net/man/3/syslog и установите текущий сервер системного журнала, такой как syslog-ng. Этот сервер сможет не только фильтровать сообщения в соответствии с вашими правилами, но и отправлять их в любой удаленный системный журнал.

Если вы работаете в Windows, я боюсь, что вам нужно реализовать собственный протокол системного журнала. К счастью, это не так сложно и более или менее определено.

4

По вопросам рекламы [email protected]