From 15840e179365ed788e3e77c792c1bde5a25a6a33 Mon Sep 17 00:00:00 2001 From: gio Date: Thu, 30 Jul 2015 06:27:13 +0000 Subject: [PATCH] Move sockadd_storage helpers functions to appropriate files --- nbase/nbase_ipv6.h | 2 ++ nbase/nbase_misc.c | 42 +++++++++++++++++++++++++++++ nmap_dns.cc | 66 ++++++++++++---------------------------------- 3 files changed, 61 insertions(+), 49 deletions(-) diff --git a/nbase/nbase_ipv6.h b/nbase/nbase_ipv6.h index 7fd16f660..7737b88bb 100644 --- a/nbase/nbase_ipv6.h +++ b/nbase/nbase_ipv6.h @@ -271,5 +271,7 @@ int getaddrinfo(const char *node, const char *service, const char *gai_strerror(int errcode); #endif +int sockaddr_storage_inet_pton(const char * ip_str, struct sockaddr_storage * addr); +const char *sockaddr_storage_iptop(const struct sockaddr_storage * addr, char * dst); #endif /* NBASE_IPV6_H */ diff --git a/nbase/nbase_misc.c b/nbase/nbase_misc.c index cd5346532..12ecc9e60 100644 --- a/nbase/nbase_misc.c +++ b/nbase/nbase_misc.c @@ -910,3 +910,45 @@ char *executable_path(const char *argv0) { return path; } + +int sockaddr_storage_inet_pton(const char * ip_str, struct sockaddr_storage * addr) +{ +#if HAVE_IPV6 + struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) addr; + if ( 1 == inet_pton(AF_INET6, ip_str, &(addrv6p->sin6_addr)) ) + { + addr->ss_family = AF_INET6; + return 1; + } +#endif // HAVE_IPV6 + + struct sockaddr_in * addrv4p = (struct sockaddr_in *) addr; + if ( 1 == inet_pton(AF_INET, ip_str, &(addrv4p->sin_addr)) ) + { + addr->ss_family = AF_INET; + return 1; + } + + return 0; +} + +const char *sockaddr_storage_iptop(const struct sockaddr_storage * addr, char * dst) +{ + switch (addr->ss_family){ + case AF_INET: + { + const struct sockaddr_in * ipv4_ptr = (const struct sockaddr_in *) addr; + return inet_ntop(addr->ss_family, &(ipv4_ptr->sin_addr), dst, INET_ADDRSTRLEN); + } +#if HAVE_IPV6 + case AF_INET6: + { + const struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) addr; + return inet_ntop(addr->ss_family, &(addrv6p->sin6_addr), dst, INET6_ADDRSTRLEN); + } +#endif + default: + { + return NULL; + }} +} diff --git a/nmap_dns.cc b/nmap_dns.cc index b201ab3ed..a6a665c73 100644 --- a/nmap_dns.cc +++ b/nmap_dns.cc @@ -289,52 +289,6 @@ struct request { u16 id; }; -std::string sockaddr_storage_iptostring(const struct sockaddr_storage & addr) -{ - std::string output; - - switch (addr.ss_family){ - case AF_INET: - { - const struct sockaddr_in *ipv4_ptr = (const struct sockaddr_in *) &addr; - output = inet_ntoa(ipv4_ptr->sin_addr); - break; - } - case AF_INET6: - { - char addrStr[INET6_ADDRSTRLEN+1]; - struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) &addr; - inet_ntop(addr.ss_family, &(addrv6p->sin6_addr), addrStr, INET6_ADDRSTRLEN); - output = addrStr; - break; - } - default: - { - output = "INVALID_IP"; - }} - - return output; -} - -int sockaddr_storage_inet_pton(const char * ip_str, struct sockaddr_storage * addr) -{ - struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) addr; - struct sockaddr_in * addrv4p = (struct sockaddr_in *) addr; - - if ( 1 == inet_pton(AF_INET6, ip_str, &(addrv6p->sin6_addr)) ) - { - addr->ss_family = AF_INET6; - return 1; - } - else if ( 1 == inet_pton(AF_INET, ip_str, &(addrv4p->sin_addr)) ) - { - addr->ss_family = AF_INET; - return 1; - } - - return 0; -} - class HostElem { public: @@ -530,7 +484,10 @@ public: case AF_INET: { ptr.clear(); - std::string ipv4 = sockaddr_storage_iptostring(ip); + char ipv4_c[INET_ADDRSTRLEN]; + if(!sockaddr_storage_iptop(&ip, ipv4_c)) return false; + + std::string ipv4 = ipv4_c; std::string octet; for (std::string::const_reverse_iterator c=ipv4.rbegin(); c != ipv4.rend(); ++c) if((*c)=='.') @@ -1261,7 +1218,13 @@ static void read_evt_handler(nsock_pool nsp, nsock_event evt, void *) { if (process_result(ip, ptr->value, ACTION_FINISHED, p.id)) { if (o.debugging >= TRACE_DEBUG_LEVEL) - log_write(LOG_STDOUT, "mass_rdns: OK MATCHED <%s> to <%s>\n", sockaddr_storage_iptostring(ip).c_str(), ptr->value.c_str()); + { + char ipstr[INET6_ADDRSTRLEN]; + sockaddr_storage_iptop(&ip, ipstr); + log_write(LOG_STDOUT, "mass_rdns: OK MATCHED <%s> to <%s>\n", + ipstr, + ptr->value.c_str()); + } output_summary(); stat_ok++; } @@ -1272,7 +1235,12 @@ static void read_evt_handler(nsock_pool nsp, nsock_event evt, void *) { sockaddr_storage ip; if(DNS::Factory::ptrToIp(a.name, ip)) { - if (o.debugging >= TRACE_DEBUG_LEVEL) log_write(LOG_STDOUT, "mass_rdns: CNAME found for <%s>\n", sockaddr_storage_iptostring(ip).c_str()); + if (o.debugging >= TRACE_DEBUG_LEVEL) + { + char ipstr[INET6_ADDRSTRLEN]; + sockaddr_storage_iptop(&ip, ipstr); + log_write(LOG_STDOUT, "mass_rdns: CNAME found for <%s>\n", ipstr); + } process_result(ip, "", ACTION_CNAME_LIST, p.id); } break;