From a1c6328156ffa1e3d690fa180b0395f9dcd9f52e Mon Sep 17 00:00:00 2001 From: Giuseppe Longo Date: Wed, 20 Mar 2024 18:31:42 +0100 Subject: [PATCH] output/json: check 5-tuple values prior to logging This commit enhances the JSON output by introducing a feature for conditional port logging. Now, port logging is dependent on the underlying protocol (such as TCP, UDP, or SCTP), where port information is pertinent, while it avoids unnecessary logging for protocols where a port is not utilized (e.g. ARP). Furthermore, this update ensures that IP addresses and the protocol have meaningful values set, rather than being logged as empty strings. These changes will make each log entry more precise, eliminating cases where 5-tuple fields are empty or set to zero, indicating the absence of a field. --- src/output-json.c | 22 +++++++++++++++++----- src/output-json.h | 2 ++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/output-json.c b/src/output-json.c index bd345b72c4..999c7173d1 100644 --- a/src/output-json.c +++ b/src/output-json.c @@ -566,8 +566,10 @@ void JsonAddrInfoInit(const Packet *p, enum OutputJsonLogDirection dir, JsonAddr case IPPROTO_SCTP: addr->sp = sp; addr->dp = dp; + addr->log_port = true; break; default: + addr->log_port = false; break; } @@ -830,11 +832,21 @@ JsonBuilder *CreateEveHeader(const Packet *p, enum OutputJsonLogDirection dir, JsonAddrInfoInit(p, dir, &addr_info); addr = &addr_info; } - jb_set_string(js, "src_ip", addr->src_ip); - jb_set_uint(js, "src_port", addr->sp); - jb_set_string(js, "dest_ip", addr->dst_ip); - jb_set_uint(js, "dest_port", addr->dp); - jb_set_string(js, "proto", addr->proto); + if (addr->src_ip[0] != '\0') { + jb_set_string(js, "src_ip", addr->src_ip); + } + if (addr->log_port) { + jb_set_uint(js, "src_port", addr->sp); + } + if (addr->dst_ip[0] != '\0') { + jb_set_string(js, "dest_ip", addr->dst_ip); + } + if (addr->log_port) { + jb_set_uint(js, "dest_port", addr->dp); + } + if (addr->proto[0] != '\0') { + jb_set_string(js, "proto", addr->proto); + } /* icmp */ switch (p->proto) { diff --git a/src/output-json.h b/src/output-json.h index 85502d748f..8ad1c2dd3c 100644 --- a/src/output-json.h +++ b/src/output-json.h @@ -50,6 +50,8 @@ typedef struct JsonAddrInfo_ { Port sp; Port dp; char proto[JSON_PROTO_LEN]; + // Ports are logged only when provided by the transport protocol. + bool log_port; } JsonAddrInfo; extern const JsonAddrInfo json_addr_info_zero;