From d3055b26bf20e589b91d2d79b7464263366eaa57 Mon Sep 17 00:00:00 2001 From: fyodor Date: Tue, 4 Jul 2006 08:00:11 +0000 Subject: [PATCH] Some patches from Marek --- CHANGELOG | 2 ++ Makefile.in | 11 +++++-- NmapOps.cc | 4 ++- NmapOutputTable.cc | 2 +- nmap.cc | 2 ++ osscan.cc | 1 + scan_engine.cc | 2 -- tcpip.cc | 81 ---------------------------------------------- tcpip.h | 54 ------------------------------- 9 files changed, 18 insertions(+), 141 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a5e7a919d..f6cf7cae4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,8 @@ o Added IP options support. This allows you to specify loose/strict further details on using these advanced options. Thanks to Marek Majkowski (majek(a)forest.one.pl) for this patch. +o Applied several code cleanup patches from Marek Majkowski. + o Fixed a bug related to bogus completion time estimates when you request an estimate (through runtime interaction) right when Nmap is starting.a subsystem (such as a port scan or version detection). diff --git a/Makefile.in b/Makefile.in index 77c2f8fa8..f3dfe9c73 100644 --- a/Makefile.in +++ b/Makefile.in @@ -16,6 +16,7 @@ export NSOCKDIR=@NSOCKDIR@ CC = @CC@ CXX = @CXX@ CCOPT = +DBGFLAGS = LIBPCAPDIR = @libpcapdir@ LIBPCREDIR = @LIBPCREDIR@ export LIBDNETDIR = @LIBDNETDIR@ @@ -23,12 +24,12 @@ DEFS = @DEFS@ -DNMAP_VERSION=\"$(NMAP_VERSION)\" -DNMAP_NAME=\"$(NMAP_NAME)\" -D # For mtrace debugging -- see MTRACE define in main.cc for instructions # Should only be enabled during debugging and not in any real release. # DEFS += -DMTRACE=1 -CXXFLAGS = @CXXFLAGS@ $(CCOPT) $(DEFS) +CXXFLAGS = @CXXFLAGS@ $(DBGFLAGS) $(CCOPT) $(DEFS) CPPFLAGS = @CPPFLAGS@ # CFLAGS = $(CXXFLAGS) # CFLAGS = $(DEFS) $(INCLS) STATIC = -LDFLAGS = @LDFLAGS@ $(STATIC) +LDFLAGS = @LDFLAGS@ $(DBGFLAGS) $(STATIC) LIBS = @LIBNBASE_LIBS@ @LIBNSOCK_LIBS@ @LIBPCRE_LIBS@ @LIBPCAP_LIBS@ @OPENSSL_LIBS@ @LIBDNET_LIBS@ @LIBS@ # LIBS = -lefence @LIBS@ # LIBS = -lrmalloc @LIBS@ @@ -37,6 +38,7 @@ INSTALL = $(SHTOOL) install MAKEDEPEND = @MAKEDEPEND@ export RPMTDIR=$(HOME)/rpm + # DESTDIR is used by some package maintainers to install Nmap under # its usual directory structure into a different tree. See the # CHANGELOG for more info. @@ -99,6 +101,9 @@ nmapfe/nmapfe: static: $(MAKE) STATIC=-static +debug: + $(MAKE) DBGFLAGS="-O0 -g -pg -ftest-coverage -fprofile-arcs" + # Make the Nmap tarball distro: cd scripts && $(MAKE) distro @@ -132,6 +137,8 @@ dnet_dist_clean: -cd $(LIBDNETDIR) && $(MAKE) distclean nmapfe_dist_clean: -cd nmapfe && $(MAKE) distclean +debugclean: + rm -f *.gcov *.gcda *.gcno gmon.out distclean: my_clean my_distclean @PCAP_DIST_CLEAN@ @PCRE_DIST_CLEAN@ @DNET_DIST_CLEAN@ nmapfe_dist_clean diff --git a/NmapOps.cc b/NmapOps.cc index bc12f9d61..90c336cfd 100644 --- a/NmapOps.cc +++ b/NmapOps.cc @@ -252,6 +252,8 @@ void NmapOps::Initialize() { dns_servers = NULL; noninteractive = false; current_scantype = STYPE_UNKNOWN; + release_memory = false; + } bool NmapOps::TCPScan() { @@ -431,7 +433,7 @@ void NmapOps::ValidateOptions() { } if (max_parallelism && min_parallelism && (min_parallelism > max_parallelism)) { - fatal("--min-parallelism must be less than or equal to --max-parallelism"); + fatal("--min-parallelism=%i must be less than or equal to --max-parallelism=%i",min_parallelism,max_parallelism); } if (af() == AF_INET6 && (numdecoys|osscan|bouncescan|fragscan|ackscan|finscan|idlescan|ipprotscan|maimonscan|nullscan|rpcscan|synscan|udpscan|windowscan|xmasscan)) { diff --git a/NmapOutputTable.cc b/NmapOutputTable.cc index aec030201..13d048c98 100644 --- a/NmapOutputTable.cc +++ b/NmapOutputTable.cc @@ -186,7 +186,7 @@ void NmapOutputTable::addItemFormatted(unsigned int row, res = vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); - if (res < 0 || res > sizeof(buf)) + if (res > sizeof(buf)) fatal("NmapOutputTable only supports adding up to 4096 to a cell via addItemFormatString."); addItem(row, column, true, buf, res); diff --git a/nmap.cc b/nmap.cc index 46bf3a5bb..f217989fc 100644 --- a/nmap.cc +++ b/nmap.cc @@ -1075,6 +1075,8 @@ int nmap_main(int argc, char *argv[]) { if (o.scan_delay > o.maxTCPScanDelay()) o.setMaxTCPScanDelay(o.scan_delay); if (o.scan_delay > o.maxUDPScanDelay()) o.setMaxUDPScanDelay(o.scan_delay); o.max_parallelism = 1; + if(pre_max_parallelism != -1) + fatal("You can't use --max-parallelism with --scan-delay."); } if (pre_max_scan_delay != -1) { o.setMaxTCPScanDelay(pre_max_scan_delay); diff --git a/osscan.cc b/osscan.cc index 61c7245af..541f82fd5 100644 --- a/osscan.cc +++ b/osscan.cc @@ -1719,6 +1719,7 @@ static void parse_classline(FingerPrint *FP, char *thisline, int lineno, int *classno) { char *p, *q; +// Wtf???? fflush(stdout); if (!thisline || strncmp(thisline, "Class ", 6) == 1) { diff --git a/scan_engine.cc b/scan_engine.cc index 4af9c5bf8..d588d1fe8 100644 --- a/scan_engine.cc +++ b/scan_engine.cc @@ -661,8 +661,6 @@ UltraProbe::~UltraProbe() { void UltraProbe::setARP(u8 *arppkt, u32 arplen) { type = UP_ARP; - /* probes.AP = new ArpProbe; - probes.AP->storePacket(arppkt, arplen); */ mypspec.type = PS_ARP; return; } diff --git a/tcpip.cc b/tcpip.cc index 7887d585b..08781d2ae 100644 --- a/tcpip.cc +++ b/tcpip.cc @@ -2927,84 +2927,3 @@ if (echots) *echots = 0; return 0; } -IPProbe::IPProbe() { - packetbuflen = 0; - packetbuf = NULL; - Reset(); -} - -void IPProbe::Reset() { - if (packetbuf) - free(packetbuf); - packetbuflen = 0; - packetbuf = NULL; - ipv4 = NULL; - icmp = NULL; - tcp = NULL; - udp = NULL; -} - -IPProbe::~IPProbe() { - if (packetbuf) { - free(packetbuf); - packetbuf = NULL; - packetbuflen = 0; - } - Reset(); -} - -int IPProbe::storePacket(u8 *ippacket, u32 len) { - assert(packetbuf == NULL); - af = AF_INET; - packetbuf = (u8 *) safe_malloc(len); - memcpy(packetbuf, ippacket, len); - packetbuflen = len; - ipv4 = (struct ip *) packetbuf; - assert(ipv4->ip_v == 4); - assert(len >= 20); - assert(len == (u32) ntohs(ipv4->ip_len)); - if (ipv4->ip_p == IPPROTO_TCP) { - if (len >= (unsigned) ipv4->ip_hl * 4 + 20) - tcp = (struct tcphdr *) ((u8 *) ipv4 + ipv4->ip_hl * 4); - } else if (ipv4->ip_p == IPPROTO_ICMP) { - if (len >= (unsigned) ipv4->ip_hl * 4 + 8) - icmp = (struct icmp *) ((u8 *) ipv4 + ipv4->ip_hl * 4); - } else if (ipv4->ip_p == IPPROTO_UDP) { - if (len >= (unsigned) ipv4->ip_hl * 4 + 8) - udp = (udphdr_bsd *) ((u8 *) ipv4 + ipv4->ip_hl * 4); - } - return 0; -} - -ArpProbe::ArpProbe() { - packetbuflen = 0; - packetbuf = NULL; - Reset(); -} - -void ArpProbe::Reset() { - if (packetbuf) - free(packetbuf); - packetbuflen = 0; - packetbuf = NULL; - ipquery = NULL; -} - -ArpProbe::~ArpProbe() { - if (packetbuf) { - free(packetbuf); - packetbuf = NULL; - packetbuflen = 0; - } - Reset(); -} - -int ArpProbe::storePacket(u8 *arppacket, u32 len) { - assert(packetbuf == NULL); - assert(len == 42); - packetbuf = (u8 *) safe_malloc(len); - memcpy(packetbuf, arppacket, len); - packetbuflen = len; - ipquery = (struct in_addr *) ((u8 *)arppacket + 38); - return 0; -} diff --git a/tcpip.h b/tcpip.h index c76e77cba..3f6a1222d 100644 --- a/tcpip.h +++ b/tcpip.h @@ -240,11 +240,6 @@ typedef enum { devt_ethernet, devt_loopback, devt_p2p, devt_other } devtype; #include "nmap.h" #include "global_structures.h" - -#ifndef DEBUGGING -#define DEBUGGING 0 -#endif - #ifndef TCPIP_DEBUGGING #define TCPIP_DEBUGGING 0 #endif @@ -476,55 +471,6 @@ struct icmp }; #endif /* HAVE_STRUCT_ICMP */ -/* Represents a single probe packet, such as a SYN to port 80 or an - ICMP netmask request packet. Values are still in network byte order. */ -class IPProbe { - public: - IPProbe(); - ~IPProbe(); -/* Takes an IP packet and stores _a copy_ of it, in this Probe, - adjusting proper header pointers and such */ - int storePacket(u8 *ippacket, u32 len); - u32 packetbuflen; /* Length of the whole packet */ - u8 *packetbuf; /* The packet itself */ - struct ip *ipv4; /* IP header of packet */ - struct icmp *icmp; /* icmp, tcp, and udp are NULL if the packet has no such header */ - struct tcphdr *tcp; - udphdr_bsd *udp; - - u8 af; /* AF_INET or AF_INET6 */ - /* Resets everything to NULL. Frees packetbuf if it is filled. You - can reuse a Probe by calling Reset() and then a new - storePacket(). */ - void Reset(); - private: - -}; - -/* Handles an *IPv4* Arp probe */ -class ArpProbe { - public: - ArpProbe(); - ~ArpProbe(); -/* Takes an ARP packet and stores _a copy_ of it, in this Probe, - adjusting proper header pointers and such. Then length better - equal 42! */ - int storePacket(u8 *arppacket, u32 len); - u32 packetbuflen; /* Length of the whole packet */ - u8 *packetbuf; /* The packet itself */ - struct in_addr *ipquery; /* IP address this ARP seeks */ - /* Resets everything to NULL. Frees packetbuf if it is filled. You - can reuse a Probe by calling Reset() and then a new - storePacket(). */ - void Reset(); - private: - -}; - - /* This ideally should be a port that isn't in use for any protocol on our machine or on the target */ -#define MAGIC_PORT 49724 -#define TVAL2LONG(X) X.tv_sec * 1e6 + X.tv_usec -#define SA struct sockaddr /* Prototypes */ /* Converts an IP address given in a sockaddr_storage to an IPv4 or