// fakeClamd implementiert das reale clamd-INSTREAM-Protokoll // protokolltreu (kein echter ClamAV-Daemon auf dem Testhost installiert // — siehe Paket-Dokumentation in scanner.go). Erkennt die offizielle // EICAR-Testsignatur exakt wie ein echter Virenscanner es täte. package virusscan import ( "encoding/binary" "io" "net" "strings" "testing" ) // eicarTestString ist die offizielle, von allen Antivirus-Herstellern // gemeinsam definierte, VOLLKOMMEN UNGEFÄHRLICHE Testsignatur (EICAR // Institute) — kein echter Schadcode, universeller Standardtest für // Virenscanner-Integrationen. const eicarTestString = `X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*` func startFakeClamd(t *testing.T) (addr string) { t.Helper() listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatalf("listener: %v", err) } go func() { for { conn, err := listener.Accept() if err != nil { return } go handleFakeClamdConn(conn) } }() t.Cleanup(func() { _ = listener.Close() }) return listener.Addr().String() } func handleFakeClamdConn(conn net.Conn) { defer func() { _ = conn.Close() }() header := make([]byte, len("zINSTREAM\x00")) if _, err := io.ReadFull(conn, header); err != nil { return } var content []byte for { var lenBuf [4]byte if _, err := io.ReadFull(conn, lenBuf[:]); err != nil { return } chunkLen := binary.BigEndian.Uint32(lenBuf[:]) if chunkLen == 0 { break } chunk := make([]byte, chunkLen) if _, err := io.ReadFull(conn, chunk); err != nil { return } content = append(content, chunk...) } if strings.Contains(string(content), "EICAR-STANDARD-ANTIVIRUS-TEST-FILE") { _, _ = conn.Write([]byte("stream: Eicar-Test-Signature FOUND\x00")) return } _, _ = conn.Write([]byte("stream: OK\x00")) }