diff --git a/NmapOps.cc b/NmapOps.cc index 68aad37e4..806724c26 100644 --- a/NmapOps.cc +++ b/NmapOps.cc @@ -347,6 +347,7 @@ void NmapOps::Initialize() { gettimeofday(&start_time, NULL); pTrace = vTrace = false; reason = false; + show_ttl = false; adler32 = false; if (datadir) free(datadir); datadir = NULL; diff --git a/NmapOps.h b/NmapOps.h index 577efbf64..88ad48d97 100644 --- a/NmapOps.h +++ b/NmapOps.h @@ -367,6 +367,7 @@ class NmapOps { bool traceroute; bool reason; + bool show_ttl; bool adler32; FILE *excludefd; char *exclude_spec; diff --git a/nmap.cc b/nmap.cc index 5ba71fc92..20c33e4ac 100644 --- a/nmap.cc +++ b/nmap.cc @@ -1465,6 +1465,9 @@ void apply_delayed_options() { if (o.verbose > 1) o.reason = true; + if (o.verbose && o.reason) + o.show_ttl = true; + // ISO 8601 date/time -- http://www.cl.cam.ac.uk/~mgk25/iso-time.html if (strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M %Z", local_time) <= 0) fatal("Unable to properly format time"); diff --git a/output.cc b/output.cc index d209b52f0..f1ca2efc3 100644 --- a/output.cc +++ b/output.cc @@ -554,6 +554,7 @@ void printportoutput(Target *currenths, PortList *plist) { int servicecol = -1; // service or protocol name int versioncol = -1; int reasoncol = -1; + int ttlcol = -1; int colno = 0; unsigned int rowno; int numrows; @@ -666,6 +667,8 @@ void printportoutput(Target *currenths, PortList *plist) { servicecol = colno++; if (o.reason) reasoncol = colno++; + if (o.show_ttl) + ttlcol = colno++; if (o.servicescan) versioncol = colno++; @@ -694,6 +697,8 @@ void printportoutput(Target *currenths, PortList *plist) { Tbl->addItem(0, versioncol, false, "VERSION", 7); if (reasoncol > 0) Tbl->addItem(0, reasoncol, false, "REASON", 6); + if (ttlcol > 0) + Tbl->addItem(0, ttlcol, false, "TTL", 3); log_write(LOG_MACHINE, "\t%s: ", (o.ipprotscan) ? "Protocols" : "Ports"); @@ -708,6 +713,8 @@ void printportoutput(Target *currenths, PortList *plist) { first = 0; if (o.reason) Tbl->addItem(rowno, reasoncol, true, port_reason_str(current->reason)); + if (o.show_ttl) + Tbl->addItemFormatted(rowno, ttlcol, false, "%d", current->reason.ttl); state = statenum2str(current->state); proto = nmap_getprotbynum(current->portno); Snprintf(portinfo, sizeof(portinfo), "%s", proto ? proto->p_name : "unknown"); @@ -768,6 +775,8 @@ void printportoutput(Target *currenths, PortList *plist) { Tbl->addItem(rowno, servicecol, true, serviceinfo); if (o.reason) Tbl->addItem(rowno, reasoncol, true, port_reason_str(current->reason)); + if (o.show_ttl) + Tbl->addItemFormatted(rowno, ttlcol, false, "%d", current->reason.ttl); sd.populateFullVersionString(fullversion, sizeof(fullversion)); if (*fullversion && versioncol > 0) @@ -1476,6 +1485,8 @@ void write_host_status(Target *currenths) { log_write(LOG_PLAIN, "Host is up"); if (o.reason) log_write(LOG_PLAIN, ", %s", target_reason_str(currenths)); + if (o.show_ttl) + log_write(LOG_PLAIN, " TTL %d", currenths->reason.ttl); if (currenths->to.srtt != -1) log_write(LOG_PLAIN, " (%ss latency)", num_to_string_sigdigits(currenths->to.srtt / 1000000.0, 2));