84 lines
3.4 KiB
Java
84 lines
3.4 KiB
Java
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());
|
|
}
|
|
}
|
|
} |