import nmap import masscan from threading import Thread from AnmapResult import AnmapHost from utils import date, log class AnmapThread(Thread): def __init__(self, hostname, ports, verbose, out, result, proto): Thread.__init__(self) self.host = hostname self.ports = ports self.scanner = nmap.PortScanner() self.verbose = verbose self.daemon = True self.out = out self.result = result self.proto = proto def run(self): try: log("Starting {} scan on {}".format(self.proto, self.host), self.verbose) if self.proto == "tcp": xml = 5 self.scanner.scan(self.host, arguments='-p 1,{} -sSVC -A -Pn{}'.format(",".join(map(str, self.ports)), output(self.out, self.host, 2))) elif self.proto == "udp": xml = 6 self.scanner.scan(self.host, arguments='-sVCU -A -Pn --top-ports {}{}'.format(self.ports, output(self.out, self.host, 3))) elif self.proto == "quick": xml = 4 self.scanner.scan(self.host, arguments='-sS -Pn -p{}{}'.format(self.ports, output(self.out, self.host, 1))) elif self.proto == "masscan": xml = False self.scanner.scan(self.host, ports=self.ports, arguments=output(self.out, self.host, 7), sudo=True) else: return log(self.scanner.command_line(), self.verbose) if self.out and xml: with open(output(True, self.host, xml), "w") as outfile: outfile.write(self.scanner.get_nmap_last_output()) np = nh = 0 for hn in self.scanner.all_hosts(): np += self.result.add_host(AnmapHost(self.scanner[hn], self.verbose)) nh += 1 log("Found {} open ports on {} host(s)".format(np, nh), self.verbose) log("Finished {} scan on {}".format(self.proto, self.host), self.verbose) except KeyboardInterrupt: return class MasscanThread(AnmapThread): def __init__(self, hostname, ports, verbose, out): AnmapThread.__init__(self, hostname, ports, verbose, out) self.scanner = masscan.PortScanner() def output(o, host, st): host = host.replace("/", "x") host = host.replace(" ", "") if not o: return "" if st == 1: return " -oG nmap_{}_S_{}.gnmap".format(host, date()) if st == 2: return " -oG nmap_{}_SVCA_{}.gnmap".format(host, date()) if st == 3: return " -oG nmap_{}_VCUA_{}.gnmap".format(host, date()) if st == 4: return "nmap_{}_S_{}.xml".format(host, date()) if st == 5: 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())