Linux

為 syslog RFC5424 生成偽造的舊日誌消息,例如六個月前(偽造的時間戳)

  • July 9, 2022

再會;

我需要測試我的日誌管理堆棧的數據庫查詢性能,為此,我需要生成大量似乎已有六個月的日誌消息並將它們發送到 rsyslogd。

這甚至可能嗎?如果是,請告訴我如何。

如果這個問題有任何問題,請提前道歉,我是新手。

我非常感謝您能提供的任何幫助。

批量數據庫載入

一種方法是將記錄批量載入到日誌系統數據庫中。這可能更容易生成自定義 syslog 記錄並希望保留發送者的時間戳,而不是 syslog 守護程序發明的時間戳。此外,數據庫批量載入應該比發送和解析大量系統日誌消息更有效。

缺點:可能無法直接訪問數據庫,錯誤的上傳可能會失去或破壞現有記錄等。

API 上傳

日誌系統可能有一個 API。這可能比直接上傳數據庫效率低,但確實避免了刪除整個數據庫的風險。請查閱日誌系統的文件以了解如何使用它(如果存在)。

本機系統日誌發送

否則

$$ RFC 3164 $$在其原生棲息地觀察系統日誌協議;可能有現成的程式碼可用,儘管此類程式碼可能不提供偽造時間戳的能力,具體取決於實現(既不logger(1)提供syslog(3)明顯的方式來偽造時間戳,Net::SyslogPerl 模組等也不提供)。另一方面,使用自定義時間戳偽造消息並不難:

#include <sys/socket.h>
#include <sys/types.h>

#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define SYSLOGMAX 1024

char buf[SYSLOGMAX];
struct addrinfo hints;

int mkcon(const char *host, const char *serv, const struct addrinfo *hints);

int
main(void)
{
   hints.ai_socktype = SOCK_DGRAM;
   int server        = mkcon("192.168.99.101", "syslog", &hints);

   for (size_t i = 0; i < 4; i++) {
       // this is the older [RFC 3164] form, which is simpler
       sprintf(buf, "<%d>Jan 11 12:13:14 host program[123]: blah%lu",
               (21 << 3) | 4, i);

       send(server, buf, SYSLOGMAX, 0);
       // network admins or logging services might get unhappy
       // if the packets or log messages show up too quick
       usleep(100000);
   }

   return 0;
}

int
mkcon(const char *host, const char *serv, const struct addrinfo *hints)
{
   struct addrinfo *peer;

   // TODO needs better error handling and better use of the
   // peer struct, etc
   int ret = getaddrinfo(host, serv, hints, &peer);
   if (ret != 0) abort();

   int server =
     socket(peer->ai_family, peer->ai_socktype, peer->ai_protocol);
   if (server == -1) abort();

   if (connect(server, peer->ai_addr, peer->ai_addrlen) == -1) abort();
   freeaddrinfo(peer);

   return server;
}

您可能能夠指出這一點,/dev/log這可能比通過網路發送數據包更有效且損耗更少。現代 syslog 守護程序也可能支持更可靠的 TCP 流。檢查文件或相關 RFC 以了解其工作原理。

引用自:https://unix.stackexchange.com/questions/709139