Ein vollständiges Java-Beispiel, das eine Datei (als Byte-Array) via Socket und ICAP in mehreren Chunks an einen Virenscanner sendet, ist recht umfangreich. ICAP (Internet Content Adaptation Prot... [mehr]
Ein Java-Programm, das direkt über einen Socket mit einem ICAP-Server (z.B. einem Virenscanner wie Kaspersky, Symantec, McAfee, etc.) kommuniziert, muss das ICAP-Protokoll implementieren. ICAP (Internet Content Adaptation Protocol) ist ein textbasiertes Protokoll, das typischerweise auf Port 1344 läuft. Die Kommunikation besteht aus dem Senden einer ICAP-Anfrage (z.B. `RESPMOD` oder `REQMOD`) und dem Empfangen einer Antwort. Hier ist ein möglichst vollständiges Beispiel, das eine Datei an einen ICAP-Server sendet und die Antwort ausliest. Das Beispiel verwendet `RESPMOD`, um eine Datei prüfen zu lassen. Es ist ein einfaches Beispiel und behandelt nicht alle Fehlerfälle oder ICAP-Features (wie Chunked Encoding, Authentifizierung, etc.), aber es zeigt die grundlegende Kommunikation. **Wichtige Hinweise:** - Du benötigst einen laufenden ICAP-Server (z.B. [C-ICAP](http://c-icap.sourceforge.net/), [Kaspersky ICAP Server](https://support.kaspersky.com/KICS/3.7/en-US/181522.htm), etc.). - Die genaue Service-URL (z.B. `/avscan`) und das Verhalten können je nach Server variieren. - ICAP ist ein komplexes Protokoll; für produktive Nutzung empfiehlt sich eine Bibliothek oder ein dedizierter Client. ```java import java.io.*; import java.net.Socket; public class ICAPClient { private static final String ICAP_SERVER = "localhost"; private static final int ICAP_PORT = 1344; private static final String ICAP_SERVICE = "/avscan"; // Service-Name kann variieren public static void main(String[] args) throws IOException { File fileToScan = new File("testfile.txt"); byte[] fileContent = readFile(fileToScan); String httpRequest = "GET / HTTP/1.1\r\n" + "Host: example.com\r\n" + "\r\n"; String icapRequest = "RESPMOD " + ICAP_SERVICE + " ICAP/1.0\r\n" + "Host: " + ICAP_SERVER + "\r\n" + "Allow: 204\r\n" + "Encapsulated: req-hdr=0, res-hdr=" + httpRequest.length() + ", res-body=" + (httpRequest.length()) + "\r\n" + "\r\n" + httpRequest + "HTTP/1.1 200 OK\r\n" + "Content-Type: application/octet-stream\r\n" + "Content-Length: " + fileContent.length + "\r\n" + "\r\n"; try (Socket socket = new Socket(ICAP_SERVER, ICAP_PORT); OutputStream out = socket.getOutputStream(); InputStream in = socket.getInputStream()) { // Sende ICAP-Header und HTTP-Header out.write(icapRequest.getBytes()); // Sende Datei im ICAP-Body (als HTTP-Body) out.write(fileContent); out.flush(); // Lese Antwort BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); if (line.isEmpty()) break; // Header zu Ende } // Optional: Body lesen, falls vorhanden } } private static byte[] readFile(File file) throws IOException { try (FileInputStream fis = new FileInputStream(file)) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; int read; while ((read = fis.read(buffer)) != -1) { baos.write(buffer, 0, read); } return baos.toByteArray(); } } } ``` **Erklärung:** - Das Programm baut eine Verbindung zum ICAP-Server auf. - Es erstellt eine ICAP-RESPMOD-Anfrage, die einen HTTP-Request und eine HTTP-Response (mit Dateiinhalt) kapselt. - Die Datei wird als HTTP-Body gesendet. - Die Antwort des ICAP-Servers wird ausgelesen und ausgegeben. **Weiterführende Links:** - [ICAP RFC 3507](https://datatracker.ietf.org/doc/html/rfc3507) - [C-ICAP Projekt](http://c-icap.sourceforge.net/) - [Kaspersky ICAP Server](https://support.kaspersky.com/KICS/3.7/en-US/181522.htm) **Hinweis:** Für produktive Anwendungen empfiehlt
Ein vollständiges Java-Beispiel, das eine Datei (als Byte-Array) via Socket und ICAP in mehreren Chunks an einen Virenscanner sendet, ist recht umfangreich. ICAP (Internet Content Adaptation Prot... [mehr]
Hier ist ein vollständiges Java-Beispiel, das zeigt, wie du direkt über einen TCP-Socket mit einem ICAP-Server kommunizierst und dabei eine Datei per HTTP chunked encoding an den Virenscanne... [mehr]
Hier ist ein vollständiges Java-Beispiel, das einen beliebigen `InputStream` (mit unbekannter Länge und ohne bekannten Namen) via Socket im ICAP-RESMOD-Modus an einen ICAP-Server sendet. Es... [mehr]
Ein vollständiges Beispiel für ein Java-Programm, das eine Datei (zw. einen InputStream) via Socket im ICAP-RESMOD-Modus in mehreren Chunks und mit Preview an einen ICAP-Virenscanner sendet,... [mehr]
Ein Java-Programm, das einen OPTIONS-Request via ICAP sendet und die Antwort auf der Konsole ausgibt, benötigt die Implementierung des ICAP-Protokolls auf TCP-Socket-Ebene, da es keine Standardbi... [mehr]
Ein vollständiges Beispiel für ein Java-Programm, das eine Datei (als Byte-Array) via Socket im ICAP-RESPMOD-Modus in mehreren Chunks mit Preview an einen ICAP-Virenscanner sendet, ist recht... [mehr]
Hier ist ein vollständiges Beispiel für ein Java-Programm, das direkt über einen Socket mit einem ICAP-Server kommuniziert und dabei einen Request in mehreren Chunks sendet. Das Beispie... [mehr]
Für Java gibt es mehrere Implementierungen des iCalendar-Standards (iCal, RFC 5545), die oft als "iCal APIs" oder "iCalendar Libraries" bezeichnet werden. Die bekanntesten und... [mehr]
Bei einem `InputStream` in Java gibt es keine direkte Methode, um die Länge (also die Gesamtanzahl der Bytes) des Streams zu ermitteln. Das liegt daran, dass ein `InputStream` eine abstrakte Date... [mehr]
Um in Java zu erkennen, ob eine Datei ein Bild oder Text enthält, kannst du verschiedene Ansätze nutzen. Hier sind zwei gängige Methoden: **1. Über die Dateiendung:** Du kannst di... [mehr]