diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2023-11-11 19:06:48 +0100 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2023-11-11 19:16:07 +0100 |
commit | 4920b2a4be62b85b6355278fe0d63637bddb624f (patch) | |
tree | 1dfad91b7a159261ff99334a6c8afa7c268c807e /examples | |
parent | 8ebaccc27d779e981b500e80b69f62396dcaa0ca (diff) |
Use c-captured within `test/run_tests.sh`.
* Some logging related modifications were required to achieve this.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/c-captured/c-captured.c | 151 |
1 files changed, 82 insertions, 69 deletions
diff --git a/examples/c-captured/c-captured.c b/examples/c-captured/c-captured.c index 14457a175..338125b6f 100644 --- a/examples/c-captured/c-captured.c +++ b/examples/c-captured/c-captured.c @@ -11,7 +11,6 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <syslog.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/types.h> @@ -141,7 +140,7 @@ static int pcap_open_or_append(int packet_datalink, if (*pd == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "pcap error %s", pcap_geterr(*p)); + logger(1, "pcap error %s", pcap_geterr(*p)); pcap_close(*p); return 1; } @@ -175,13 +174,13 @@ static void decode_base64(pcap_dumper_t * const pd, } else { - syslog(LOG_DAEMON | LOG_ERR, "%s", "BUG: Can not decode base64 packet."); + logger(1, "%s", "BUG: Can not decode base64 packet."); return; } if (nDPIsrvd_base64decode(base64_packet, base64_packet_size, pkt_buf, &pkt_buf_len) != 0 || pkt_buf_len == 0) { - syslog(LOG_DAEMON | LOG_ERR, "packet base64 decode failed (%zu bytes): %s", base64_packet_size, base64_packet); + logger(1, "packet base64 decode failed (%zu bytes): %s", base64_packet_size, base64_packet); } else { @@ -485,7 +484,7 @@ static int packet_write_pcap_file(struct global_user_data const * const global_u if (utarray_len(pd_array) == 0) { - syslog(LOG_DAEMON, "Can not dump packets to pcap; packet array empty"); + logger(0, "Can not dump packets to pcap; packet array empty"); return 1; } @@ -501,7 +500,7 @@ static int packet_write_pcap_file(struct global_user_data const * const global_u char filename[PATH_MAX]; if (packet_generate_pcap_filename(filename, sizeof(filename), packet_datalink) == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "%s", "Internal error. Could not generate PCAP filename, exit .."); + logger(1, "%s", "Internal error. Could not generate PCAP filename, exit .."); return 1; } @@ -509,7 +508,7 @@ static int packet_write_pcap_file(struct global_user_data const * const global_u pcap_dumper_t * pd = NULL; if (pcap_open_or_append(packet_datalink, filename, &p, &pd) != 0) { - syslog(LOG_DAEMON | LOG_ERR, "Can not dump packets to pcap; file open/append failed"); + logger(1, "Can not dump packets to pcap; file open/append failed"); return 1; } @@ -564,13 +563,13 @@ static int flow_write_pcap_file(struct flow_user_data const * const flow_user, c if (utarray_len(pd_array) == 0) { - syslog(LOG_DAEMON | LOG_ERR, "Can not dump flow packets to pcap; flow packet array empty"); + logger(1, "Can not dump flow packets to pcap; flow packet array empty"); return 0; } if (pcap_open_or_append(packet_datalink, filename, &p, &pd) != 0) { - syslog(LOG_DAEMON | LOG_ERR, "Can not dump flow packets to pcap; file open/append failed"); + logger(1, "Can not dump flow packets to pcap; file open/append failed"); return 0; } @@ -619,26 +618,26 @@ static enum nDPIsrvd_conversion_return perror_ull(enum nDPIsrvd_conversion_retur break; case CONVERISON_KEY_NOT_FOUND: - syslog(LOG_DAEMON | LOG_ERR, "%s: Key not found.", prefix); + logger(1, "%s: Key not found.", prefix); break; case CONVERSION_NOT_A_NUMBER: - syslog(LOG_DAEMON | LOG_ERR, "%s: Not a valid number.", prefix); + logger(1, "%s: Not a valid number.", prefix); break; case CONVERSION_RANGE_EXCEEDED: - syslog(LOG_DAEMON | LOG_ERR, "%s: Number too large.", prefix); + logger(1, "%s: Number too large.", prefix); break; default: - syslog(LOG_DAEMON | LOG_ERR, "Internal error, invalid conversion return value."); + logger(1, "Internal error, invalid conversion return value."); break; } return retval; } -static void syslog_event(struct nDPIsrvd_socket * const sock, - struct nDPIsrvd_flow * const flow, - char const * const event_name) +static void log_event(struct nDPIsrvd_socket * const sock, + struct nDPIsrvd_flow * const flow, + char const * const event_name) { struct nDPIsrvd_json_token const * const src_ip = TOKEN_GET_SZ(sock, "src_ip"); struct nDPIsrvd_json_token const * const dst_ip = TOKEN_GET_SZ(sock, "dst_ip"); @@ -653,7 +652,7 @@ static void syslog_event(struct nDPIsrvd_socket * const sock, if (src_ip == NULL || dst_ip == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "Flow %llu: Missing essential source/destination IP address.", flow->id_as_ull); + logger(1, "Flow %llu: Missing essential source/destination IP address.", flow->id_as_ull); } else { @@ -677,18 +676,35 @@ static void syslog_event(struct nDPIsrvd_socket * const sock, } } - syslog(LOG_DAEMON | LOG_ERR, - "Flow %llu %s: %.*s %.*s%s -> %.*s%s", - flow->id_as_ull, - event_name, - (l4_proto_str != NULL ? (int)l4_proto_len : na_len), - (l4_proto_str != NULL ? l4_proto_str : na), - (src_ip_str != NULL ? (int)src_ip_len : na_len), - (src_ip_str != NULL ? src_ip_str : na), - src_port_str, - (dst_ip_str != NULL ? (int)dst_ip_len : na_len), - (dst_ip_str != NULL ? dst_ip_str : na), - dst_port_str); + if (is_console_logger_enabled() != 0) + { + printf("Flow %llu %s: %.*s %.*s%s -> %.*s%s\n", + flow->id_as_ull, + event_name, + (l4_proto_str != NULL ? (int)l4_proto_len : na_len), + (l4_proto_str != NULL ? l4_proto_str : na), + (src_ip_str != NULL ? (int)src_ip_len : na_len), + (src_ip_str != NULL ? src_ip_str : na), + src_port_str, + (dst_ip_str != NULL ? (int)dst_ip_len : na_len), + (dst_ip_str != NULL ? dst_ip_str : na), + dst_port_str); + } + else + { + logger(0, + "Flow %llu %s: %.*s %.*s%s -> %.*s%s", + flow->id_as_ull, + event_name, + (l4_proto_str != NULL ? (int)l4_proto_len : na_len), + (l4_proto_str != NULL ? l4_proto_str : na), + (src_ip_str != NULL ? (int)src_ip_len : na_len), + (src_ip_str != NULL ? src_ip_str : na), + src_port_str, + (dst_ip_str != NULL ? (int)dst_ip_len : na_len), + (dst_ip_str != NULL ? dst_ip_str : na), + dst_port_str); + } } static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_socket * const sock, @@ -708,17 +724,17 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock if (utarray_packets_init(global_user) == 0) { - syslog(LOG_DAEMON | LOG_ERR, "Memory allocation for packet data failed."); + logger(1, "Memory allocation for packet data failed."); return CALLBACK_ERROR; } if (TOKEN_GET_SZ(sock, "error_event_name") != NULL) { - syslog(LOG_DAEMON | LOG_ERR, "Received an error event for packet id %llu.", packet_id); + logger(1, "Received an error event for packet id %llu.", packet_id); if (TOKEN_GET_SZ(sock, "error_event_id") == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "Missing error event id."); + logger(1, "Missing error event id."); return CALLBACK_ERROR; } @@ -727,28 +743,26 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock struct packet_data pd = {.error_event_id = error_event_id, .packet_id = packet_id}; if (utarray_packets_add(global_user, &pd) == 0) { - syslog(LOG_DAEMON | LOG_ERR, "Could not add packet to array with id %llu.", packet_id); + logger(1, "Could not add packet to array with id %llu.", packet_id); return CALLBACK_ERROR; } } else if (TOKEN_VALUE_EQUALS_SZ(sock, TOKEN_GET_SZ(sock, "packet_event_name"), "packet") != 0) { - syslog(LOG_DAEMON | LOG_ERR, "Received an packet event for packet id %llu.", packet_id); + logger(1, "Received an packet event for packet id %llu.", packet_id); if (capture_mode != 0) { struct packet_data * const pd = utarray_packets_get(global_user, packet_id); if (pd == NULL) { - syslog(LOG_DAEMON | LOG_ERR, - "Received an packet event w/o a previous error event for packet id %llu.", - packet_id); + logger(1, "Received an packet event w/o a previous error event for packet id %llu.", packet_id); return CALLBACK_OK; } if (pd->packet_id != packet_id) { - syslog(LOG_DAEMON | LOG_ERR, + logger(1, "Received a packet event with a different packet id then the one seen in the error event: " "%llu != %llu.", packet_id, @@ -759,8 +773,8 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock struct nDPIsrvd_json_token const * const pkt = TOKEN_GET_SZ(sock, "pkt"); if (pkt == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "%s", "No packet data available."); - syslog(LOG_DAEMON | LOG_ERR, + logger(1, "%s", "No packet data available."); + logger(1, "JSON String: '%.*s'", nDPIsrvd_json_buffer_length(sock), nDPIsrvd_json_buffer_string(sock)); @@ -785,7 +799,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock if (packet_write_pcap_file(global_user) != 0) { - syslog(LOG_DAEMON | LOG_ERR, "%s", "Could not dump non-flow packet data"); + logger(1, "%s", "Could not dump non-flow packet data"); return CALLBACK_OK; } } @@ -813,17 +827,14 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock struct nDPIsrvd_json_token const * const pkt = TOKEN_GET_SZ(sock, "pkt"); if (pkt == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "%s", "No packet data available."); - syslog(LOG_DAEMON | LOG_ERR, - "JSON String: '%.*s'", - nDPIsrvd_json_buffer_length(sock), - nDPIsrvd_json_buffer_string(sock)); + logger(1, "%s", "No packet data available."); + logger(1, "JSON String: '%.*s'", nDPIsrvd_json_buffer_length(sock), nDPIsrvd_json_buffer_string(sock)); return CALLBACK_OK; } if (utarray_flow_packets_init(flow_user) == 0) { - syslog(LOG_DAEMON | LOG_ERR, "%s", "Memory allocation for captured packets failed."); + logger(1, "%s", "Memory allocation for captured packets failed."); return CALLBACK_ERROR; } @@ -840,7 +851,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock .base64_packet_const = nDPIsrvd_get_token_value(sock, pkt)}; if (utarray_flow_packets_add(flow_user, &pd) == 0) { - syslog(LOG_DAEMON | LOG_ERR, "%s", "Memory allocation to add a captured packet failed."); + logger(1, "%s", "Memory allocation to add a captured packet failed."); return CALLBACK_ERROR; } } @@ -930,21 +941,20 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock if (logging_mode != 0) { if (flow_user->guessed != 0) - syslog_event(sock, flow, "guessed"); + log_event(sock, flow, "guessed"); if (flow_user->detected == 0) - syslog_event(sock, flow, "not-detected"); + log_event(sock, flow, "not-detected"); if (flow_user->risky != 0) - syslog_event(sock, flow, "risky"); + log_event(sock, flow, "risky"); if (flow_user->midstream != 0) - syslog_event(sock, flow, "midstream"); + log_event(sock, flow, "midstream"); } - if (flow_user->packets == NULL || flow_user->flow_max_packets == 0 || - utarray_len(flow_user->packets) == 0) + if (flow_user->packets == NULL || flow_user->flow_max_packets == 0 || utarray_len(flow_user->packets) == 0) { if (logging_mode != 0) { - syslog(LOG_DAEMON | LOG_ERR, "Flow %llu: No packets captured.", flow->id_as_ull); + logger(0, "Flow %llu: No packets captured.", flow->id_as_ull); } } else if (capture_mode != 0) @@ -955,7 +965,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock char pcap_filename[PATH_MAX]; if (flow_generate_pcap_filename(flow_user, pcap_filename, sizeof(pcap_filename)) == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "%s", "Internal error. Could not generate PCAP filename, exit .."); + logger(1, "%s", "Internal error. Could not generate PCAP filename, exit .."); return CALLBACK_ERROR; } #ifdef VERBOSE @@ -963,7 +973,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock #endif if (flow_write_pcap_file(flow_user, pcap_filename) != 0) { - syslog(LOG_DAEMON | LOG_ERR, "Could not dump packet data to pcap file %s", pcap_filename); + logger(1, "Could not dump packet data to pcap file %s", pcap_filename); return CALLBACK_OK; } } @@ -1012,7 +1022,7 @@ static void nDPIsrvd_write_flow_info_cb(struct nDPIsrvd_socket const * sock, flow_user->flow_tot_l4_payload_len, flow_user->packets != NULL ? utarray_len(flow_user->packets) : 0); - syslog(LOG_DAEMON, + logger(0, "[Flow %4llu][ptr: " #ifdef __LP64__ "0x%016llx" @@ -1071,8 +1081,9 @@ static void print_usage(char const * const arg0) { static char const usage[] = "Usage: %s " - "[-d] [-p pidfile] [-s host] [-r rotate-every-n-seconds]\n" + "[-c] [-d] [-p pidfile] [-s host] [-r rotate-every-n-seconds]\n" "\t \t[-u user] [-g group] [-D dir] [-G] [-U] [-R risk] [-M]\n\n" + "\t-c\tLog all messages to stdout/stderr instead of syslog.\n" "\t-d\tForking into background after initialization.\n" "\t-p\tWrite the daemon PID to the given file path.\n" "\t-s\tDestination where nDPIsrvd is listening on.\n" @@ -1112,10 +1123,13 @@ static int parse_options(int argc, char ** argv) { int opt; - while ((opt = getopt(argc, argv, "hdp:s:r:u:g:lLD:GUR:ME")) != -1) + while ((opt = getopt(argc, argv, "hcdp:s:r:u:g:lLD:GUR:ME")) != -1) { switch (opt) { + case 'c': + enable_console_logger(); + break; case 'd': daemonize_enable(); break; @@ -1272,21 +1286,21 @@ static int mainloop(void) } if (read_ret == READ_TIMEOUT) { - syslog(LOG_DAEMON, + logger(0, "No data received during the last %llu second(s).\n", (long long unsigned int)sock->read_timeout.tv_sec); continue; } if (read_ret != READ_OK) { - syslog(LOG_DAEMON | LOG_ERR, "Could not read from socket: %s", nDPIsrvd_enum_to_string(read_ret)); + logger(1, "Could not read from socket: %s", nDPIsrvd_enum_to_string(read_ret)); break; } enum nDPIsrvd_parse_return parse_ret = nDPIsrvd_parse_all(sock); if (parse_ret != PARSE_NEED_MORE_DATA) { - syslog(LOG_DAEMON | LOG_ERR, "Could not parse json string: %s", nDPIsrvd_enum_to_string(parse_ret)); + logger(1, "Could not parse json string: %s", nDPIsrvd_enum_to_string(parse_ret)); break; } } @@ -1321,8 +1335,8 @@ int main(int argc, char ** argv) return 1; } - printf("Recv buffer size: %u\n", NETWORK_BUFFER_MAX_SIZE); - printf("Connecting to `%s'..\n", serv_optarg); + logger(0, "Recv buffer size: %u\n", NETWORK_BUFFER_MAX_SIZE); + logger(0, "Connecting to `%s'..\n", serv_optarg); if (nDPIsrvd_connect(sock) != CONNECT_OK) { @@ -1340,18 +1354,17 @@ int main(int argc, char ** argv) { return 1; } - openlog("nDPIsrvd-captured", LOG_CONS, LOG_DAEMON); errno = 0; if (user != NULL && change_user_group(user, group, pidfile, datadir /* :D */, NULL) != 0) { if (errno != 0) { - syslog(LOG_DAEMON | LOG_ERR, "Change user/group failed: %s", strerror(errno)); + logger(1, "Change user/group failed: %s", strerror(errno)); } else { - syslog(LOG_DAEMON | LOG_ERR, "Change user/group failed."); + logger(1, "Change user/group failed."); } return 1; } @@ -1370,7 +1383,7 @@ int main(int argc, char ** argv) utarray_packets_free((struct global_user_data *)sock->global_user_data); nDPIsrvd_socket_free(&sock); daemonize_shutdown(pidfile); - closelog(); + shutdown_logging(); return retval; } |