This commit is contained in:
overcuriousity 2025-09-04 16:20:19 +02:00
parent a06777e754
commit d654e32e8a

View File

@ -1561,12 +1561,42 @@ void print_filter_examples(){
printf(" > Nur menschliche, erfolgreiche GET-Anfragen\n\n"); printf(" > Nur menschliche, erfolgreiche GET-Anfragen\n\n");
printf("Zeitraum-Analyse:\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(" > 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("DDoS-Verdacht:\n");
printf(" Status=429 OR Status=503 OR Status=500\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) { int handle_menu_shortcuts(int choice) {
@ -2458,6 +2488,8 @@ int parse_filter_argument(char* arg) {
return 1; return 1;
} }
// DISCLAIMER: KI-generiert
void print_help(char* binary) { void print_help(char* binary) {
printf("\nNGINX EXAMINATOR\n"); printf("\nNGINX EXAMINATOR\n");
printf("Verwendung:\n"); printf("Verwendung:\n");
@ -2472,7 +2504,7 @@ void print_help(char* binary) {
printf("\nFlags:\n"); printf("\nFlags:\n");
printf(" -i Startet interaktiven Modus mit Filtern (Status, Methode, IP, Zeitraum,\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(" -e Generiert Timesketch-kompatible CSV-Datei, nimmt optional Dateinamen entgegen.\n");
printf(" -f Aktiviert Kommandozeilen-Filter. Muss von Filter-Argumenten gefolgt werden.\n"); printf(" -f Aktiviert Kommandozeilen-Filter. Muss von Filter-Argumenten gefolgt werden.\n");
printf(" -h Zeigt diese Hilfe an.\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(" --method=METHODE[,METHODE...] HTTP-Methoden (z.B. GET,POST,ATYPICAL)\n");
printf(" --useragent=TEXT[,TEXT...] User-Agent Teilstrings (z.B. bot,crawler)\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(" --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(" --mode=MODE Filtermodus: 'and' oder 'or' (Standard: and)\n");
printf("\nFILTER-SYNTAX:\n"); printf("\nFILTER-SYNTAX:\n");
@ -2491,6 +2526,12 @@ void print_help(char* binary) {
printf(" Mehrere: Wert1,Wert2 (kommagetrennt, keine Leerzeichen)\n"); printf(" Mehrere: Wert1,Wert2 (kommagetrennt, keine Leerzeichen)\n");
printf(" Gemischt: Wert1,!Wert2 (Wert1 einschließen, Wert2 ausschließen)\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("\nFILTER-LOGIK:\n");
printf(" - Ausschluss-Filter (!) haben IMMER Vorrang vor Einschluss-Filtern\n"); printf(" - Ausschluss-Filter (!) haben IMMER Vorrang vor Einschluss-Filtern\n");
printf(" - AND-Modus: ALLE Einschluss-Filter pro Kategorie müssen zutreffen\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("\nUnterstützte Eingaben:\n");
printf(" - Normale NGINX-Access-Logs: *.log\n"); printf(" - Normale NGINX-Access-Logs: *.log\n");
printf(" - Rotierte Logs: *.log.1, *.log.2, ... (rein textbasiert)\n"); printf(" - Rotierte Logs: *.log.1, *.log.2, ... (rein textbasiert)\n");
printf(" - GZIP-Archive (*.gz) werden NICHT direkt unterstützt.\n"); printf(" - GZIP-Archive (*.gz) werden automatisch dekomprimiert\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("\nErwartetes NGINX-Logformat (default `log_format main`):\n"); printf("\nErwartetes NGINX-Logformat (default `log_format main`):\n");
printf(" log_format main '$remote_addr - $remote_user [$time_local] \"$request\" '\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("\nCSV-Export (Timesketch-kompatibel):\n");
printf(" Spalten: datetime, timestamp_desc, ip_address, method, url_path, status_code,\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("\nHinweise & Einschränkungen:\n");
printf(" - Parser erwartet das obige Standardformat. Abweichungen können zum Abbruch führen.\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(" - 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(" - 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[]) { int main(int argc, char* argv[]) {