diff --git a/CHANGELOG b/CHANGELOG index 0bb9bb1bc..84a899158 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,9 @@ o Integrated all 2nd quarter service detection fingerprint representing 415 protocols. Thanks to version detection czar Doug Hoyte for doing this. +o Cleaned up Nmap DNS reporting to be a little more useful and + concise. Thanks to Doug Hoyte for the patch. + Nmap 4.20ALPHA4 o Nmap now provides progress statistics in the XML output in verbose diff --git a/nmap_dns.cc b/nmap_dns.cc index 70438f68e..c3877035f 100644 --- a/nmap_dns.cc +++ b/nmap_dns.cc @@ -1058,6 +1058,7 @@ static void nmap_mass_rdns_core(Target **targets, int num_targets) { char *tpname; int i; bool lasttrace = false; + char spmobuf[1024]; if (o.mass_dns == false) { Target *currenths; @@ -1071,8 +1072,9 @@ static void nmap_mass_rdns_core(Target **targets, int num_targets) { if (((currenths->flags & HOST_UP) || o.resolve_all) && !o.noresolve) stat_actual++; } - SPM = new ScanProgressMeter("System DNS resolution"); - + snprintf(spmobuf, sizeof(spmobuf), "System DNS resolution of %d host%s.", num_targets, num_targets-1 ? "s" : ""); + SPM = new ScanProgressMeter(spmobuf); + for(i=0, hostI = targets; hostI < targets+num_targets; hostI++, i++) { currenths = *hostI; @@ -1151,7 +1153,8 @@ static void nmap_mass_rdns_core(Target **targets, int num_targets) { read_timeout_index = MIN(sizeof(read_timeouts)/sizeof(read_timeouts[0]), servs.size()) - 1; - SPM = new ScanProgressMeter("Parallel DNS resolution"); + snprintf(spmobuf, sizeof(spmobuf), "Parallel DNS resolution of %d host%s.", num_targets, num_targets-1 ? "s" : ""); + SPM = new ScanProgressMeter(spmobuf); while (total_reqs > 0) { timeout = deal_with_timedout_reads(); @@ -1171,7 +1174,6 @@ static void nmap_mass_rdns_core(Target **targets, int num_targets) { } SPM->endTask(NULL, NULL); - delete SPM; close_dns_servers(); @@ -1181,35 +1183,38 @@ static void nmap_mass_rdns_core(Target **targets, int num_targets) { if (cname_reqs.size() && o.debugging) log_write(LOG_STDOUT, "Performing system-dns for %d domain names that use CNAMEs\n", (int) cname_reqs.size()); - SPM = new ScanProgressMeter("System CNAME DNS resolution"); + if (cname_reqs.size()) { + snprintf(spmobuf, sizeof(spmobuf), "System CNAME DNS resolution of %d host%s.", cname_reqs.size(), cname_reqs.size()-1 ? "s" : ""); + SPM = new ScanProgressMeter(spmobuf); - for(i=0, reqI = cname_reqs.begin(); reqI != cname_reqs.end(); reqI++, i++) { - struct sockaddr_storage ss; - size_t sslen; - char hostname[MAXHOSTNAMELEN + 1] = ""; + for(i=0, reqI = cname_reqs.begin(); reqI != cname_reqs.end(); reqI++, i++) { + struct sockaddr_storage ss; + size_t sslen; + char hostname[MAXHOSTNAMELEN + 1] = ""; - if (keyWasPressed()) - SPM->printStats((double) i / cname_reqs.size(), NULL); + if (keyWasPressed()) + SPM->printStats((double) i / cname_reqs.size(), NULL); - tpreq = *reqI; + tpreq = *reqI; - if (tpreq->targ->TargetSockAddr(&ss, &sslen) != 0) - fatal("Failed to get target socket address."); + if (tpreq->targ->TargetSockAddr(&ss, &sslen) != 0) + fatal("Failed to get target socket address."); + + if (getnameinfo((struct sockaddr *)&ss, sslen, hostname, + sizeof(hostname), NULL, 0, NI_NAMEREQD) == 0) { + stat_ok++; + stat_cname++; + tpreq->targ->setHostName(hostname); + } + + delete tpreq; - if (getnameinfo((struct sockaddr *)&ss, sslen, hostname, - sizeof(hostname), NULL, 0, NI_NAMEREQD) == 0) { - stat_ok++; - stat_cname++; - tpreq->targ->setHostName(hostname); } - delete tpreq; - + SPM->endTask(NULL, NULL); + delete SPM; } - SPM->endTask(NULL, NULL); - delete SPM; - cname_reqs.clear(); } @@ -1231,7 +1236,7 @@ void nmap_mass_rdns(Target **targets, int num_targets) { gettimeofday(&now, NULL); if (stat_actual > 0) { - if (o.debugging) { + if (o.debugging || o.verbose >= 3) { if (o.mass_dns) { // #: Number of DNS servers used // OK: Number of fully reverse resolved queries @@ -1247,8 +1252,6 @@ void nmap_mass_rdns(Target **targets, int num_targets) { stat_actual, TIMEVAL_MSEC_SUBTRACT(now, starttv) / 1000.0, stat_ok, stat_actual - stat_ok); } - } else if (o.verbose) { - log_write(LOG_STDOUT, "DNS resolution of %d IPs took %.2fs.\n", stat_actual, TIMEVAL_MSEC_SUBTRACT(now, starttv) / 1000.0); } }