Discovery port 8888 integriert; doppelte Datei aus tests entfernt
parent
4c5842aa8f
commit
4534883782
|
|
@ -6,7 +6,6 @@ import java.net.InetAddress;
|
|||
import java.nio.charset.StandardCharsets;
|
||||
import java.io.IOException;
|
||||
|
||||
|
||||
public class SyslogServer {
|
||||
public static void main(String[] args) {
|
||||
int port = 5514; // Default syslog port: 514, but using 5514 to avoid permission issues
|
||||
|
|
@ -14,53 +13,88 @@ public class SyslogServer {
|
|||
server.start(port);
|
||||
}
|
||||
|
||||
private void runDiscoveryListener() {
|
||||
try {
|
||||
DatagramSocket discoverySocket = new DatagramSocket(8888); // Port for discovery
|
||||
|
||||
byte[] bufferDiscovery = new byte[256];
|
||||
|
||||
System.out.println("Discovery Listener started on port 8888");
|
||||
|
||||
while (true) {
|
||||
DatagramPacket discoveryRequest = new DatagramPacket(bufferDiscovery, bufferDiscovery.length);
|
||||
discoverySocket.receive(discoveryRequest);
|
||||
|
||||
InetAddress clientAddress = discoveryRequest.getAddress();
|
||||
int clientPort = discoveryRequest.getPort();
|
||||
|
||||
System.out.println(
|
||||
"Discovery request received from: " + clientAddress.getHostAddress() + ":" + clientPort);
|
||||
|
||||
// Send a response back to the client
|
||||
byte[] responseData = "SYSLOG_SERVER".getBytes(StandardCharsets.UTF_8);
|
||||
DatagramPacket discoveryResponse = new DatagramPacket(
|
||||
responseData,
|
||||
responseData.length,
|
||||
clientAddress,
|
||||
clientPort);
|
||||
|
||||
discoverySocket.send(discoveryResponse);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static final int MAX_MESSAGE_SIZE = 480;
|
||||
|
||||
|
||||
public void start(int port) {
|
||||
|
||||
System.out.println("Syslog Server started on port " + port);
|
||||
// Discovery Listener in a separate thread
|
||||
new Thread(() -> runDiscoveryListener()).start();
|
||||
|
||||
|
||||
try{
|
||||
try {
|
||||
// Create a DatagramSocket to listen for incoming messages
|
||||
DatagramSocket socket = new DatagramSocket(port);
|
||||
|
||||
// Buffer to hold incoming messages
|
||||
byte[] buffer = new byte[1024];
|
||||
|
||||
while(true){
|
||||
while (true) {
|
||||
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
||||
|
||||
|
||||
// Wait for a message to be received (blocking call)
|
||||
socket.receive(packet);
|
||||
|
||||
// Extract the message from the packet + data; how many bytes were actually received
|
||||
|
||||
// Extract the message from the packet + data; how many bytes were actually
|
||||
// received
|
||||
int length = packet.getLength();
|
||||
|
||||
|
||||
if (length > MAX_MESSAGE_SIZE) {
|
||||
System.err.println("Received message exceeds maximum allowed size of " + MAX_MESSAGE_SIZE + " bytes. Message will be ignored.");
|
||||
System.err.println("Received message exceeds maximum allowed size of " + MAX_MESSAGE_SIZE
|
||||
+ " bytes. Message will be ignored.");
|
||||
continue; // Skip processing this message
|
||||
}
|
||||
|
||||
String message = new String(
|
||||
packet.getData(), // complete byte array be aware: packet.getData() returns the entire buffer, not just the received data
|
||||
packet.getOffset(), // get the offset where the data starts
|
||||
length,
|
||||
StandardCharsets.UTF_8); // Convert the byte array to a string using UTF-8 encoding
|
||||
|
||||
System.out.println("Nachricht received: " + message);
|
||||
String message = new String(
|
||||
packet.getData(), // complete byte array be aware: packet.getData() returns the entire buffer,
|
||||
// not just the received data
|
||||
packet.getOffset(), // get the offset where the data starts
|
||||
length,
|
||||
StandardCharsets.UTF_8); // Convert the byte array to a string using UTF-8 encoding
|
||||
|
||||
// Show Client IP and Port
|
||||
InetAddress clientAddress = packet.getAddress();
|
||||
int clientPort = packet.getPort();
|
||||
System.out.println("From: " + clientAddress.getHostAddress() + ":" + clientPort);
|
||||
|
||||
}
|
||||
|
||||
System.out.println("Message received: " + message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
catch(IOException e){
|
||||
catch (IOException e) {
|
||||
System.err.println("Could not start server: " + e.getMessage());
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,87 +0,0 @@
|
|||
package vs;
|
||||
|
||||
/**
|
||||
* helper class for RFC 5424 (https://datatracker.ietf.org/doc/html/rfc5424)
|
||||
* compliant log messages as immutable Java objects - representation of a subset
|
||||
* of printable strings of specific length
|
||||
*
|
||||
* @author Sandro Leuchter
|
||||
*
|
||||
*/
|
||||
public abstract class AsciiChars {
|
||||
|
||||
private final String value;
|
||||
|
||||
public String value() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
protected AsciiChars(int length, String value) {
|
||||
if (value != null) {
|
||||
if (value.length() > length) {
|
||||
throw new IllegalArgumentException(
|
||||
"Stringlänge = " + value.length() + " > " + length
|
||||
);
|
||||
}
|
||||
for (int c : value.getBytes()) {
|
||||
if (c < 33 || c > 126) {
|
||||
throw new IllegalArgumentException(
|
||||
"Stringinhalt nicht printable US-ASCII ohne Space"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (value() == null || value().length() == 0) {
|
||||
return "-";
|
||||
} else {
|
||||
return value();
|
||||
}
|
||||
}
|
||||
|
||||
public static final class L004 extends AsciiChars {
|
||||
|
||||
public L004(String value) {
|
||||
super(4, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class L012 extends AsciiChars {
|
||||
|
||||
public L012(String value) {
|
||||
super(12, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class L032 extends AsciiChars {
|
||||
|
||||
public L032(String value) {
|
||||
super(32, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class L048 extends AsciiChars {
|
||||
|
||||
public L048(String value) {
|
||||
super(48, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class L128 extends AsciiChars {
|
||||
|
||||
public L128(String value) {
|
||||
super(128, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class L255 extends AsciiChars {
|
||||
|
||||
public L255(String value) {
|
||||
super(255, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue