From 18beddee4048235aa59c5f7e62d96c04751defc3 Mon Sep 17 00:00:00 2001 From: dmiller Date: Thu, 25 Apr 2024 17:12:28 +0000 Subject: [PATCH] Simplify building in-addr.arpa address string --- nmap_dns.cc | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/nmap_dns.cc b/nmap_dns.cc index 225fdd27d..8a7760d77 100644 --- a/nmap_dns.cc +++ b/nmap_dns.cc @@ -1306,27 +1306,18 @@ std::list get_dns_servers() { bool DNS::Factory::ipToPtr(const sockaddr_storage &ip, std::string &ptr) { + static const size_t maxlen = sizeof("0.0.1.1.2.2.3.3.4.4.5.5.6.6.7.7.8.8.9.9.a.a.b.b.c.c.d.d.e.e.f.f.ip6.arpa"); + ptr.reserve(maxlen); + char tmp[INET_ADDRSTRLEN]; switch (ip.ss_family) { case AF_INET: { - ptr.clear(); - char ipv4_c[INET_ADDRSTRLEN]; - if(!sockaddr_storage_iptop(&ip, ipv4_c)) return false; - - std::string ipv4 = ipv4_c; - std::string octet; - std::string::const_reverse_iterator crend = ipv4.rend(); - for (std::string::const_reverse_iterator c=ipv4.rbegin(); c != crend; ++c) - if((*c)=='.') - { - ptr += octet + "."; - octet.clear(); - } - else - octet = (*c) + octet; - - ptr += octet + IPV4_PTR_DOMAIN; - + const in_addr_t ipv4_addr = ((const sockaddr_in *) &ip)->sin_addr.s_addr; + const u8 *ipv4_c = (const u8 *)&ipv4_addr; + sprintf(tmp, "%d.%d.%d.%d", ipv4_c[3], ipv4_c[2], ipv4_c[1], ipv4_c[0]); + ptr = tmp; + ptr += IPV4_PTR_DOMAIN; + error("ipToPtr: %s => %s", inet_ntop_ez(&ip, sizeof(ip)), ptr.c_str()); break; } case AF_INET6: @@ -1336,7 +1327,6 @@ bool DNS::Factory::ipToPtr(const sockaddr_storage &ip, std::string &ptr) const u8 * ipv6 = s6.sin6_addr.s6_addr; for (short i=15; i>=0; --i) { - char tmp[3]; sprintf(tmp, "%02x", ipv6[i]); ptr += '.'; ptr += tmp[1];