Nmap Development mailing list archives
Re: Spurious port closed bug fix
From: sean rivera <sean.au.rivera () gmail com>
Date: Mon, 20 Aug 2012 22:35:23 -0600
Here is an updated version of the patch
--- scan_engine.cc (revision 29646)
+++ scan_engine.cc (working copy)
@@ -117,7 +117,10 @@
using namespace std;
extern NmapOps o;
class UltraScanInfo;
+static u16 base_port;
+static bool firstTime=true;
+
/* A few extra performance tuning parameters specific to ultra_scan. */
struct ultra_scan_performance_vars : public scan_performance_vars {
/* When a successful ping response comes back, it counts as this many
@@ -2476,7 +2479,7 @@
|| seq32_decode(USI, ntohl(tcp->th_seq), &tryno, &pingseq);
} else {
/* Get the values from the destination port (our source port). */
- sport_decode(USI, o.magic_port, ntohs(tcp->th_dport), &tryno, &pingseq);
+ sport_decode(USI, base_port, ntohs(tcp->th_dport), &tryno, &pingseq);
goodseq = true;
}
@@ -3356,7 +3359,7 @@
if (o.magic_port_set)
sport = o.magic_port;
else
- sport = sport_encode(USI, o.magic_port, tryno, pingseq);
+ sport = sport_encode(USI, base_port, tryno, pingseq);
probe->tryno = tryno;
probe->pingseq = pingseq;
@@ -5261,7 +5264,7 @@
if (o.magic_port_set) {
trynum = probe->tryno;
} else {
- sport_decode(USI, o.magic_port, ntohs(udp->uh_dport), &trynum, NULL);
+ sport_decode(USI, base_port, ntohs(udp->uh_dport), &trynum, NULL);
}
/* Sometimes we get false results when scanning localhost with
@@ -5676,6 +5679,14 @@
UltraScanInfo *USI = NULL;
o.current_scantype = scantype;
+ if (firstTime) {
+ base_port= 33000 + (get_random_uint() % 31000);
+ }
+
+ if(base_port >= (65536 - 256)){
+ base_port = 33000; //Because we start out at 33000 everytime
+ }
+ base_port +=256
init_payloads(); /* Load up _all_ payloads into a mapped table */
if (Targets.size() == 0) {
On Sun, Aug 19, 2012 at 3:14 PM, David Fifield <david () bamsoftware com> wrote:
On Fri, Aug 17, 2012 at 09:21:40PM -0600, sean rivera wrote:I've written a very simple patch for the spurious port closed bug (below). All it does is create a local version of the o.magic_port variable and increments it by 256 every time we reach a new phase in the scan.Thanks for this, Sean. Here are some comments inline.+/*I chose to declare this here in the same place as o in order to keep the code base as similar as possible*/ +static u16 magic_port = o.magic_port; +I think this initialization might have a problem known as the "static initialization order fiasco." The problem is that the global o object may be initialized before or after this assignment. http://www.yosefk.com/c++fqa/ctors.html#fqa-10.12 I think what we should rather do is initialize this variable to a static value not depending on another global object.init_payloads(); /* Load up _all_ payloads into a mapped table */ - + if (magic_port > 65278) { //Catch overflow + magic_port=33000; //Because we start out at 33000 everytime; + } + magic_port+=256;The magic numnber 65278 needs some explanation. I see it is 2^16 - 258; I guess that's because you want to leave at least tryno_cap + 256 headroom? How about just capping it at 65536 - 256? It should be written that way in the source code. Here's what I suggest for implementing this fix. Let's rename the file-scope variable magic_port to base_port so there's no ore confusion with the global o.magic_port. Remove this initialization from NmapOps.cc: magic_port = 33000 + (get_random_uint() % 31000); and instead do this to base_port on the first call to ultra_scan. You can use a boolean variable or a distinguished value in the static initialization. The rest of the patch should work as you wrote it. David Fifield
-- ~Sean Rivera _______________________________________________ Sent through the nmap-dev mailing list http://cgi.insecure.org/mailman/listinfo/nmap-dev Archived at http://seclists.org/nmap-dev/
Current thread:
- Spurious port closed bug fix sean rivera (Aug 17)
- Re: Spurious port closed bug fix David Fifield (Aug 19)
- Re: Spurious port closed bug fix sean rivera (Aug 20)
- Re: Spurious port closed bug fix David Fifield (Aug 28)
- Re: Spurious port closed bug fix sean rivera (Aug 20)
- Re: Spurious port closed bug fix David Fifield (Aug 19)
