progress
This commit is contained in:
parent
291c72c2a5
commit
4db2cb753a
139
src/main.c
139
src/main.c
@ -237,8 +237,8 @@ void mem_expand_dynamically() {
|
|||||||
struct log_entry *new_ptr = realloc(all_entries, max_entries * sizeof(struct log_entry));
|
struct log_entry *new_ptr = realloc(all_entries, max_entries * sizeof(struct log_entry));
|
||||||
|
|
||||||
if (new_ptr == NULL) {
|
if (new_ptr == NULL) {
|
||||||
printf("FEHLER: Speicher konnte nicht auf %d Einträge erweitert werden, ..\n", max_entries);
|
printf("ERROR: Speicher konnte nicht auf %d Einträge erweitert werden, ..\n", max_entries);
|
||||||
printf("FEHLER: Benötigter Speicher: %lu Bytes\n", (unsigned long)(max_entries * sizeof(struct log_entry)));
|
printf("ERROR: Benötigter Speicher: %lu Bytes\n", (unsigned long)(max_entries * sizeof(struct log_entry)));
|
||||||
cleanup_and_exit();
|
cleanup_and_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,8 +252,8 @@ void allocate_initial_memory() {
|
|||||||
all_entries = malloc(max_entries * sizeof(struct log_entry));
|
all_entries = malloc(max_entries * sizeof(struct log_entry));
|
||||||
|
|
||||||
if (all_entries == NULL) {
|
if (all_entries == NULL) {
|
||||||
printf("FEHLER: Konnte %d Einträge nicht allozieren, ..\n", max_entries);
|
printf("ERROR: Konnte %d Einträge nicht allozieren, ..\n", max_entries);
|
||||||
printf("FEHLER: %lu Bytes\n", (unsigned long)(max_entries * sizeof(struct log_entry)));
|
printf("ERROR: %lu Bytes\n", (unsigned long)(max_entries * sizeof(struct log_entry)));
|
||||||
exit(1); // cleanup_and_exit() nicht nötig, da der Speicherbereich nicht beschrieben wurde - use-after-free unproblematisch
|
exit(1); // cleanup_and_exit() nicht nötig, da der Speicherbereich nicht beschrieben wurde - use-after-free unproblematisch
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,7 +404,7 @@ int parse_simple_log_line(char* line, int entry_index, char* source_file) { // N
|
|||||||
// 107.170.27.248 - - [31/Aug/2025:00:11:42 +0000] "GET /.git/config HTTP/1.1" 400 255 "-" "Mozilla/5.0; Keydrop.io/1.0(onlyscans.com/about);" "-"
|
// 107.170.27.248 - - [31/Aug/2025:00:11:42 +0000] "GET /.git/config HTTP/1.1" 400 255 "-" "Mozilla/5.0; Keydrop.io/1.0(onlyscans.com/about);" "-"
|
||||||
// ^
|
// ^
|
||||||
} else {
|
} else {
|
||||||
printf("FEHLER: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen des Timestamps aufgetreten, dieser sollte folgendes Format haben:\n[DD/MMM/YYYY:HH:MM:SS +0000]\n\n");
|
printf("ERROR: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen des Timestamps aufgetreten, dieser sollte folgendes Format haben:\n[DD/MMM/YYYY:HH:MM:SS +0000]\n\n");
|
||||||
cleanup_and_exit();
|
cleanup_and_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -479,7 +479,7 @@ int parse_simple_log_line(char* line, int entry_index, char* source_file) { // N
|
|||||||
// 107.170.27.248 - - [31/Aug/2025:00:11:42 +0000] "GET /.git/config HTTP/1.1" 400 255 "-" "Mozilla/5.0; Keydrop.io/1.0(onlyscans.com/about);" "-"
|
// 107.170.27.248 - - [31/Aug/2025:00:11:42 +0000] "GET /.git/config HTTP/1.1" 400 255 "-" "Mozilla/5.0; Keydrop.io/1.0(onlyscans.com/about);" "-"
|
||||||
// ^
|
// ^
|
||||||
} else {
|
} else {
|
||||||
printf("FEHLER: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen der HTTP-Methode aufgetreten. Diese steht innerhalb eines Strings zusammen mit dem URL-Pfad:\n\"GET /.git/config HTTP/1.1\"\n\n");
|
printf("ERROR: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen der HTTP-Methode aufgetreten. Diese steht innerhalb eines Strings zusammen mit dem URL-Pfad:\n\"GET /.git/config HTTP/1.1\"\n\n");
|
||||||
cleanup_and_exit();
|
cleanup_and_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -513,7 +513,7 @@ int parse_simple_log_line(char* line, int entry_index, char* source_file) { // N
|
|||||||
}
|
}
|
||||||
if (*current_pos == '"') current_pos++; // schließendes Anführungszeichen überspringen
|
if (*current_pos == '"') current_pos++; // schließendes Anführungszeichen überspringen
|
||||||
} else {
|
} else {
|
||||||
printf("FEHLER: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen des Referrer-Feldes aufgetreten.\n\n");
|
printf("ERROR: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen des Referrer-Feldes aufgetreten.\n\n");
|
||||||
cleanup_and_exit();
|
cleanup_and_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,7 +530,7 @@ int parse_simple_log_line(char* line, int entry_index, char* source_file) { // N
|
|||||||
all_entries[entry_index].user_agent[i] = '\0';
|
all_entries[entry_index].user_agent[i] = '\0';
|
||||||
if (*current_pos == '"') current_pos++;
|
if (*current_pos == '"') current_pos++;
|
||||||
} else {
|
} else {
|
||||||
printf("FEHLER: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen des User-Agent aufgetreten. Dieser steht innerhalb eines Strings:\n\"Mozilla/5.0; Keydrop.io/1.0(onlyscans.com/about);\"\n\n");
|
printf("ERROR: Unerwartetes Log-Format. Lediglich mit standard-nginx-accesslog kompatibel.\nDer Fehler ist beim Prüfen des User-Agent aufgetreten. Dieser steht innerhalb eines Strings:\n\"Mozilla/5.0; Keydrop.io/1.0(onlyscans.com/about);\"\n\n");
|
||||||
cleanup_and_exit();
|
cleanup_and_exit();
|
||||||
}
|
}
|
||||||
get_current_timestamp(all_entries[entry_index].parsing_timestamp, sizeof(all_entries[entry_index].parsing_timestamp));
|
get_current_timestamp(all_entries[entry_index].parsing_timestamp, sizeof(all_entries[entry_index].parsing_timestamp));
|
||||||
@ -544,7 +544,7 @@ int parse_simple_log_line(char* line, int entry_index, char* source_file) { // N
|
|||||||
void load_regular_file(char* filename) {
|
void load_regular_file(char* filename) {
|
||||||
FILE* file = fopen(filename, "r");
|
FILE* file = fopen(filename, "r");
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
printf("FEHLER: Kann Datei '%s' nicht öffnen!\n", filename);
|
printf("ERROR: Kann Datei '%s' nicht öffnen!\n", filename);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
printf("INFO: Lade Datei: %s\n", filename);
|
printf("INFO: Lade Datei: %s\n", filename);
|
||||||
@ -570,7 +570,7 @@ void load_log_file(char* path) {
|
|||||||
|
|
||||||
DIR* dir = opendir(path);
|
DIR* dir = opendir(path);
|
||||||
if (dir == NULL) {
|
if (dir == NULL) {
|
||||||
printf("FEHLER: Kann Verzeichnis '%s' nicht öffnen!\n", path);
|
printf("ERROR: Kann Verzeichnis '%s' nicht öffnen!\n", path);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -599,7 +599,7 @@ void load_log_file(char* path) {
|
|||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
||||||
if (files_found == 0) {
|
if (files_found == 0) {
|
||||||
printf("WARNUNG: Keine .log Dateien im Verzeichnis gefunden.\n");
|
printf("WARNING: Keine .log Dateien im Verzeichnis gefunden.\n");
|
||||||
printf(" Tipp: Für .gz Dateien verwenden Sie 'gunzip *.gz' zum Dekomprimieren\n");
|
printf(" Tipp: Für .gz Dateien verwenden Sie 'gunzip *.gz' zum Dekomprimieren\n");
|
||||||
} else {
|
} else {
|
||||||
printf("INFO: Insgesamt %d .log Dateien verarbeitet.\n", files_found);
|
printf("INFO: Insgesamt %d .log Dateien verarbeitet.\n", files_found);
|
||||||
@ -609,7 +609,7 @@ void load_log_file(char* path) {
|
|||||||
printf("Einzelne Datei erkannt: %s\n", path);
|
printf("Einzelne Datei erkannt: %s\n", path);
|
||||||
|
|
||||||
if (strstr(path, ".gz") != NULL) {
|
if (strstr(path, ".gz") != NULL) {
|
||||||
printf("FEHLER: .gz Dateien werden in dieser Version nicht unterstützt!\n");
|
printf("ERROR: .gz Dateien werden in dieser Version nicht unterstützt!\n");
|
||||||
printf(" Lösung: Dekomprimieren Sie die Datei zuerst:\n");
|
printf(" Lösung: Dekomprimieren Sie die Datei zuerst:\n");
|
||||||
printf(" gunzip %s\n", path);
|
printf(" gunzip %s\n", path);
|
||||||
printf(" Dann: %s %.*s\n", "PROGRAMM", (int)(strlen(path)-3), path);
|
printf(" Dann: %s %.*s\n", "PROGRAMM", (int)(strlen(path)-3), path);
|
||||||
@ -994,7 +994,7 @@ void export_filtered_entries(char *filepath) {
|
|||||||
if (filepath == NULL) {
|
if (filepath == NULL) {
|
||||||
printf("Dateiname für Timesketch-Export eingeben (ohne .csv): ");
|
printf("Dateiname für Timesketch-Export eingeben (ohne .csv): ");
|
||||||
if (scanf("%90s", filename) != 1) {
|
if (scanf("%90s", filename) != 1) {
|
||||||
printf("FEHLER: Ungültiger Dateiname!\n");
|
printf("ERROR: Ungültiger Dateiname!\n");
|
||||||
clear_input_buffer();
|
clear_input_buffer();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1007,7 +1007,7 @@ void export_filtered_entries(char *filepath) {
|
|||||||
printf("\nINFO: Schreibe Datei %s...\n", filename);
|
printf("\nINFO: Schreibe Datei %s...\n", filename);
|
||||||
FILE* file = fopen(filename, "w");
|
FILE* file = fopen(filename, "w");
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
printf("FEHLER: Kann Datei '%s' nicht erstellen!\n", filename);
|
printf("ERROR: Kann Datei '%s' nicht erstellen!\n", filename);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1209,7 +1209,7 @@ void show_status() {
|
|||||||
printf(" %d Logzeilen in Datenstruktur\n", total_entries);
|
printf(" %d Logzeilen in Datenstruktur\n", total_entries);
|
||||||
printf(" Speicherbelegung: %lu Bytes\n", (unsigned long)(max_entries * sizeof(struct log_entry)));
|
printf(" Speicherbelegung: %lu Bytes\n", (unsigned long)(max_entries * sizeof(struct log_entry)));
|
||||||
} else {
|
} else {
|
||||||
printf(" FEHLER: Keine Einträge in Datenstruktur!\n");
|
printf(" ERROR: Keine Einträge in Datenstruktur!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n Aktive Filter:\n");
|
printf("\n Aktive Filter:\n");
|
||||||
@ -1490,7 +1490,7 @@ int safe_read_integer(const char* prompt, int min_val, int max_val) {
|
|||||||
// scanf liest den Input in einen pointer ein, daher nicht &input. Die Usereingabe ist ein String, also ein Array
|
// scanf liest den Input in einen pointer ein, daher nicht &input. Die Usereingabe ist ein String, also ein Array
|
||||||
if (scanf("%49s", input) != 1) {
|
if (scanf("%49s", input) != 1) {
|
||||||
clear_input_buffer();
|
clear_input_buffer();
|
||||||
printf("FEHLER: Ungültige Eingabe. Bitte erneut versuchen.\n");
|
printf("ERROR: Ungültige Eingabe. Bitte erneut versuchen.\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
clear_input_buffer();
|
clear_input_buffer();
|
||||||
@ -1503,12 +1503,12 @@ int safe_read_integer(const char* prompt, int min_val, int max_val) {
|
|||||||
value = strtol(input, &endptr, 10);
|
value = strtol(input, &endptr, 10);
|
||||||
// wenn der endptr der Nullterminator ist, handelte es sich bei der Eingabe sicher um einen Long-Integer.
|
// wenn der endptr der Nullterminator ist, handelte es sich bei der Eingabe sicher um einen Long-Integer.
|
||||||
if (*endptr != '\0') {
|
if (*endptr != '\0') {
|
||||||
printf("FEHLER: '%s' ist keine gültige Zahl. Bitte erneut versuchen.\n", input);
|
printf("ERROR: '%s' ist keine gültige Zahl. Bitte erneut versuchen.\n", input);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Prüfen, ob sich der Wert im Erwartungsbereich befindet
|
// Prüfen, ob sich der Wert im Erwartungsbereich befindet
|
||||||
if (value < min_val || value > max_val) {
|
if (value < min_val || value > max_val) {
|
||||||
printf("FEHLER: Wert muss zwischen %d und %d liegen. Bitte erneut versuchen.\n", min_val, max_val);
|
printf("ERROR: Wert muss zwischen %d und %d liegen. Bitte erneut versuchen.\n", min_val, max_val);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1521,13 +1521,13 @@ int safe_read_string(const char* prompt, char* buffer, int buffer_size) {
|
|||||||
printf("%s", prompt);
|
printf("%s", prompt);
|
||||||
if (scanf("%s", buffer) != 1) {
|
if (scanf("%s", buffer) != 1) {
|
||||||
clear_input_buffer();
|
clear_input_buffer();
|
||||||
printf("FEHLER: Ungültige Eingabe. Bitte erneut versuchen.\n");
|
printf("ERROR: Ungültige Eingabe. Bitte erneut versuchen.\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
clear_input_buffer();
|
clear_input_buffer();
|
||||||
|
|
||||||
if (strlen(buffer) >= buffer_size - 1) {
|
if (strlen(buffer) >= buffer_size - 1) {
|
||||||
printf("FEHLER: Eingabe zu lang. Bitte erneut versuchen.\n");
|
printf("ERROR: Eingabe zu lang. Bitte erneut versuchen.\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1684,7 +1684,7 @@ int menu_set_filters() {
|
|||||||
|
|
||||||
if (choice == 1) {
|
if (choice == 1) {
|
||||||
if (filters.status_count >= MAX_FILTERS) {
|
if (filters.status_count >= MAX_FILTERS) {
|
||||||
printf("FEHLER: Maximale Anzahl Status-Code Filter erreicht (%d)!\n", MAX_FILTERS);
|
printf("ERROR: Maximale Anzahl Status-Code Filter erreicht (%d)!\n", MAX_FILTERS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1705,7 +1705,7 @@ int menu_set_filters() {
|
|||||||
|
|
||||||
} else if (choice == 2) {
|
} else if (choice == 2) {
|
||||||
if (filters.ip_count >= MAX_FILTERS) {
|
if (filters.ip_count >= MAX_FILTERS) {
|
||||||
printf("FEHLER: Maximale Anzahl IP-Filter erreicht (%d)!\n", MAX_FILTERS);
|
printf("ERROR: Maximale Anzahl IP-Filter erreicht (%d)!\n", MAX_FILTERS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1727,7 +1727,7 @@ int menu_set_filters() {
|
|||||||
|
|
||||||
} else if (choice == 3) {
|
} else if (choice == 3) {
|
||||||
if (filters.time_count >= MAX_FILTERS) {
|
if (filters.time_count >= MAX_FILTERS) {
|
||||||
printf("FEHLER: Maximale Anzahl Zeitraum-Filter erreicht (%d)!\n", MAX_FILTERS);
|
printf("ERROR: Maximale Anzahl Zeitraum-Filter erreicht (%d)!\n", MAX_FILTERS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1802,7 +1802,7 @@ int menu_set_filters() {
|
|||||||
|
|
||||||
} else if (choice == 4) {
|
} else if (choice == 4) {
|
||||||
if (filters.user_agent_count >= MAX_FILTERS) {
|
if (filters.user_agent_count >= MAX_FILTERS) {
|
||||||
printf("FEHLER: Maximale Anzahl User-Agent Filter erreicht (%d)!\n", MAX_FILTERS);
|
printf("ERROR: Maximale Anzahl User-Agent Filter erreicht (%d)!\n", MAX_FILTERS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1824,7 +1824,7 @@ int menu_set_filters() {
|
|||||||
|
|
||||||
} else if (choice == 5) {
|
} else if (choice == 5) {
|
||||||
if (filters.method_count >= MAX_FILTERS) {
|
if (filters.method_count >= MAX_FILTERS) {
|
||||||
printf("FEHLER: Maximale Anzahl Method-Filter erreicht (%d)!\n", MAX_FILTERS);
|
printf("ERROR: Maximale Anzahl Method-Filter erreicht (%d)!\n", MAX_FILTERS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1846,7 +1846,7 @@ int menu_set_filters() {
|
|||||||
|
|
||||||
} else if (choice == 6) {
|
} else if (choice == 6) {
|
||||||
if (filters.url_count >= MAX_FILTERS) {
|
if (filters.url_count >= MAX_FILTERS) {
|
||||||
printf("FEHLER: Maximale Anzahl URL-Filter erreicht (%d)!\n", MAX_FILTERS);
|
printf("ERROR: Maximale Anzahl URL-Filter erreicht (%d)!\n", MAX_FILTERS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1871,7 +1871,7 @@ int menu_set_filters() {
|
|||||||
} else if (choice == -3) {
|
} else if (choice == -3) {
|
||||||
return -3;
|
return -3;
|
||||||
} else if (choice != -1) {
|
} else if (choice != -1) {
|
||||||
printf("FEHLER: Ungültige Auswahl! Bitte wählen Sie 1-6 oder b/m/q.\n");
|
printf("ERROR: Ungültige Auswahl! Bitte wählen Sie 1-6 oder b/m/q.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return choice;
|
return choice;
|
||||||
@ -2044,7 +2044,7 @@ void menu_filter_mode() {
|
|||||||
} else if (choice == -2 || choice == -3) {
|
} else if (choice == -2 || choice == -3) {
|
||||||
return;
|
return;
|
||||||
} else if (choice != -1) {
|
} else if (choice != -1) {
|
||||||
printf("FEHLER: Ungültige Auswahl! Bitte wählen Sie 1-3 oder b/m/q.\n");
|
printf("ERROR: Ungültige Auswahl! Bitte wählen Sie 1-3 oder b/m/q.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2059,7 +2059,7 @@ void menu_reset_filters() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("WARNUNG: Alle %d Filter werden gelöscht!\n\n", total_filters);
|
printf("WARNING: Alle %d Filter werden gelöscht!\n\n", total_filters);
|
||||||
printf("1. Ja, alle Filter löschen\n");
|
printf("1. Ja, alle Filter löschen\n");
|
||||||
printf("2. Abbrechen\n");
|
printf("2. Abbrechen\n");
|
||||||
printf("Navigation: [b]Zurück [m]Hauptmenü [q]Beenden\n");
|
printf("Navigation: [b]Zurück [m]Hauptmenü [q]Beenden\n");
|
||||||
@ -2083,7 +2083,7 @@ void menu_reset_filters() {
|
|||||||
} else if (choice == -2 || choice == -3) {
|
} else if (choice == -2 || choice == -3) {
|
||||||
return;
|
return;
|
||||||
} else if (choice != -1) {
|
} else if (choice != -1) {
|
||||||
printf("FEHLER: Ungültige Auswahl! Bitte wählen Sie 1-2 oder b/m/q.\n");
|
printf("ERROR: Ungültige Auswahl! Bitte wählen Sie 1-2 oder b/m/q.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2120,7 +2120,7 @@ void menu_filter_management() {
|
|||||||
} else if (choice == -3) {
|
} else if (choice == -3) {
|
||||||
return;
|
return;
|
||||||
} else if (choice != -1) {
|
} else if (choice != -1) {
|
||||||
printf("FEHLER: Ungültige Auswahl! Bitte wählen Sie 1-5 oder b/m/q.\n");
|
printf("ERROR: Ungültige Auswahl! Bitte wählen Sie 1-5 oder b/m/q.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2151,7 +2151,7 @@ void menu_show_entries() {
|
|||||||
|
|
||||||
if (choice == 1) {
|
if (choice == 1) {
|
||||||
if (filtered_count > 1000) {
|
if (filtered_count > 1000) {
|
||||||
printf("\nWARNUNG: Die Anzeige von %d Einträgen in der Kommandozeile ist unübersichtlich.\n", filtered_count);
|
printf("\nWARNING: Die Anzeige von %d Einträgen in der Kommandozeile ist unübersichtlich.\n", filtered_count);
|
||||||
printf("Empfehlung: Verwenden Sie den CSV-Export für große Datenmengen.\n\n");
|
printf("Empfehlung: Verwenden Sie den CSV-Export für große Datenmengen.\n\n");
|
||||||
printf("1. Trotzdem anzeigen\n");
|
printf("1. Trotzdem anzeigen\n");
|
||||||
printf("2. Abbrechen\n");
|
printf("2. Abbrechen\n");
|
||||||
@ -2175,7 +2175,7 @@ void menu_show_entries() {
|
|||||||
} else if (choice == -3) {
|
} else if (choice == -3) {
|
||||||
return;
|
return;
|
||||||
} else if (choice != -1) {
|
} else if (choice != -1) {
|
||||||
printf("FEHLER: Ungültige Auswahl! Bitte wählen Sie 1-4 oder b/m/q.\n");
|
printf("ERROR: Ungültige Auswahl! Bitte wählen Sie 1-4 oder b/m/q.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2225,49 +2225,56 @@ void parse_filter_values(const char* values_str, const char* filter_type) {
|
|||||||
// Funktionen zum setzen der Filter (existierende Datenstrukturen)
|
// Funktionen zum setzen der Filter (existierende Datenstrukturen)
|
||||||
void add_status_filter(const char* value, filter_mode_t mode) {
|
void add_status_filter(const char* value, filter_mode_t mode) {
|
||||||
if (filters.status_count >= MAX_FILTERS) {
|
if (filters.status_count >= MAX_FILTERS) {
|
||||||
printf("WARNUNG: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
printf("WARNING: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO
|
// Kovertierung des Statuscodes zu long mit Error handling
|
||||||
int status_code = atoi(value);
|
int status_code = strtol(value, &endptr, 10);
|
||||||
|
if (endptr != '\n' ){
|
||||||
|
printf("ERROR: Ungültiger Wert im Statuscode-Filter: %s", value);
|
||||||
|
}
|
||||||
if (status_code < 100 || status_code > 599) {
|
if (status_code < 100 || status_code > 599) {
|
||||||
printf("WARNUNG: Invalid status code: %s (must be 100-599)\n", value);
|
printf("WARNING: Invalid status code: %s (must be 100-599)\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setzen des Filters
|
||||||
filters.status_filters[filters.status_count].code = status_code;
|
filters.status_filters[filters.status_count].code = status_code;
|
||||||
filters.status_filters[filters.status_count].mode = mode;
|
filters.status_filters[filters.status_count].mode = mode;
|
||||||
filters.status_count++;
|
filters.status_count++;
|
||||||
|
|
||||||
printf("Added status filter: %s%d\n", mode == FILTER_EXCLUDE ? "!" : "", status_code);
|
printf("DEBUG: Filter hinzugefügt: %s%d\n", mode == FILTER_EXCLUDE ? "!" : "", status_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_ip_filter(const char* value, filter_mode_t mode) {
|
void add_ip_filter(const char* value, filter_mode_t mode) {
|
||||||
if (filters.ip_count >= MAX_FILTERS) {
|
if (filters.ip_count >= MAX_FILTERS) {
|
||||||
printf("WARNUNG: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
printf("WARNING: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// einfache Plausibilitätsprüfung hinsichtlich der Länge
|
||||||
if (strlen(value) >= sizeof(filters.ip_filters[0].ip_address)) {
|
if (strlen(value) >= sizeof(filters.ip_filters[0].ip_address)) {
|
||||||
printf("WARNUNG: IP address too long: %s\n", value);
|
printf("WARNING: IP-Adresse zu lang: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setzen des Filters
|
||||||
strcpy(filters.ip_filters[filters.ip_count].ip_address, value);
|
strcpy(filters.ip_filters[filters.ip_count].ip_address, value);
|
||||||
filters.ip_filters[filters.ip_count].mode = mode;
|
filters.ip_filters[filters.ip_count].mode = mode;
|
||||||
filters.ip_count++;
|
filters.ip_count++;
|
||||||
|
|
||||||
printf("Added IP filter: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
printf("DEBUG: IP-Adressfilter hinzugefügt: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gleiche Mechanik wie bei IP-Adresse
|
||||||
void add_method_filter(const char* value, filter_mode_t mode) {
|
void add_method_filter(const char* value, filter_mode_t mode) {
|
||||||
if (filters.method_count >= MAX_FILTERS) {
|
if (filters.method_count >= MAX_FILTERS) {
|
||||||
printf("WARNUNG: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
printf("WARNING: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(value) >= sizeof(filters.method_filters[0].pattern)) {
|
if (strlen(value) >= sizeof(filters.method_filters[0].pattern)) {
|
||||||
printf("WARNUNG: Method pattern too long: %s\n", value);
|
printf("WARNING: Methoden-Filterwert zu lang: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2275,17 +2282,18 @@ void add_method_filter(const char* value, filter_mode_t mode) {
|
|||||||
filters.method_filters[filters.method_count].mode = mode;
|
filters.method_filters[filters.method_count].mode = mode;
|
||||||
filters.method_count++;
|
filters.method_count++;
|
||||||
|
|
||||||
printf("Added method filter: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
printf("DEBUG: Methoden-Filter hinzugefügt: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gleiche Mechanik wie bei IP-Adresse
|
||||||
void add_useragent_filter(const char* value, filter_mode_t mode) {
|
void add_useragent_filter(const char* value, filter_mode_t mode) {
|
||||||
if (filters.user_agent_count >= MAX_FILTERS) {
|
if (filters.user_agent_count >= MAX_FILTERS) {
|
||||||
printf("WARNUNG: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
printf("WARNING: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(value) >= sizeof(filters.user_agent_filters[0].pattern)) {
|
if (strlen(value) >= sizeof(filters.user_agent_filters[0].pattern)) {
|
||||||
printf("WARNUNG: User agent pattern too long: %s\n", value);
|
printf("WARNING: User agent Filterwert zu lang: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2293,17 +2301,18 @@ void add_useragent_filter(const char* value, filter_mode_t mode) {
|
|||||||
filters.user_agent_filters[filters.user_agent_count].mode = mode;
|
filters.user_agent_filters[filters.user_agent_count].mode = mode;
|
||||||
filters.user_agent_count++;
|
filters.user_agent_count++;
|
||||||
|
|
||||||
printf("Added user agent filter: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
printf("DEBUG: User Agent Filter hinzugefügt: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gleiche Mechanik wie bei IP-Adresse
|
||||||
void add_url_filter(const char* value, filter_mode_t mode) {
|
void add_url_filter(const char* value, filter_mode_t mode) {
|
||||||
if (filters.url_count >= MAX_FILTERS) {
|
if (filters.url_count >= MAX_FILTERS) {
|
||||||
printf("WARNUNG: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
printf("WARNING: MAX_FILTERS überschritten, ignoriere: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(value) >= sizeof(filters.url_filters[0].pattern)) {
|
if (strlen(value) >= sizeof(filters.url_filters[0].pattern)) {
|
||||||
printf("WARNUNG: URL pattern too long: %s\n", value);
|
printf("WARNING: URL/Payload Filterwert zu lang: %s\n", value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2311,24 +2320,24 @@ void add_url_filter(const char* value, filter_mode_t mode) {
|
|||||||
filters.url_filters[filters.url_count].mode = mode;
|
filters.url_filters[filters.url_count].mode = mode;
|
||||||
filters.url_count++;
|
filters.url_count++;
|
||||||
|
|
||||||
printf("Added URL filter: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
printf("DEBUG: URL/Payload-Filter hinzugefügt: %s%s\n", mode == FILTER_EXCLUDE ? "!" : "", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Main filter parsing function
|
// Filter-Argument Parser
|
||||||
int parse_filter_argument(const char* arg) {
|
int parse_filter_argument(const char* arg) {
|
||||||
if (!starts_with(arg, "--")) {
|
if (!starts_with(arg, "--")) {
|
||||||
return 0; // Not a filter argument
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the '=' character
|
|
||||||
const char* equals_pos = strchr(arg, '=');
|
|
||||||
if (equals_pos == NULL) {
|
|
||||||
printf("WARNUNG: Invalid filter format (missing =): %s\n", arg);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract filter type (between -- and =)
|
// = finden
|
||||||
int type_len = equals_pos - arg - 2; // -2 for the "--"
|
const char* equals_pos = strchr(arg, '=');
|
||||||
|
if (equals_pos == NULL) {
|
||||||
|
printf("WARNING: Invalid filter format (missing =): %s\n", arg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// filter-Typ parsen
|
||||||
|
int type_len = equals_pos - arg - 2; // Position anpassen,
|
||||||
char filter_type[50];
|
char filter_type[50];
|
||||||
strncpy(filter_type, arg + 2, type_len);
|
strncpy(filter_type, arg + 2, type_len);
|
||||||
filter_type[type_len] = '\0';
|
filter_type[type_len] = '\0';
|
||||||
@ -2355,10 +2364,10 @@ int parse_filter_argument(const char* arg) {
|
|||||||
filters.combination_mode = 1;
|
filters.combination_mode = 1;
|
||||||
printf("Set filter combination mode: OR\n");
|
printf("Set filter combination mode: OR\n");
|
||||||
} else {
|
} else {
|
||||||
printf("WARNUNG: Invalid mode value: %s (use 'and' or 'or')\n", values);
|
printf("WARNING: Invalid mode value: %s (use 'and' or 'or')\n", values);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printf("WARNUNG: Unknown filter type: %s\n", filter_type);
|
printf("WARNING: Unknown filter type: %s\n", filter_type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2491,7 +2500,7 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flag_export == 1 && flag_interactive == 1) {
|
if (flag_export == 1 && flag_interactive == 1) {
|
||||||
printf("FEHLER: Interaktiver Modus kann nicht mit Export-Modus kombiniert werden. Mit %c ausführen für Anleitung.", argv[0]);
|
printf("ERROR: Interaktiver Modus kann nicht mit Export-Modus kombiniert werden. Mit %c ausführen für Anleitung.", argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}else if (flag_interactive == 1) {
|
}else if (flag_interactive == 1) {
|
||||||
load_log_file(argv[1]);
|
load_log_file(argv[1]);
|
||||||
@ -2515,7 +2524,7 @@ int main(int argc, char* argv[]) {
|
|||||||
choice = handle_menu_shortcuts(choice);
|
choice = handle_menu_shortcuts(choice);
|
||||||
|
|
||||||
if (choice == -1) {
|
if (choice == -1) {
|
||||||
printf("FEHLER: Bitte geben Sie eine gültige Zahl oder Navigation ein (1-4, b, m, q)!\n");
|
printf("ERROR: Bitte geben Sie eine gültige Zahl oder Navigation ein (1-4, b, m, q)!\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2531,7 +2540,7 @@ int main(int argc, char* argv[]) {
|
|||||||
} else if (choice == -4) {
|
} else if (choice == -4) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
printf("FEHLER: Ungültige Auswahl! Bitte wählen Sie 1-4 oder b/m/q.\n");
|
printf("ERROR: Ungültige Auswahl! Bitte wählen Sie 1-4 oder b/m/q.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (flag_export == 1){
|
} else if (flag_export == 1){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user