From 56e19ba7f98f7b036bcfdca333a1039d31851d67 Mon Sep 17 00:00:00 2001 From: Hacklab1-hh <114827672+Hacklab1-hh@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:58:17 +0100 Subject: [PATCH] initiales checkin des proxy scriptes --- syslog_rewriter.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 syslog_rewriter.py diff --git a/syslog_rewriter.py b/syslog_rewriter.py new file mode 100644 index 0000000..6d980e9 --- /dev/null +++ b/syslog_rewriter.py @@ -0,0 +1,45 @@ +import socket +import json +import re + +# KONFIGURATION +LISTEN_IP = "0.0.0.0" +LISTEN_PORT = 1514 +SYNO_IP = "192.168.x.x" # Deine Synology IP +SYNO_PORT = 514 + +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +sock.bind((LISTEN_IP, LISTEN_PORT)) + +out_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + +print(f"Relay aktiv: UDP {LISTEN_PORT} -> {SYNO_IP}:{SYNO_PORT}") + +while True: + data, addr = sock.recvfrom(4096) + try: + # Extrahiere Syslog Header und Nachricht + msg = data.decode('utf-8', errors='ignore') + # Suche den JSON Teil (alles ab der ersten geschweiften Klammer) + json_match = re.search(r'(\{.*\})', msg) + + if json_match: + header = msg[:json_match.start()] + payload = json.loads(json_match.group(1)) + + # Flachklopfen: Level und Message extrahieren + level = payload.get("level", "info").upper() + content = payload.get("msg", "") + # Alle anderen Felder als Key=Value anhängen + extras = " ".join([f"{k}={v}" for k, v in payload.items() if k not in ["level", "msg", "ts"]]) + + # Baue neue einzeilige Nachricht + clean_msg = f"{header} [{level}] {content} {extras}".replace('\n', ' ').replace('\r', '') + out_sock.sendto(clean_msg.encode('utf-8'), (SYNO_IP, SYNO_PORT)) + else: + # Kein JSON? Einfach Zeilenumbrüche entfernen und durchreichen + out_sock.sendto(msg.replace('\n', ' ').encode('utf-8'), (SYNO_IP, SYNO_PORT)) + + except Exception as e: + # Im Fehlerfall original senden (nur ohne Umbrüche) + out_sock.sendto(data.replace(b'\n', b' '), (SYNO_IP, SYNO_PORT))