package vs; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.nio.charset.StandardCharsets; public class SyslogServer { private static final int SYSLOG_PORT = 514; private static final int DISCOVERY_PORT = 8888; private static final int MAX_MESSAGE_LENGTH = 1024; public static void main(String[] args) { System.out.println("=== Syslog Server Management ==="); // Startet den Syslog-Server new Thread(() -> runSyslogServer()).start(); // Startet den Discovery-Server new Thread(() -> runDiscoveryServer()).start(); } private static void runSyslogServer() { try (DatagramSocket socket = new DatagramSocket(SYSLOG_PORT)) { byte[] buffer = new byte[2048]; System.out.println("[INFO] Syslog-Dienst aktiv auf Port " + SYSLOG_PORT); while (true) { DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); int length = packet.getLength(); if (length > MAX_MESSAGE_LENGTH) { System.err.println("[WARN] Nachricht von " + packet.getAddress() + " zu lang. Ignoriert."); continue; } String raw = new String(packet.getData(), 0, length, StandardCharsets.UTF_8); String clean = raw.replace("\uFEFF", "").replace("", ""); // Trennung von Metadaten und Inhalt int splitIndex = clean.lastIndexOf("]") + 1; String metadata = "Unbekannt"; String messageContent = clean; if (splitIndex > 0 && splitIndex < clean.length()) { metadata = clean.substring(0, splitIndex).trim(); messageContent = clean.substring(splitIndex).trim(); } String separator = "=================================================="; System.out.println("\n" + separator); System.out.println("NEUE SYSLOG-NACHRICHT"); System.out.println("Quelle: " + packet.getAddress().getHostAddress() + ":" + packet.getPort()); System.out.println("Metadaten: " + metadata); System.out.println("Inhalt: " + messageContent); System.out.println(separator); } } catch (IOException e) { System.err.println("[ERROR] Syslog-Server Fehler: " + e.getMessage()); } } private static void runDiscoveryServer() { try (DatagramSocket socket = new DatagramSocket(DISCOVERY_PORT)) { byte[] buffer = new byte[256]; System.out.println("[INFO] Discovery-Service aktiv auf Port " + DISCOVERY_PORT); while (true) { DatagramPacket request = new DatagramPacket(buffer, buffer.length); socket.receive(request); DatagramPacket response = new DatagramPacket( new byte[0], 0, request.getAddress(), request.getPort() ); socket.send(response); System.out.println("[DISCOVERY] Server-IP an Client mit der IP [" + request.getAddress().getHostAddress() + "] gemeldet."); } } catch (IOException e) { System.err.println("[ERROR] Discovery-Fehler: " + e.getMessage()); } } }