1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-07 13:11:28 +00:00

Formatting in scan_engine.cc.

astyle -a -p -H -s2 -m2 scan_engine.cc

With some manual correction.
This commit is contained in:
david
2012-05-31 07:14:05 +00:00
parent a1bae1bb5f
commit c923483956

View File

@@ -247,19 +247,27 @@ public:
} }
/* not reached */ /* not reached */
} }
u16 ipid() const { return probes.IP.ipid; } u16 ipid() const {
return probes.IP.ipid;
}
u32 tcpseq() const; // TCP sequence number if protocol is TCP u32 tcpseq() const; // TCP sequence number if protocol is TCP
u32 sctpvtag() const; // SCTP vtag if protocol is SCTP u32 sctpvtag() const; // SCTP vtag if protocol is SCTP
/* Number, such as IPPROTO_TCP, IPPROTO_UDP, etc. */ /* Number, such as IPPROTO_TCP, IPPROTO_UDP, etc. */
u8 protocol() const { return mypspec.proto; } u8 protocol() const {
ConnectProbe *CP() { return probes.CP; } // if type == UP_CONNECT return mypspec.proto;
}
ConnectProbe *CP() {
return probes.CP; // if type == UP_CONNECT
}
// Arpprobe removed because not used. // Arpprobe removed because not used.
// ArpProbe *AP() { return probes.AP; } // if UP_ARP // ArpProbe *AP() { return probes.AP; } // if UP_ARP
// Returns the protocol number, such as IPPROTO_TCP, or IPPROTO_UDP, by // Returns the protocol number, such as IPPROTO_TCP, or IPPROTO_UDP, by
// reading the appropriate fields of the probespec. // reading the appropriate fields of the probespec.
/* Get general details about the probe */ /* Get general details about the probe */
const probespec *pspec() const { return &mypspec; } const probespec *pspec() const {
return &mypspec;
}
/* Returns true if the given tryno and pingseq match those within this /* Returns true if the given tryno and pingseq match those within this
probe. */ probe. */
@@ -279,7 +287,9 @@ public:
struct timeval sent; struct timeval sent;
/* Time the previous probe was sent, if this is a retransmit (tryno > 0) */ /* Time the previous probe was sent, if this is a retransmit (tryno > 0) */
struct timeval prevSent; struct timeval prevSent;
bool isPing() { return pingseq > 0; } bool isPing() {
return pingseq > 0;
}
private: private:
probespec mypspec; /* Filled in by the appropriate set* function */ probespec mypspec; /* Filled in by the appropriate set* function */
@@ -478,7 +488,9 @@ public:
necessary. Note that probes on probe_bench are not included necessary. Note that probes on probe_bench are not included
in this value. */ in this value. */
unsigned int num_probes_waiting_retransmit; unsigned int num_probes_waiting_retransmit;
unsigned int num_probes_outstanding() { return probes_outstanding.size(); } unsigned int num_probes_outstanding() {
return probes_outstanding.size();
}
/* The bench is a stock of probes (compacted into just the /* The bench is a stock of probes (compacted into just the
probespec) that have met the current maximum tryno, and are on probespec) that have met the current maximum tryno, and are on
@@ -546,7 +558,8 @@ public:
u8 ret = nxtpseq; u8 ret = nxtpseq;
if (inc) { if (inc) {
nxtpseq++; nxtpseq++;
if (nxtpseq == 0) nxtpseq++; if (nxtpseq == 0)
nxtpseq++;
} }
return ret; return ret;
} }
@@ -572,7 +585,9 @@ private:
class UltraScanInfo { class UltraScanInfo {
public: public:
UltraScanInfo(); UltraScanInfo();
UltraScanInfo(vector<Target *> &Targets, struct scan_lists *pts, stype scantype) { Init(Targets, pts, scantype); } UltraScanInfo(vector<Target *> &Targets, struct scan_lists *pts, stype scantype) {
Init(Targets, pts, scantype);
}
~UltraScanInfo(); ~UltraScanInfo();
/* Must call Init if you create object with default constructor */ /* Must call Init if you create object with default constructor */
void Init(vector<Target *> &Targets, struct scan_lists *pts, stype scantp); void Init(vector<Target *> &Targets, struct scan_lists *pts, stype scantp);
@@ -622,13 +637,19 @@ public:
double getCompletionFraction(); double getCompletionFraction();
unsigned int numIncompleteHosts() { return incompleteHosts.size(); } unsigned int numIncompleteHosts() {
return incompleteHosts.size();
}
/* Call this instead of checking for numIncompleteHosts() == 0 because it /* Call this instead of checking for numIncompleteHosts() == 0 because it
avoids a potential traversal of the list to find the size. */ avoids a potential traversal of the list to find the size. */
bool incompleteHostsEmpty() { return incompleteHosts.empty(); } bool incompleteHostsEmpty() {
return incompleteHosts.empty();
}
bool numIncompleteHostsLessThan(unsigned int n); bool numIncompleteHostsLessThan(unsigned int n);
unsigned int numInitialHosts() { return numInitialTargets; } unsigned int numInitialHosts() {
return numInitialTargets;
}
void log_overall_rates(int logt) { void log_overall_rates(int logt) {
log_write(logt, "Overall sending rates: %.2f packets / s", send_rate_meter.getOverallPacketRate(&now)); log_write(logt, "Overall sending rates: %.2f packets / s", send_rate_meter.getOverallPacketRate(&now));
@@ -691,21 +712,29 @@ static char *probespec2ascii(const probespec *pspec, char *buf, unsigned int buf
char *f; char *f;
switch (pspec->type) { switch (pspec->type) {
case PS_TCP: case PS_TCP:
if (!pspec->pd.tcp.flags) Strncpy(flagbuf, "(none)", sizeof(flagbuf)); if (!pspec->pd.tcp.flags) {
else { Strncpy(flagbuf, "(none)", sizeof(flagbuf));
} else {
f = flagbuf; f = flagbuf;
if (pspec->pd.tcp.flags & TH_SYN) *f++ = 'S'; if (pspec->pd.tcp.flags & TH_SYN)
if (pspec->pd.tcp.flags & TH_FIN) *f++ = 'F'; *f++ = 'S';
if (pspec->pd.tcp.flags & TH_RST) *f++ = 'R'; if (pspec->pd.tcp.flags & TH_FIN)
if (pspec->pd.tcp.flags & TH_PUSH) *f++ = 'P'; *f++ = 'F';
if (pspec->pd.tcp.flags & TH_ACK) *f++ = 'A'; if (pspec->pd.tcp.flags & TH_RST)
if (pspec->pd.tcp.flags & TH_URG) *f++ = 'U'; *f++ = 'R';
if (pspec->pd.tcp.flags & TH_ECE) *f++ = 'E'; /* rfc 2481/3168 */ if (pspec->pd.tcp.flags & TH_PUSH)
if (pspec->pd.tcp.flags & TH_CWR) *f++ = 'C'; /* rfc 2481/3168 */ *f++ = 'P';
if (pspec->pd.tcp.flags & TH_ACK)
*f++ = 'A';
if (pspec->pd.tcp.flags & TH_URG)
*f++ = 'U';
if (pspec->pd.tcp.flags & TH_ECE)
*f++ = 'E'; /* rfc 2481/3168 */
if (pspec->pd.tcp.flags & TH_CWR)
*f++ = 'C'; /* rfc 2481/3168 */
*f++ = '\0'; *f++ = '\0';
} }
Snprintf(buf, bufsz, "tcp to port %hu; flags: %s", pspec->pd.tcp.dport, Snprintf(buf, bufsz, "tcp to port %hu; flags: %s", pspec->pd.tcp.dport, flagbuf);
flagbuf);
break; break;
case PS_UDP: case PS_UDP:
Snprintf(buf, bufsz, "udp to port %hu", pspec->pd.udp.dport); Snprintf(buf, bufsz, "udp to port %hu", pspec->pd.udp.dport);
@@ -756,7 +785,8 @@ ConnectProbe::ConnectProbe() {
} }
ConnectProbe::~ConnectProbe() { ConnectProbe::~ConnectProbe() {
if (sd > 0) close(sd); if (sd > 0)
close(sd);
sd = -1; sd = -1;
} }
@@ -1198,7 +1228,8 @@ bool HostScanStats::sendOK(struct timeval *when) {
long tdiff; long tdiff;
if (target->timedOut(&USI->now) || completed()) { if (target->timedOut(&USI->now) || completed()) {
if (when) *when = USI->now; if (when)
*when = USI->now;
return false; return false;
} }
@@ -1226,7 +1257,9 @@ bool HostScanStats::sendOK(struct timeval *when) {
if (sdn.delayms) { if (sdn.delayms) {
if (TIMEVAL_MSEC_SUBTRACT(USI->now, lastprobe_sent) < (int) sdn.delayms) { if (TIMEVAL_MSEC_SUBTRACT(USI->now, lastprobe_sent) < (int) sdn.delayms) {
if (when) { TIMEVAL_MSEC_ADD(*when, lastprobe_sent, sdn.delayms); } if (when) {
TIMEVAL_MSEC_ADD(*when, lastprobe_sent, sdn.delayms);
}
return false; return false;
} }
} }
@@ -1234,7 +1267,8 @@ bool HostScanStats::sendOK(struct timeval *when) {
getTiming(&tmng); getTiming(&tmng);
if (tmng.cwnd >= num_probes_active + .5 && if (tmng.cwnd >= num_probes_active + .5 &&
(freshPortsLeft() || num_probes_waiting_retransmit || !retry_stack.empty())) { (freshPortsLeft() || num_probes_waiting_retransmit || !retry_stack.empty())) {
if (when) *when = USI->now; if (when)
*when = USI->now;
return true; return true;
} }
@@ -1324,7 +1358,8 @@ unsigned int HostScanStats::allowedTryno(bool *capped, bool *mayincrease) {
/* TODO: This should perhaps differ by scan type. */ /* TODO: This should perhaps differ by scan type. */
maxval = MAX(1, max_successful_tryno + 1); maxval = MAX(1, max_successful_tryno + 1);
if (maxval > (unsigned int) USI->perf.tryno_cap) { if (maxval > (unsigned int) USI->perf.tryno_cap) {
if (capped) *capped = true; if (capped)
*capped = true;
maxval = USI->perf.tryno_cap; maxval = USI->perf.tryno_cap;
tryno_mayincrease = false; /* It never exceeds the cap */ tryno_mayincrease = false; /* It never exceeds the cap */
} else if (capped) *capped = false; } else if (capped) *capped = false;
@@ -1368,9 +1403,17 @@ UltraScanInfo::~UltraScanInfo() {
} }
delete gstats; delete gstats;
delete SPM; delete SPM;
if (rawsd >= 0) { close(rawsd); rawsd = -1; } if (rawsd >= 0) {
if (pd) { pcap_close(pd); pd = NULL; } close(rawsd);
if (ethsd) { ethsd = NULL; /* NO need to eth_close it due to caching */ } rawsd = -1;
}
if (pd) {
pcap_close(pd);
pd = NULL;
}
if (ethsd) {
ethsd = NULL; /* NO need to eth_close it due to caching */
}
} }
/* Returns true if this scan is a "raw" scan. A raw scan is ont that requires a /* Returns true if this scan is a "raw" scan. A raw scan is ont that requires a
@@ -1602,8 +1645,7 @@ void UltraScanInfo::Init(vector<Target *> &Targets, struct scan_lists *pts, styp
/* Return the total number of probes that may be sent to each host. This never /* Return the total number of probes that may be sent to each host. This never
changes after initialization. */ changes after initialization. */
unsigned int UltraScanInfo::numProbesPerHost() unsigned int UltraScanInfo::numProbesPerHost() {
{
unsigned int numprobes = 0; unsigned int numprobes = 0;
if (tcp_scan) { if (tcp_scan) {
@@ -1706,7 +1748,8 @@ bool UltraScanInfo::sendOK(struct timeval *when) {
if (TIMEVAL_MSEC_SUBTRACT(lowhtime, now) < 0) if (TIMEVAL_MSEC_SUBTRACT(lowhtime, now) < 0)
lowhtime = now; lowhtime = now;
if (when) *when = lowhtime; if (when)
*when = lowhtime;
return (TIMEVAL_MSEC_SUBTRACT(lowhtime, now) == 0) ? true : false; return (TIMEVAL_MSEC_SUBTRACT(lowhtime, now) == 0) ? true : false;
} }
@@ -1837,7 +1880,8 @@ int UltraScanInfo::removeCompletedHosts() {
log_write(LOG_PLAIN, "Changing global ping host to %s.\n", hss->target->targetipstr()); log_write(LOG_PLAIN, "Changing global ping host to %s.\n", hss->target->targetipstr());
gstats->pinghost = hss; gstats->pinghost = hss;
} }
if (timedout) gstats->num_hosts_timedout++; if (timedout)
gstats->num_hosts_timedout++;
hss->target->stopTimeOutClock(&now); hss->target->stopTimeOutClock(&now);
} }
} }
@@ -1864,7 +1908,8 @@ int determineScanGroupSize(int hosts_scanned_so_far,
groupsize = MAX(1024 / (ports->tcp_count ? ports->tcp_count : 1), 64); groupsize = MAX(1024 / (ports->tcp_count ? ports->tcp_count : 1), 64);
if (ports->tcp_count > 1000 && o.timing_level <= 4) { if (ports->tcp_count > 1000 && o.timing_level <= 4) {
int quickgroupsz = 4; int quickgroupsz = 4;
if (o.timing_level == 4) quickgroupsz = 8; if (o.timing_level == 4)
quickgroupsz = 8;
if (hosts_scanned_so_far == 0) if (hosts_scanned_so_far == 0)
groupsize = quickgroupsz; // Give quick results for the very first batch groupsize = quickgroupsz; // Give quick results for the very first batch
else if (hosts_scanned_so_far == quickgroupsz && else if (hosts_scanned_so_far == quickgroupsz &&
@@ -1922,13 +1967,27 @@ static int get_next_target_probe(UltraScanInfo *USI, HostScanStats *hss,
pspec->pd.tcp.flags = o.scanflags; pspec->pd.tcp.flags = o.scanflags;
else { else {
switch (USI->scantype) { switch (USI->scantype) {
case SYN_SCAN: pspec->pd.tcp.flags = TH_SYN; break; case SYN_SCAN:
case ACK_SCAN: pspec->pd.tcp.flags = TH_ACK; break; pspec->pd.tcp.flags = TH_SYN;
case XMAS_SCAN: pspec->pd.tcp.flags = TH_FIN|TH_URG|TH_PUSH; break; break;
case NULL_SCAN: pspec->pd.tcp.flags = 0; break; case ACK_SCAN:
case FIN_SCAN: pspec->pd.tcp.flags = TH_FIN; break; pspec->pd.tcp.flags = TH_ACK;
case MAIMON_SCAN: pspec->pd.tcp.flags = TH_FIN|TH_ACK; break; break;
case WINDOW_SCAN: pspec->pd.tcp.flags = TH_ACK; break; case XMAS_SCAN:
pspec->pd.tcp.flags = TH_FIN | TH_URG | TH_PUSH;
break;
case NULL_SCAN:
pspec->pd.tcp.flags = 0;
break;
case FIN_SCAN:
pspec->pd.tcp.flags = TH_FIN;
break;
case MAIMON_SCAN:
pspec->pd.tcp.flags = TH_FIN | TH_ACK;
break;
case WINDOW_SCAN:
pspec->pd.tcp.flags = TH_ACK;
break;
default: default:
assert(0); assert(0);
break; break;
@@ -2087,10 +2146,12 @@ int HostScanStats::freshPortsLeft() {
return 0; return 0;
return USI->ports->prot_count - next_portidx; return USI->ports->prot_count - next_portidx;
} else if (USI->ping_scan_arp) { } else if (USI->ping_scan_arp) {
if (sent_arp) return 0; if (sent_arp)
return 0;
return 1; return 1;
} else if (USI->ping_scan_nd) { } else if (USI->ping_scan_nd) {
if (sent_arp) return 0; if (sent_arp)
return 0;
return 1; return 1;
} else if (USI->ping_scan) { } else if (USI->ping_scan) {
unsigned int num_probes = 0; unsigned int num_probes = 0;
@@ -2656,7 +2717,8 @@ void HostScanStats::boostScanDelay() {
/* Dismiss all probe attempts on bench -- hosts are marked down and ports will /* Dismiss all probe attempts on bench -- hosts are marked down and ports will
be set to whatever the default port state is for the scan. */ be set to whatever the default port state is for the scan. */
void HostScanStats::dismissBench() { void HostScanStats::dismissBench() {
if (probe_bench.empty()) return; if (probe_bench.empty())
return;
while (!probe_bench.empty()) { while (!probe_bench.empty()) {
if (USI->ping_scan) if (USI->ping_scan)
ultrascan_host_pspec_update(USI, this, &probe_bench.back(), HOST_DOWN); ultrascan_host_pspec_update(USI, this, &probe_bench.back(), HOST_DOWN);
@@ -2670,7 +2732,8 @@ void HostScanStats::dismissBench() {
/* Move all members of bench to retry_stack for probe retransmission */ /* Move all members of bench to retry_stack for probe retransmission */
void HostScanStats::retransmitBench() { void HostScanStats::retransmitBench() {
if (probe_bench.empty()) return; if (probe_bench.empty())
return;
/* Move all contents of probe_bench to the end of retry_stack, updating retry_stack_tries accordingly */ /* Move all contents of probe_bench to the end of retry_stack, updating retry_stack_tries accordingly */
retry_stack.insert(retry_stack.end(), probe_bench.begin(), probe_bench.end()); retry_stack.insert(retry_stack.end(), probe_bench.begin(), probe_bench.end());
@@ -2937,7 +3000,8 @@ static UltraProbe *sendConnectScanProbe(UltraScanInfo *USI, HostScanStats *hss,
CP = probe->CP(); CP = probe->CP();
/* Initiate the connection */ /* Initiate the connection */
CP->sd = socket(o.af(), SOCK_STREAM, IPPROTO_TCP); CP->sd = socket(o.af(), SOCK_STREAM, IPPROTO_TCP);
if (CP->sd == -1) pfatal("Socket creation in %s", __func__); if (CP->sd == -1)
pfatal("Socket creation in %s", __func__);
unblock_socket(CP->sd); unblock_socket(CP->sd);
init_socket(CP->sd); init_socket(CP->sd);
set_ttl(CP->sd, o.ttl); set_ttl(CP->sd, o.ttl);
@@ -2956,7 +3020,8 @@ static UltraProbe *sendConnectScanProbe(UltraScanInfo *USI, HostScanStats *hss,
hss->probeSent(0); hss->probeSent(0);
rc = connect(CP->sd, (struct sockaddr *)&sock, socklen); rc = connect(CP->sd, (struct sockaddr *)&sock, socklen);
gettimeofday(&USI->now, NULL); gettimeofday(&USI->now, NULL);
if (rc == -1) connect_errno = socket_errno(); if (rc == -1)
connect_errno = socket_errno();
PacketTrace::traceConnect(IPPROTO_TCP, (sockaddr *) &sock, socklen, rc, PacketTrace::traceConnect(IPPROTO_TCP, (sockaddr *) &sock, socklen, rc,
connect_errno, &USI->now); connect_errno, &USI->now);
/* This counts as probe being sent, so update structures */ /* This counts as probe being sent, so update structures */
@@ -3146,8 +3211,7 @@ static UltraProbe *sendNDScanProbe(UltraScanInfo *USI, HostScanStats *hss,
destination addresses and protocol. src and dst must be of the same address destination addresses and protocol. src and dst must be of the same address
family. Returns NULL on error. */ family. Returns NULL on error. */
static u8 *build_protoscan_packet(const struct sockaddr_storage *src, static u8 *build_protoscan_packet(const struct sockaddr_storage *src,
const struct sockaddr_storage *dst, u8 proto, u16 sport, u32 *packetlen) const struct sockaddr_storage *dst, u8 proto, u16 sport, u32 *packetlen) {
{
u16 icmp_ident, ipid; u16 icmp_ident, ipid;
u8 *packet; u8 *packet;
@@ -3191,8 +3255,7 @@ static u8 *build_protoscan_packet(const struct sockaddr_storage *src,
sport, o.magic_port, sport, o.magic_port,
o.extra_payload, o.extra_payload_length, packetlen); o.extra_payload, o.extra_payload_length, packetlen);
break; break;
case IPPROTO_SCTP: case IPPROTO_SCTP: {
{
struct sctp_chunkhdr_init chunk; struct sctp_chunkhdr_init chunk;
sctp_pack_chunkhdr_init(&chunk, SCTP_INIT, 0, sizeof(chunk), sctp_pack_chunkhdr_init(&chunk, SCTP_INIT, 0, sizeof(chunk),
@@ -3235,8 +3298,7 @@ static u8 *build_protoscan_packet(const struct sockaddr_storage *src,
sport, o.magic_port, sport, o.magic_port,
o.extra_payload, o.extra_payload_length, packetlen); o.extra_payload, o.extra_payload_length, packetlen);
break; break;
case IPPROTO_SCTP: case IPPROTO_SCTP: {
{
struct sctp_chunkhdr_init chunk; struct sctp_chunkhdr_init chunk;
sctp_pack_chunkhdr_init(&chunk, SCTP_INIT, 0, sizeof(chunk), sctp_pack_chunkhdr_init(&chunk, SCTP_INIT, 0, sizeof(chunk),
get_random_u32() /*itag*/, 32768, 10, 2048, get_random_u32() /*itsn*/); get_random_u32() /*itag*/, 32768, 10, 2048, get_random_u32() /*itsn*/);
@@ -3703,20 +3765,15 @@ static void retransmitProbe(UltraScanInfo *USI, HostScanStats *hss,
UltraProbe *newProbe = NULL; UltraProbe *newProbe = NULL;
if (probe->type == UltraProbe::UP_IP) { if (probe->type == UltraProbe::UP_IP) {
if (USI->prot_scan || USI->ptech.rawprotoscan) if (USI->prot_scan || USI->ptech.rawprotoscan)
newProbe = sendIPScanProbe(USI, hss, probe->pspec(), newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, 0);
probe->tryno + 1, 0);
else if (probe->protocol() == IPPROTO_TCP) { else if (probe->protocol() == IPPROTO_TCP) {
newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, 0);
0);
} else if (probe->protocol() == IPPROTO_UDP) { } else if (probe->protocol() == IPPROTO_UDP) {
newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, 0);
0);
} else if (probe->protocol() == IPPROTO_SCTP) { } else if (probe->protocol() == IPPROTO_SCTP) {
newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, 0);
0);
} else if (probe->protocol() == IPPROTO_ICMP || probe->protocol() == IPPROTO_ICMPV6) { } else if (probe->protocol() == IPPROTO_ICMP || probe->protocol() == IPPROTO_ICMPV6) {
newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, newProbe = sendIPScanProbe(USI, hss, probe->pspec(), probe->tryno + 1, 0);
0);
} else { } else {
assert(0); assert(0);
} }
@@ -3814,7 +3871,8 @@ static void doAnyOutstandingRetransmits(UltraScanInfo *USI) {
gettimeofday(&USI->now, NULL); gettimeofday(&USI->now, NULL);
if (o.debugging) { if (o.debugging) {
long tv_diff = TIMEVAL_MSEC_SUBTRACT(USI->now, tv_start); long tv_diff = TIMEVAL_MSEC_SUBTRACT(USI->now, tv_start);
if (tv_diff > 30) log_write(LOG_PLAIN, "%s took %lims\n", __func__, tv_diff); if (tv_diff > 30)
log_write(LOG_PLAIN, "%s took %lims\n", __func__, tv_diff);
} }
} }
@@ -3893,7 +3951,8 @@ static bool do_one_select_round(UltraScanInfo *USI, struct timeval *stime) {
do { do {
timeleft = TIMEVAL_MSEC_SUBTRACT(*stime, USI->now); timeleft = TIMEVAL_MSEC_SUBTRACT(*stime, USI->now);
if (timeleft < 0) timeleft = 0; if (timeleft < 0)
timeleft = 0;
fds_rtmp = USI->gstats->CSI->fds_read; fds_rtmp = USI->gstats->CSI->fds_read;
fds_wtmp = USI->gstats->CSI->fds_write; fds_wtmp = USI->gstats->CSI->fds_write;
fds_xtmp = USI->gstats->CSI->fds_except; fds_xtmp = USI->gstats->CSI->fds_except;
@@ -3904,8 +3963,7 @@ static bool do_one_select_round(UltraScanInfo *USI, struct timeval *stime) {
selectres = select(CSI->maxValidSD + 1, &fds_rtmp, &fds_wtmp, selectres = select(CSI->maxValidSD + 1, &fds_rtmp, &fds_wtmp,
&fds_xtmp, &timeout); &fds_xtmp, &timeout);
err = socket_errno(); err = socket_errno();
} } else {
else {
/* Apparently Windows returns an WSAEINVAL if you select without watching any SDs. Lame. We'll usleep instead in that case */ /* Apparently Windows returns an WSAEINVAL if you select without watching any SDs. Lame. We'll usleep instead in that case */
usleep(timeleft * 1000); usleep(timeleft * 1000);
selectres = 0; selectres = 0;
@@ -3936,11 +3994,13 @@ static bool do_one_select_round(UltraScanInfo *USI, struct timeval *stime) {
hostI = completedHostI++; hostI = completedHostI++;
host = *hostI; host = *hostI;
if (host->num_probes_active == 0) continue; if (host->num_probes_active == 0)
continue;
nextProbeI = probeI = host->probes_outstanding.end(); nextProbeI = probeI = host->probes_outstanding.end();
listsz = host->num_probes_outstanding(); listsz = host->num_probes_outstanding();
if (listsz) nextProbeI--; if (listsz)
nextProbeI--;
for (probenum = 0; probenum < listsz && numGoodSD < selectres; probenum++) { for (probenum = 0; probenum < listsz && numGoodSD < selectres; probenum++) {
probeI = nextProbeI; probeI = nextProbeI;
if (probeI != host->probes_outstanding.begin()) if (probeI != host->probes_outstanding.begin())
@@ -4279,7 +4339,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
struct ip *ip_tmp; struct ip *ip_tmp;
to_usec = TIMEVAL_SUBTRACT(*stime, USI->now); to_usec = TIMEVAL_SUBTRACT(*stime, USI->now);
if (to_usec < 2000) to_usec = 2000; if (to_usec < 2000)
to_usec = 2000;
ip_tmp = (struct ip *) readip_pcap(USI->pd, &bytes, to_usec, &rcvdtime, &linkhdr, true); ip_tmp = (struct ip *) readip_pcap(USI->pd, &bytes, to_usec, &rcvdtime, &linkhdr, true);
gettimeofday(&USI->now, NULL); gettimeofday(&USI->now, NULL);
if (!ip_tmp && TIMEVAL_SUBTRACT(*stime, USI->now) < 0) { if (!ip_tmp && TIMEVAL_SUBTRACT(*stime, USI->now) < 0) {
@@ -4338,7 +4399,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
struct tcp_hdr *tcp = (struct tcp_hdr *) data; struct tcp_hdr *tcp = (struct tcp_hdr *) data;
/* Now ensure this host is even in the incomplete list */ /* Now ensure this host is even in the incomplete list */
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0); setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0);
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -4385,7 +4447,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
/* Now ensure this host is even in the incomplete list */ /* Now ensure this host is even in the incomplete list */
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0); setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0);
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -4485,7 +4548,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
/* ensure this packet relates to a packet to the host /* ensure this packet relates to a packet to the host
we are scanning ... */ we are scanning ... */
hss = USI->findHost(&encaps_hdr.dst); hss = USI->findHost(&encaps_hdr.dst);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -4564,7 +4628,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
break; break;
} }
current_reason = icmp_to_reason(hdr.proto, icmp->icmp_type, icmp->icmp_code); current_reason = icmp_to_reason(hdr.proto, icmp->icmp_type, icmp->icmp_code);
if (newstate == PORT_UNKNOWN) break; if (newstate == PORT_UNKNOWN)
break;
goodone = true; goodone = true;
} }
} }
@@ -4607,7 +4672,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
/* ensure this packet relates to a packet to the host /* ensure this packet relates to a packet to the host
we are scanning ... */ we are scanning ... */
hss = USI->findHost(&encaps_hdr.dst); hss = USI->findHost(&encaps_hdr.dst);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -4728,7 +4794,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
/* Search for this host on the incomplete list */ /* Search for this host on the incomplete list */
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
ss_len = sizeof(target_src); ss_len = sizeof(target_src);
@@ -4826,7 +4893,8 @@ static bool get_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
hss->target->ports.setStateReason(IPPROTO_ICMP, IPPROTO_IP, icmp_to_reason(hdr.proto, icmp->icmp_type, icmp->icmp_code), hss->target->ports.setStateReason(IPPROTO_ICMP, IPPROTO_IP, icmp_to_reason(hdr.proto, icmp->icmp_type, icmp->icmp_code),
hdr.ttl, &reason_sip); hdr.ttl, &reason_sip);
} }
if (!goodone) goodone = true; if (!goodone)
goodone = true;
break; break;
} }
} }
@@ -4875,7 +4943,8 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
do { do {
to_usec = TIMEVAL_SUBTRACT(*stime, USI->now); to_usec = TIMEVAL_SUBTRACT(*stime, USI->now);
if (to_usec < 2000) to_usec = 2000; if (to_usec < 2000)
to_usec = 2000;
ip_tmp = (struct ip *) readip_pcap(USI->pd, &bytes, to_usec, &rcvdtime, ip_tmp = (struct ip *) readip_pcap(USI->pd, &bytes, to_usec, &rcvdtime,
&linkhdr, true); &linkhdr, true);
gettimeofday(&USI->now, NULL); gettimeofday(&USI->now, NULL);
@@ -4917,11 +4986,12 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
/* Echo reply, Timestamp reply, or Address Mask Reply. RFCs 792 and 950. */ /* Echo reply, Timestamp reply, or Address Mask Reply. RFCs 792 and 950. */
/* ICMPv6 Echo reply */ /* ICMPv6 Echo reply */
if (USI->ptech.rawicmpscan && ((hdr.proto == IPPROTO_ICMP && (ping->type if (USI->ptech.rawicmpscan
== 0 || ping->type == 14 || ping->type == 18)) || (hdr.proto && ((hdr.proto == IPPROTO_ICMP && (ping->type == 0 || ping->type == 14 || ping->type == 18))
== IPPROTO_ICMPV6 && ping->type == 129))) { || (hdr.proto == IPPROTO_ICMPV6 && ping->type == 129))) {
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0); setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0);
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -5022,7 +5092,8 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
} }
hss = USI->findHost(&encaps_hdr.dst); hss = USI->findHost(&encaps_hdr.dst);
if (!hss) continue; // Not referring to a host that interests us if (!hss)
continue; // Not referring to a host that interests us
setTargetMACIfAvailable(hss->target, &linkhdr, &encaps_hdr.dst, 0); setTargetMACIfAvailable(hss->target, &linkhdr, &encaps_hdr.dst, 0);
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -5104,7 +5175,8 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
/* I don't want anything to do with timing this. */ /* I don't want anything to do with timing this. */
adjust_timing = false; adjust_timing = false;
} else if (hdr.proto == IPPROTO_ICMP && ping->type == 4) { } else if (hdr.proto == IPPROTO_ICMP && ping->type == 4) {
if (o.debugging) log_write(LOG_STDOUT, "Got ICMP source quench\n"); if (o.debugging)
log_write(LOG_STDOUT, "Got ICMP source quench\n");
usleep(50000); usleep(50000);
} else if (hdr.proto == IPPROTO_ICMPV6 && ping->type == 4) { } else if (hdr.proto == IPPROTO_ICMPV6 && ping->type == 4) {
if (o.debugging) if (o.debugging)
@@ -5128,7 +5200,8 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
continue; continue;
/* Now ensure this host is even in the incomplete list */ /* Now ensure this host is even in the incomplete list */
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0); setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0);
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -5165,7 +5238,8 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
struct udp_hdr *udp = (struct udp_hdr *) data; struct udp_hdr *udp = (struct udp_hdr *) data;
/* Search for this host on the incomplete list */ /* Search for this host on the incomplete list */
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
goodone = false; goodone = false;
@@ -5214,7 +5288,8 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
(struct dnet_sctp_chunkhdr *) ((u8 *) sctp + 12); (struct dnet_sctp_chunkhdr *) ((u8 *) sctp + 12);
/* Search for this host on the incomplete list */ /* Search for this host on the incomplete list */
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; // Not from a host that interests us if (!hss)
continue; // Not from a host that interests us
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
goodone = false; goodone = false;
@@ -5263,7 +5338,8 @@ static int get_ping_pcap_result(UltraScanInfo *USI, struct timeval *stime) {
/* Check for a protocol reply */ /* Check for a protocol reply */
if (!goodone && USI->ptech.rawprotoscan) { if (!goodone && USI->ptech.rawprotoscan) {
hss = USI->findHost(&hdr.src); hss = USI->findHost(&hdr.src);
if (!hss) continue; if (!hss)
continue;
setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0); setTargetMACIfAvailable(hss->target, &linkhdr, &hdr.src, 0);
probeI = hss->probes_outstanding.end(); probeI = hss->probes_outstanding.end();
listsz = hss->num_probes_outstanding(); listsz = hss->num_probes_outstanding();
@@ -5434,8 +5510,11 @@ static void begin_sniffer(UltraScanInfo *USI, vector<Target *> &Targets) {
pcap_filter += inet_ntop_ez(&source, sizeof(source)); pcap_filter += inet_ntop_ez(&source, sizeof(source));
pcap_filter += " and (icmp or icmp6 or tcp or udp or sctp)"; pcap_filter += " and (icmp or icmp6 or tcp or udp or sctp)";
} }
}else assert(0); } else {
if (o.debugging) log_write(LOG_PLAIN, "Packet capture filter (device %s): %s\n", Targets[0]->deviceFullName(), pcap_filter.c_str()); assert(0);
}
if (o.debugging)
log_write(LOG_PLAIN, "Packet capture filter (device %s): %s\n", Targets[0]->deviceFullName(), pcap_filter.c_str());
set_pcap_filter(Targets[0]->deviceFullName(), USI->pd, pcap_filter.c_str()); set_pcap_filter(Targets[0]->deviceFullName(), USI->pd, pcap_filter.c_str());
/* pcap_setnonblock(USI->pd, 1, NULL); */ /* pcap_setnonblock(USI->pd, 1, NULL); */
return; return;
@@ -5572,7 +5651,8 @@ static void processData(UltraScanInfo *USI) {
gettimeofday(&USI->now, NULL); gettimeofday(&USI->now, NULL);
if (o.debugging) { if (o.debugging) {
long tv_diff = TIMEVAL_MSEC_SUBTRACT(USI->now, tv_start); long tv_diff = TIMEVAL_MSEC_SUBTRACT(USI->now, tv_start);
if (tv_diff > 30) log_write(LOG_PLAIN, "%s took %lims\n", __func__, tv_diff); if (tv_diff > 30)
log_write(LOG_PLAIN, "%s took %lims\n", __func__, tv_diff);
} }
} }
@@ -5711,7 +5791,8 @@ void bounce_scan(Target *target, u16 *portarray, int numports,
unsigned short portno, p1, p2; unsigned short portno, p1, p2;
int timedout; int timedout;
if (! numports) return; /* nothing to scan for */ if (numports == 0)
return; /* nothing to scan for */
Snprintf(targetstr, 20, "%d,%d,%d,%d,", UC(t[0]), UC(t[1]), UC(t[2]), UC(t[3])); Snprintf(targetstr, 20, "%d,%d,%d,%d,", UC(t[0]), UC(t[1]), UC(t[2]), UC(t[3]));
@@ -5731,7 +5812,8 @@ void bounce_scan(Target *target, u16 *portarray, int numports,
p1 = ((unsigned char *) &portno)[0]; p1 = ((unsigned char *) &portno)[0];
p2 = ((unsigned char *) &portno)[1]; p2 = ((unsigned char *) &portno)[1];
Snprintf(command, 512, "PORT %s%i,%i\r\n", targetstr, p1, p2); Snprintf(command, 512, "PORT %s%i,%i\r\n", targetstr, p1, p2);
if (o.debugging) log_write(LOG_STDOUT, "Attempting command: %s", command); if (o.debugging)
log_write(LOG_STDOUT, "Attempting command: %s", command);
if (send(sd, command, strlen(command), 0) < 0 ) { if (send(sd, command, strlen(command), 0) < 0 ) {
gh_perror("send in %s", __func__); gh_perror("send in %s", __func__);
if (retriesleft) { if (retriesleft) {
@@ -5740,11 +5822,11 @@ void bounce_scan(Target *target, u16 *portarray, int numports,
retriesleft--; retriesleft--;
close(sd); close(sd);
ftp->sd = ftp_anon_connect(ftp); ftp->sd = ftp_anon_connect(ftp);
if (ftp->sd < 0) return; if (ftp->sd < 0)
return;
sd = ftp->sd; sd = ftp->sd;
i--; i--;
} } else {
else {
error("Our socket descriptor is dead and we are out of retries. Giving up."); error("Our socket descriptor is dead and we are out of retries. Giving up.");
close(sd); close(sd);
ftp->sd = -1; ftp->sd = -1;
@@ -5752,26 +5834,24 @@ void bounce_scan(Target *target, u16 *portarray, int numports,
} }
} else { /* Our send is good */ } else { /* Our send is good */
res = recvtime(sd, recvbuf, 2048, 15, NULL); res = recvtime(sd, recvbuf, 2048, 15, NULL);
if (res <= 0) if (res <= 0) {
perror("recv problem from FTP bounce server"); perror("recv problem from FTP bounce server");
} else { /* our recv is good */
else { /* our recv is good */
recvbuf[res] = '\0'; recvbuf[res] = '\0';
if (o.debugging) log_write(LOG_STDOUT, "result of port query on port %i: %s", if (o.debugging)
log_write(LOG_STDOUT, "result of port query on port %i: %s",
portarray[i], recvbuf); portarray[i], recvbuf);
if (recvbuf[0] == '5') { if (recvbuf[0] == '5') {
if (portarray[i] > 1023) { if (portarray[i] > 1023) {
fatal("Your FTP bounce server sucks, it won't let us feed bogus ports!"); fatal("Your FTP bounce server sucks, it won't let us feed bogus ports!");
} } else {
else {
error("Your FTP bounce server doesn't allow privileged ports, skipping them."); error("Your FTP bounce server doesn't allow privileged ports, skipping them.");
while (i < numports && portarray[i] < 1024) i++; while (i < numports && portarray[i] < 1024) i++;
if (!portarray[i]) { if (!portarray[i]) {
fatal("And you didn't want to scan any unpriviliged ports. Giving up."); fatal("And you didn't want to scan any unpriviliged ports. Giving up.");
} }
} }
} } else { /* Not an error message */
else /* Not an error message */
if (send(sd, "LIST\r\n", 6, 0) > 0 ) { if (send(sd, "LIST\r\n", 6, 0) > 0 ) {
res = recvtime(sd, recvbuf, 2048, 12, &timedout); res = recvtime(sd, recvbuf, 2048, 12, &timedout);
if (res < 0) { if (res < 0) {
@@ -5782,7 +5862,8 @@ void bounce_scan(Target *target, u16 *portarray, int numports,
else target->ports.setPortState(portarray[i], IPPROTO_TCP, PORT_CLOSED); else target->ports.setPortState(portarray[i], IPPROTO_TCP, PORT_CLOSED);
} else { } else {
recvbuf[res] = '\0'; recvbuf[res] = '\0';
if (o.debugging) log_write(LOG_STDOUT, "result of LIST: %s", recvbuf); if (o.debugging)
log_write(LOG_STDOUT, "result of LIST: %s", recvbuf);
if (!strncmp(recvbuf, "500", 3)) { if (!strncmp(recvbuf, "500", 3)) {
/* fuck, we are not aligned properly */ /* fuck, we are not aligned properly */
if (o.verbose || o.debugging) if (o.verbose || o.debugging)
@@ -5798,9 +5879,9 @@ void bounce_scan(Target *target, u16 *portarray, int numports,
else { else {
recvbuf[res] = '\0'; recvbuf[res] = '\0';
if (res > 0) { if (res > 0) {
if (o.debugging) log_write(LOG_STDOUT, "nxt line: %s", recvbuf); if (o.debugging)
if (recvbuf[0] == '4' && recvbuf[1] == '2' && log_write(LOG_STDOUT, "nxt line: %s", recvbuf);
recvbuf[2] == '6') { if (recvbuf[0] == '4' && recvbuf[1] == '2' && recvbuf[2] == '6') {
target->ports.forgetPort(portarray[i], IPPROTO_TCP); target->ports.forgetPort(portarray[i], IPPROTO_TCP);
if (o.debugging || o.verbose) if (o.debugging || o.verbose)
log_write(LOG_STDOUT, "Changed my mind about port %i\n", portarray[i]); log_write(LOG_STDOUT, "Changed my mind about port %i\n", portarray[i]);
@@ -5817,6 +5898,7 @@ void bounce_scan(Target *target, u16 *portarray, int numports,
} }
} }
} }
}
if (o.debugging || o.verbose) if (o.debugging || o.verbose)
log_write(LOG_STDOUT, "Scanned %d ports in %ld seconds via the Bounce scan.\n", log_write(LOG_STDOUT, "Scanned %d ports in %ld seconds via the Bounce scan.\n",
@@ -5923,8 +6005,10 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
scan[j].trynum = 0; scan[j].trynum = 0;
scan[j].prev = j - 1; scan[j].prev = j - 1;
scan[j].sd[0] = scan[j].sd[1] = scan[j].sd[2] = -1; scan[j].sd[0] = scan[j].sd[1] = scan[j].sd[2] = -1;
if (j < rsi.rpc_number -1 ) scan[j].next = j+1; if (j < rsi.rpc_number - 1 )
else scan[j].next = -1; scan[j].next = j + 1;
else
scan[j].next = -1;
} }
current = pil.testinglist = &scan[0]; current = pil.testinglist = &scan[0];
rsi.rpc_current_port = NULL; rsi.rpc_current_port = NULL;
@@ -5966,7 +6050,8 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
break; // Good - an RPC port for us to scan. break; // Good - an RPC port for us to scan.
} }
if (!rsi.rpc_current_port) /* Woop! Done! */ break; if (!rsi.rpc_current_port)
break; /* Woop! Done! */
/* Reinit our testinglist so we try each RPC prog */ /* Reinit our testinglist so we try each RPC prog */
pil.testinglist = &scan[0]; pil.testinglist = &scan[0];
@@ -5984,8 +6069,7 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
SPM = new ScanProgressMeter(scanname); SPM = new ScanProgressMeter(scanname);
} }
while(pil.testinglist != NULL) /* While we have live queries or more ports to scan */ while (pil.testinglist != NULL) { /* While we have live queries or more ports to scan */
{
if (keyWasPressed()) { if (keyWasPressed()) {
// We can print out some status here if we want // We can print out some status here if we want
@@ -6013,17 +6097,20 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
rsi.rpc_status = RPC_STATUS_NOT_RPC; rsi.rpc_status = RPC_STATUS_NOT_RPC;
ss.numqueries_outstanding = 0; ss.numqueries_outstanding = 0;
break; break;
} } else {
else {
/* I think I am going to slow down a little */ /* I think I am going to slow down a little */
target->to.rttvar = MIN(2000000, (int) (target->to.rttvar * 1.2)); target->to.rttvar = MIN(2000000, (int) (target->to.rttvar * 1.2));
} }
if (o.debugging > 2) { log_write(LOG_STDOUT, "Moving port or prog %lu to the potentially firewalled list\n", (unsigned long) current->portno); } if (o.debugging > 2) {
log_write(LOG_STDOUT, "Moving port or prog %lu to the potentially firewalled list\n", (unsigned long) current->portno);
}
current->state = PORT_FILTERED; /* For various reasons */ current->state = PORT_FILTERED; /* For various reasons */
/* First delete from old list */ /* First delete from old list */
if (current->next > -1) scan[current->next].prev = current->prev; if (current->next > -1)
if (current->prev > -1) scan[current->prev].next = current->next; scan[current->next].prev = current->prev;
if (current->prev > -1)
scan[current->prev].next = current->next;
if (current == pil.testinglist) if (current == pil.testinglist)
pil.testinglist = (current->next >= 0) ? &scan[current->next] : NULL; pil.testinglist = (current->next >= 0) ? &scan[current->next] : NULL;
current->next = -1; current->next = -1;
@@ -6032,8 +6119,10 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
ss.numqueries_outstanding--; ss.numqueries_outstanding--;
} else { /* timeout ... we've got to resend */ } else { /* timeout ... we've got to resend */
if (o.scan_delay) enforce_scan_delay(NULL); if (o.scan_delay)
if (o.debugging > 2) { log_write(LOG_STDOUT, "Timeout, resending to portno/progno %lu\n", current->portno); } enforce_scan_delay(NULL);
if (o.debugging > 2)
log_write(LOG_STDOUT, "Timeout, resending to portno/progno %lu\n", current->portno);
current->trynum++; current->trynum++;
gettimeofday(&current->sent[current->trynum], NULL); gettimeofday(&current->sent[current->trynum], NULL);
now = current->sent[current->trynum]; now = current->sent[current->trynum];
@@ -6046,7 +6135,8 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
break; break;
} }
if (senddelay) usleep(senddelay); if (senddelay)
usleep(senddelay);
} }
} }
} else { } else {
@@ -6055,8 +6145,10 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
/* current->state == PORT_FRESH */ /* current->state == PORT_FRESH */
/* OK, now we have gone through our list of in-transit queries, so now /* OK, now we have gone through our list of in-transit queries, so now
we try to send off new queries if we can ... */ we try to send off new queries if we can ... */
if (ss.numqueries_outstanding >= (int) ss.numqueries_ideal) break; if (ss.numqueries_outstanding >= (int) ss.numqueries_ideal)
if (o.scan_delay) enforce_scan_delay(NULL); break;
if (o.scan_delay)
enforce_scan_delay(NULL);
if (o.debugging > 2) if (o.debugging > 2)
log_write(LOG_STDOUT, "Sending initial query to port/prog %lu\n", current->portno); log_write(LOG_STDOUT, "Sending initial query to port/prog %lu\n", current->portno);
/* Otherwise lets send a packet! */ /* Otherwise lets send a packet! */
@@ -6073,10 +6165,14 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
rsi.rpc_status = RPC_STATUS_NOT_RPC; rsi.rpc_status = RPC_STATUS_NOT_RPC;
break; break;
} }
if (senddelay) usleep(senddelay); if (senddelay)
usleep(senddelay);
} }
} }
if (o.debugging > 1) log_write(LOG_STDOUT, "Ideal number of queries: %d outstanding: %d max %d ports_left %d timeout %d senddelay: %dus\n", (int) ss.numqueries_ideal, ss.numqueries_outstanding, ss.max_width, ss.ports_left, target->to.timeout, senddelay); if (o.debugging > 1) {
log_write(LOG_STDOUT, "Ideal number of queries: %d outstanding: %d max %d ports_left %d timeout %d senddelay: %dus\n",
(int) ss.numqueries_ideal, ss.numqueries_outstanding, ss.max_width, ss.ports_left, target->to.timeout, senddelay);
}
/* Now that we have sent the packets we wait for responses */ /* Now that we have sent the packets we wait for responses */
ss.alreadydecreasedqueries = 0; ss.alreadydecreasedqueries = 0;
@@ -6112,7 +6208,8 @@ void pos_scan(Target *target, u16 *portarray, int numports, stype scantype) {
scan[j].state = PORT_FRESH; scan[j].state = PORT_FRESH;
scan[j].trynum = 0; scan[j].trynum = 0;
scan[j].prev = j - 1; scan[j].prev = j - 1;
if (j < rsi.rpc_number -1 ) scan[j].next = j+1; if (j < rsi.rpc_number - 1)
scan[j].next = j + 1;
else scan[j].next = -1; else scan[j].next = -1;
} }
current = pil.testinglist = &scan[0]; current = pil.testinglist = &scan[0];