| 
						
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -1,4 +1,5 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				from nmap import PortScanner
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import nmap
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import masscan
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				from threading import Thread
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				from datetime import datetime
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -8,7 +9,7 @@ class AnmapThread(Thread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        Thread.__init__(self)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.host = hostname
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.ports = ports
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.nm = PortScanner()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.scanner = nmap.PortScanner()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.verbose = verbose
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.daemon = True
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.out = out
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -17,12 +18,12 @@ class AnmapThread(Thread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				class ThoroughAnmapThread(AnmapThread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def run(self):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        log("Starting thorough scan on " + self.host, self.verbose)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.nm.scan(self.host, "1," + ",".join(self.ports),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                     arguments='-sSVC -A -Pn{}'.format(output(self.out, self.host, 2)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.scanner.scan(self.host, "1," + ",".join(self.ports),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                          arguments='-sSVC -A -Pn{}'.format(output(self.out, self.host, 2)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if self.out:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            with open(output(True, self.host, 5), "w") as out:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                out.write(self.nm.get_nmap_last_output())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        host = self.nm[self.host]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            with open(output(True, self.host, 5), "w") as outfile:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                outfile.write(self.scanner.get_nmap_last_output())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        host = self.scanner[self.host]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for p in host.all_tcp():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if p == 1:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                continue
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -33,12 +34,12 @@ class ThoroughAnmapThread(AnmapThread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				class UDPAnmapThread(AnmapThread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def run(self):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        log("Starting UDP scan on " + self.host, self.verbose)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.nm.scan(self.host, arguments='-sVCU -A -Pn --top-ports {}{}'.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                     format(self.ports, output(self.out, self.host, 3)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.scanner.scan(self.host, arguments='-sVCU -A -Pn --top-ports {}{}'.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                          format(self.ports, output(self.out, self.host, 3)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if self.out:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            with open(output(True, self.host, 6), "w") as out:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                out.write(self.nm.get_nmap_last_output())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        host = self.nm[self.host]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            with open(output(True, self.host, 6), "w") as outfile:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                outfile.write(self.scanner.get_nmap_last_output())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        host = self.scanner[self.host]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for p in host.all_udp():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            log("Port {}/udp: {}".format(p, host['udp'][p]), self.verbose)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        log("Finished UDP scan on " + self.host, self.verbose)
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -47,27 +48,47 @@ class UDPAnmapThread(AnmapThread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				class BaseAnmapThread(AnmapThread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def __init__(self, hostname, ports, verbose, out):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        AnmapThread.__init__(self, hostname, ports, verbose, out)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.host_list = dict()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.host_dict = dict()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def run(self):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        log("Starting quick scan", self.verbose)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.nm.scan(self.host, arguments='-sS -Pn -p{}{}'.format(self.ports, output(self.out, self.host, 1)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.scanner.scan(self.host, arguments='-sS -Pn -p{}{}'.format(self.ports, output(self.out, self.host, 1)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if self.out:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            with open(output(True, self.host, 4), "w") as out:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                out.write(self.nm.get_nmap_last_output())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            with open(output(True, self.host, 4), "w") as outfile:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                outfile.write(self.scanner.get_nmap_last_output())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        log("Finished quick scan", self.verbose)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for hostname in self.nm.all_hosts():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            host = self.nm[hostname]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for hostname in self.scanner.all_hosts():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            host = self.scanner[hostname]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            port_list = list()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            for p in host.all_tcp():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if self.nm[hostname]['tcp'][p]['state'] == 'open':
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if self.scanner[hostname]['tcp'][p]['state'] == 'open':
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    port_list.append(str(p))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if port_list is not list():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self.host_list[hostname] = port_list
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self.host_dict[hostname] = port_list
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def rjoin(self):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        Thread.join(self)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return self.host_list
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return self.host_dict
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				class MasscanAnmapThread(BaseAnmapThread):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def __init__(self, hostname, ports, verbose, out):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        AnmapThread.__init__(self, hostname, ports, verbose, out)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.host_dict = dict()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.scanner = masscan.PortScanner()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def run(self):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        log("Starting masscan scan", self.verbose)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.scanner.scan(self.host, arguments='-p{}{}'.format(self.ports, output(self.out, self.host, 7)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        log("Finished quick scan", self.verbose)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for hostname in self.scanner.all_hosts():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            host = self.scanner[hostname]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            port_list = list()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            for p in host.all_tcp():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if self.scanner[hostname]['tcp'][p]['state'] == 'open':
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    port_list.append(str(p))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if port_list is not list():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self.host_dict[hostname] = port_list
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def output(o, host, st):
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -87,6 +108,8 @@ def output(o, host, st):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return "nmap_{}_SVCA_{}.xml".format(host, date())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if st == 6:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return "nmap_{}_VCUA_{}.xml".format(host, date())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if st == 7:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return " -oG masscan_{}_S_{}.gnmap -oX masscan_{}_S_{}.xml".format(host, date(), host, date())
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def log(message, verbose):
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |