The attached patch (/nmap-exp/kris SVN r4583) fixes a "bug" in the
output of --traceroute.
A ScanProgressMeter (SPM) is made in Traceroute::Traceroute(), causing a
"Initiating Traceroute on ..." to be printed on stdout (and <taskbegin
task="Traceroute" ...> for XML). SPM->endTask() is never called, so no
"Completed Traceroute ..." or "<taskend ...>" is printed.
If I did a --traceroute for google.com and kernel.org in the same scan,
I would get "Initiating Traceroute ..." once (when it should be twice),
with no "Completed ..." message. And the "xxx.xxx.xxx.xxx: guessing hop
distance at ..." messages for the different hosts are all together with
no separation.
This just reorganizes the SPM stuff. It's all now local to
Traceroute::trace() instead of a few different places. And now there's
a <taskend ..> for the <taskbegin ..>'s, and "Completed Traceroute ..."
for the "Initiating ..."'s. The "guessing hop distance" lines are
printed inside the correct "Initiating" and "Completed" lines.
Whew.. that's a lot of words for a small patch :)
It works great for me, so lemme know what you think!
Thanks,
Kris Katterjohn
Index: traceroute.h
===================================================================
--- traceroute.h (revision 4582)
+++ traceroute.h (revision 4583)
@@ -317,7 +317,6 @@
struct scan_info scaninfo;
- ScanProgressMeter *SPM;
Target **hops;
pcap_t *pd;
eth_t *ethsd;
Index: traceroute.cc
===================================================================
--- traceroute.cc (revision 4582)
+++ traceroute.cc (revision 4583)
@@ -218,7 +218,6 @@
/* rely on each group using the same device */
pd = my_pcap_open_live (device_name, 100, o.spoofsource ? 1 : 0, 2);
- SPM = new ScanProgressMeter ("Traceroute");
scaninfo.initial_proto = IPPROTO_IP;
scaninfo.open_response = 0;
@@ -304,8 +303,6 @@
free(hops);
for (; it != TraceGroups.end (); ++it)
delete (it->second);
- assert(SPM != NULL);
- delete (SPM);
if (ethsd)
ethsd = NULL;
close (fd);
@@ -789,6 +786,7 @@
TraceProbe *tp = NULL;
TraceGroup *tg = NULL;
Target *t = NULL;
+ ScanProgressMeter *SPM;
u16 total_size, total_complete;
if (o.af () == AF_INET6) {
@@ -816,6 +814,8 @@
* legitimate to trace to */
sendTTLProbes (Targets, valid_targets);
+ SPM = new ScanProgressMeter ("Traceroute");
+
while (!readTraceResponses ()) {
for (targ = valid_targets.begin (); targ != valid_targets.end (); ++targ) {
t = *targ;
@@ -861,6 +861,8 @@
swap (total_complete, total_size);
SPM->printStats (MIN ((double) total_complete / total_size, 0.99), NULL);
}
+ SPM->endTask(NULL, NULL);
+ delete (SPM);
}
/* Resolves traceroute hops through nmaps
_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org
Received on Mar 17 2007