diff options
author | Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> | 2024-04-08 10:24:51 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-08 10:24:51 +0200 |
commit | 1b3ef7d7b2dde9d58cb217d3d7fb6b14d6281153 (patch) | |
tree | 868ce2beb4ba9dbfbe40dd05c9a1b200e367439c /example/ndpiReader.c | |
parent | f5905a62c7fc1922d0b49e9399d56e8cfee69516 (diff) |
STUN: improve extraction of Mapped-Address metadata (#2370)
Enable parsing of Mapped-Address attribute for all STUN flows: that
means that STUN classification might require more packets.
Add a configuration knob to enable/disable this feature.
Note that we can have (any) STUN metadata also for flows *not*
classified as STUN (because of DTLS).
Add support for ipv6.
Restore the correct extra dissection logic for Telegram flows.
Diffstat (limited to 'example/ndpiReader.c')
-rw-r--r-- | example/ndpiReader.c | 49 |
1 files changed, 11 insertions, 38 deletions
diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 16c88e947..1f4767ce1 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -1457,38 +1457,6 @@ static void parseOptions(int argc, char **argv) { /* ********************************** */ -/** - * @brief A faster replacement for inet_ntoa(). - */ -char* intoaV4(u_int32_t addr, char* buf, u_int16_t bufLen) { - char *cp; - int n; - - cp = &buf[bufLen]; - *--cp = '\0'; - - n = 4; - do { - u_int byte = addr & 0xff; - - *--cp = byte % 10 + '0'; - byte /= 10; - if(byte > 0) { - *--cp = byte % 10 + '0'; - byte /= 10; - if(byte > 0) - *--cp = byte + '0'; - } - if(n > 1) - *--cp = '.'; - addr >>= 8; - } while (--n > 0); - - return(cp); -} - -/* ********************************** */ - static char* print_cipher(ndpi_cipher_weakness c) { switch(c) { case ndpi_cipher_insecure: @@ -1903,14 +1871,19 @@ static void printFlow(u_int32_t id, struct ndpi_flow_info *flow, u_int16_t threa } } - if(flow->stun.mapped_address.ipv4 != 0) { - char buf[32]; - + if(flow->stun.mapped_address.port != 0) { + char buf[INET6_ADDRSTRLEN]; + + if(flow->stun.mapped_address.is_ipv6) { + inet_ntop(AF_INET6, &flow->stun.mapped_address.address, buf, sizeof(buf)); + } else { + inet_ntop(AF_INET, &flow->stun.mapped_address.address, buf, sizeof(buf)); + } fprintf(out, "[Mapped IP/Port: %s:%u]", - intoaV4(flow->stun.mapped_address.ipv4, buf, sizeof(buf)), - flow->stun.mapped_address.port); + buf, + flow->stun.mapped_address.port); } - + if(flow->http.url[0] != '\0') { ndpi_risk_enum risk = ndpi_validate_url(flow->http.url); |