"""Zählt in einer Textdatei Muster für Zugangsdaten, Firmennamen, Adressen und Mailadressen. Ersteller: Claude (Opus 5.5) · Erstellt: 2026-10-15 · Doku: LIESMICH.md Gibt je Muster die Zahl der Treffer und die verschiedenen Treffer aus; Werte, die wie Geheimnisse aussehen, nur als Länge. Aufruf: python -I -X utf8 datei_scan.py """ import re import sys from collections import Counter from pathlib import Path text = Path(sys.argv[1]).read_text(encoding="utf-8", errors="replace") # Muster, deren Treffer nur gezählt und als Länge gezeigt werden GEHEIM = { "schluesselwort_mit_wert": r"(?i)\b(pass(?:wor[dt])?|kennwort|pwd|token|secret|api[_-]?key|client[_-]?secret|bearer)\b\s*[:=]\s*['\"]?([^\s'\",;]{6,})", "private_key_block": r"-----BEGIN [A-Z ]*PRIVATE KEY-----", "lange_hex_oder_base64": r"\b[A-Za-z0-9+/]{40,}={0,2}\b", } # Muster, deren Treffer im Klartext gezeigt werden (Analyse, nicht für Ablage) OFFEN = { "firma": r"\b[A-ZÄÖÜ][\w&.-]*(?:\s+[A-ZÄÖÜ][\w&.-]*){0,3}\s+(?:GmbH|AG|KG|SE|e\.V\.|UG|Inc\.?|Ltd\.?)\b", "mail": r"\b[\w.+-]+@[\w-]+(?:\.[\w-]+)+\b", "ipv4": r"\b(?:\d{1,3}\.){3}\d{1,3}\b", "guid": r"\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b", "domain": r"\bhttps?://([\w.-]+)", "unc_pfad": r"\\\\[\w.-]+\\[\w$.-]+", } print(f"Datei: {len(text)} Zeichen, {text.count(chr(10))} Zeilen") for name, muster in GEHEIM.items(): treffer = re.findall(muster, text) werte = [t[-1] if isinstance(t, tuple) else t for t in treffer] print(f"[geheim] {name}: {len(werte)} Treffer, Längen {sorted(Counter(len(w) for w in werte).items())[:15]}") if name == "schluesselwort_mit_wert": for schluessel, n in Counter(t[0].lower() for t in treffer).most_common(): print(f" Schlüssel {schluessel!r}: {n}") for name, muster in OFFEN.items(): zaehl = Counter(re.findall(muster, text)) print(f"[offen] {name}: {sum(zaehl.values())} Treffer, {len(zaehl)} verschieden") for wert, n in zaehl.most_common(40): print(f" {n:4d} {wert}")