From f0fab247dbd56b88f44710af461d2d262ff343b6 Mon Sep 17 00:00:00 2001 From: dmiller Date: Thu, 27 Jun 2024 19:36:03 +0000 Subject: [PATCH] Simplify boostScanDelay to make it clear what limits are in place. --- scan_engine.cc | 17 ++++++++++------- scan_engine.h | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/scan_engine.cc b/scan_engine.cc index 328b2bb5e..431a8549d 100644 --- a/scan_engine.cc +++ b/scan_engine.cc @@ -469,6 +469,9 @@ HostScanStats::HostScanStats(Target *t, UltraScanInfo *UltraSI) { memset(&sdn, 0, sizeof(sdn)); sdn.last_boost = USI->now; sdn.delayms = o.scan_delay; + sdn.maxdelay = USI->tcp_scan ? o.maxTCPScanDelay() : + USI->udp_scan ? o.maxUDPScanDelay() : + o.maxSCTPScanDelay(); rld.max_tryno_sent = 0; rld.rld_waiting = false; rld.rld_waittime = USI->now; @@ -1917,13 +1920,13 @@ static bool ultrascan_port_pspec_update(const UltraScanInfo *USI, /* Boost the scan delay for this host, usually because too many packet drops were detected. */ void HostScanStats::boostScanDelay() { - unsigned int maxAllowed = USI->tcp_scan ? o.maxTCPScanDelay() : - USI->udp_scan ? o.maxUDPScanDelay() : - o.maxSCTPScanDelay(); - if (sdn.delayms == 0) - sdn.delayms = (USI->udp_scan) ? 50 : 5; // In many cases, a pcap wait takes a minimum of 80ms, so this matters little :( - else sdn.delayms = MIN(sdn.delayms * 2, MAX(sdn.delayms, 1000)); - sdn.delayms = MIN(sdn.delayms, maxAllowed); + if (sdn.delayms < 1000) { + if (sdn.delayms == 0) + sdn.delayms = (USI->udp_scan) ? 50 : 5; // In many cases, a pcap wait takes a minimum of 80ms, so this matters little :( + else + sdn.delayms = MIN(sdn.delayms * 2, 1000); + } + sdn.delayms = MIN(sdn.delayms, sdn.maxdelay); sdn.last_boost = USI->now; sdn.droppedRespSinceDelayChanged = 0; sdn.goodRespSinceDelayChanged = 0; diff --git a/scan_engine.h b/scan_engine.h index d66f35979..5fbdfd15a 100644 --- a/scan_engine.h +++ b/scan_engine.h @@ -320,6 +320,7 @@ struct send_delay_nfo { unsigned int goodRespSinceDelayChanged; unsigned int droppedRespSinceDelayChanged; struct timeval last_boost; /* Most recent time of increase to delayms. Init to creation time. */ + int maxdelay; }; /* To test for rate limiting, there is a delay in sending the first packet