From d654e32e8a65b51354944a8bc6bae45c7095a34c Mon Sep 17 00:00:00 2001 From: overcuriousity Date: Thu, 4 Sep 2025 16:20:19 +0200 Subject: [PATCH] progress --- src/main.c | 63 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/src/main.c b/src/main.c index 05f9514..3f8dd51 100644 --- a/src/main.c +++ b/src/main.c @@ -1464,7 +1464,7 @@ void print_filter_args(){ } // TODO timestamp - + // macht nicht viel Sinn, diese hier zu integrieren, so lang der User nicht weiß, wie die Annotationen lauten if (filters.annotation_flag_filter_enabled) { printf("--annotated="); @@ -1561,12 +1561,42 @@ void print_filter_examples(){ printf(" > Nur menschliche, erfolgreiche GET-Anfragen\n\n"); printf("Zeitraum-Analyse:\n"); - printf(" Time='08:00-18:00' AND Status=500\n"); + printf(" --timerange=2025-08-31-08-00-00:2025-08-31-18-00-00 AND Status=500\n"); printf(" > Server-Fehler nur während Geschäftszeiten\n\n"); + printf("Nachtzeit ausschließen:\n"); + printf(" --timerange=!2025-08-31-22-00-00:2025-09-01-06-00-00\n"); + printf(" > Alle Einträge außer der Nachtzeit\n\n"); + printf("DDoS-Verdacht:\n"); printf(" Status=429 OR Status=503 OR Status=500\n"); - printf(" > Alle Überlastungs- und Fehler-Codes\n"); + printf(" > Alle Überlastungs- und Fehler-Codes\n\n"); + + printf("ANNOTATIONS-FILTER:\n"); + printf("Nur verdächtige Einträge:\n"); + printf(" --annotated=true\n"); + printf(" > Zeigt nur Einträge mit Annotationen\n\n"); + + printf("Bestimmte Anomalien:\n"); + printf(" --annotation='Long Payload'\n"); + printf(" > Nur Einträge mit verdächtig langen Anfragen\n\n"); + + printf("Normale Traffic-Analyse (ohne Anomalien):\n"); + printf(" --annotated=!true\n"); + printf(" > Schließt alle annotierten/verdächtigen Einträge aus\n\n"); + + printf("KOMPLEXE KOMBINATIONEN:\n"); + printf("Forensik-Analyse:\n"); + printf(" --timerange=2025-08-31-14-00-00:2025-08-31-16-00-00 --status=400,404,403 --annotated=true\n"); + printf(" > Verdächtige Aktivitäten in kritischem Zeitfenster\n\n"); + + printf("Performance-Analyse:\n"); + printf(" --timerange=!2025-08-31-02-00-00:2025-08-31-06-00-00 --status=200 --annotated=!true\n"); + printf(" > Normaler Traffic außerhalb der Wartungszeit\n\n"); + + printf("Security-Monitoring:\n"); + printf(" --url='.git','.env','wp-admin' --annotation='Long Payload' --mode=or\n"); + printf(" > Alle bekannten Angriffsmuster und verdächtige Payloads\n"); } int handle_menu_shortcuts(int choice) { @@ -2458,6 +2488,8 @@ int parse_filter_argument(char* arg) { return 1; } + +// DISCLAIMER: KI-generiert void print_help(char* binary) { printf("\nNGINX EXAMINATOR\n"); printf("Verwendung:\n"); @@ -2472,7 +2504,7 @@ void print_help(char* binary) { printf("\nFlags:\n"); printf(" -i Startet interaktiven Modus mit Filtern (Status, Methode, IP, Zeitraum,\n"); - printf(" User-Agent, URL-Teilstring), Vorschau, Statistiken und CSV-Export (Timesketch).\n"); + printf(" User-Agent, URL-Teilstring, Annotationen), Vorschau, Statistiken und CSV-Export (Timesketch).\n"); printf(" -e Generiert Timesketch-kompatible CSV-Datei, nimmt optional Dateinamen entgegen.\n"); printf(" -f Aktiviert Kommandozeilen-Filter. Muss von Filter-Argumenten gefolgt werden.\n"); printf(" -h Zeigt diese Hilfe an.\n"); @@ -2483,6 +2515,9 @@ void print_help(char* binary) { printf(" --method=METHODE[,METHODE...] HTTP-Methoden (z.B. GET,POST,ATYPICAL)\n"); printf(" --useragent=TEXT[,TEXT...] User-Agent Teilstrings (z.B. bot,crawler)\n"); printf(" --url=PFAD[,PFAD...] URL-Pfad Teilstrings (z.B. .git,.php,wp-)\n"); + printf(" --annotated=true Einträge mit/ohne Annotationen (true oder !true)\n"); + printf(" --annotation=TEXT[,TEXT...] Annotations-Teilstrings (z.B. 'Long Payload')\n"); + printf(" --timerange=START:END[,...] Zeiträume (Format: YYYY-MM-DD-HH-MM-SS:YYYY-MM-DD-HH-MM-SS)\n"); printf(" --mode=MODE Filtermodus: 'and' oder 'or' (Standard: and)\n"); printf("\nFILTER-SYNTAX:\n"); @@ -2491,6 +2526,12 @@ void print_help(char* binary) { printf(" Mehrere: Wert1,Wert2 (kommagetrennt, keine Leerzeichen)\n"); printf(" Gemischt: Wert1,!Wert2 (Wert1 einschließen, Wert2 ausschließen)\n"); + printf("\nZEITRAUM-SYNTAX:\n"); + printf(" Format: YYYY-MM-DD-HH-MM-SS:YYYY-MM-DD-HH-MM-SS\n"); + printf(" Beispiel: 2025-08-31-08-00-00:2025-08-31-18-00-00\n"); + printf(" Ausschluss: !2025-08-31-02-00-00:2025-08-31-06-00-00\n"); + printf(" Mehrere: Start1:End1,!Start2:End2,Start3:End3\n"); + printf("\nFILTER-LOGIK:\n"); printf(" - Ausschluss-Filter (!) haben IMMER Vorrang vor Einschluss-Filtern\n"); printf(" - AND-Modus: ALLE Einschluss-Filter pro Kategorie müssen zutreffen\n"); @@ -2500,10 +2541,7 @@ void print_help(char* binary) { printf("\nUnterstützte Eingaben:\n"); printf(" - Normale NGINX-Access-Logs: *.log\n"); printf(" - Rotierte Logs: *.log.1, *.log.2, ... (rein textbasiert)\n"); - printf(" - GZIP-Archive (*.gz) werden NICHT direkt unterstützt.\n"); - printf(" Tipp: Dekomprimieren Sie vorher, z.B.:\n"); - printf(" gunzip /var/log/nginx/*.gz\n"); - printf(" %s /var/log/nginx/ -i\n", binary); + printf(" - GZIP-Archive (*.gz) werden automatisch dekomprimiert\n"); printf("\nErwartetes NGINX-Logformat (default `log_format main`):\n"); printf(" log_format main '$remote_addr - $remote_user [$time_local] \"$request\" '\n"); @@ -2515,13 +2553,18 @@ void print_help(char* binary) { printf("\nCSV-Export (Timesketch-kompatibel):\n"); printf(" Spalten: datetime, timestamp_desc, ip_address, method, url_path, status_code,\n"); - printf(" bytes_sent, user_agent, source_file, parsing_timestamp\n"); + printf(" bytes_sent, user_agent, source_file, parsing_timestamp, annotation\n"); + + printf("\nAnnotationen:\n"); + printf(" - Automatische Erkennung verdächtiger Muster (z.B. 'Long Payload')\n"); + printf(" - Filterbar über --annotated und --annotation Parameter\n"); + printf(" - Sichtbar in interaktivem Modus und CSV-Export\n"); printf("\nHinweise & Einschränkungen:\n"); printf(" - Parser erwartet das obige Standardformat. Abweichungen können zum Abbruch führen.\n"); printf(" - Zeitzone aus dem Log wird gelesen, aber intern als einfache Felder verarbeitet.\n"); printf(" - ATYPICAL-Methode: für fehlerhafte/binäre Requests innerhalb der \"request\"-Spalte.\n"); - printf(" - Zeitraum-Filter sind nur im interaktiven Modus verfügbar (nicht über -f).\n"); + printf(" - Komplexe Zeitraum-Filter sind vollständig über Kommandozeile verfügbar.\n"); } int main(int argc, char* argv[]) {