1
0
Fork 0
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

136 Zeilen
5.2 KiB
Python

import nmap
import masscan
from threading import Thread
from datetime import datetime
from pprint import pprint
class AnmapThread(Thread):
def __init__(self, hostname, ports, verbose, out):
Thread.__init__(self)
self.host = hostname
self.ports = ports
self.scanner = nmap.PortScanner()
self.verbose = verbose
self.daemon = True
self.out = out
class ThoroughAnmapThread(AnmapThread):
def run(self):
log("Starting thorough scan on " + self.host, self.verbose)
self.scanner.scan(self.host, "1," + ",".join(self.ports),
arguments='-sSVC -A -Pn{}'.format(output(self.out, self.host, 2)))
log(self.scanner.command_line(), self.verbose)
if self.out:
with open(output(True, self.host, 5), "w") as outfile:
outfile.write(self.scanner.get_nmap_last_output())
host = self.scanner[self.host]
log("{}/{} is {}".format(host.hostname(), host["addresses"]["ipv4"], host["osmatch"][0]["name"]), self.verbose)
for p in host.all_tcp():
if p == 1:
continue
log("Port {}/tcp: {}".format(p, host['tcp'][p]), self.verbose)
log("Finished thorough scan on " + self.host, self.verbose)
class UDPAnmapThread(AnmapThread):
def run(self):
log("Starting UDP scan on " + self.host, self.verbose)
self.scanner.scan(self.host, arguments='-sVCU -A -Pn --top-ports {}{}'.
format(self.ports, output(self.out, self.host, 3)))
log(self.scanner.command_line(), self.verbose)
if self.out:
with open(output(True, self.host, 6), "w") as outfile:
outfile.write(self.scanner.get_nmap_last_output())
host = self.scanner[self.host]
log("{}/{} is {}".format(host.hostname(), host["addresses"]["ipv4"], host["osmatch"][0]["name"]), self.verbose)
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)
class BaseAnmapThread(AnmapThread):
def __init__(self, hostname, ports, verbose, out):
AnmapThread.__init__(self, hostname, ports, verbose, out)
self.host_dict = dict()
def run(self):
log("Starting quick scan", self.verbose)
self.scanner.scan(self.host, arguments='-sS -Pn -p{}{}'.format(self.ports, output(self.out, self.host, 1)))
log(self.scanner.command_line(), self.verbose)
if self.out:
with open(output(True, self.host, 4), "w") as outfile:
outfile.write(self.scanner.get_nmap_last_output())
log("Finished quick scan", self.verbose)
np = 0
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
np += len(port_list)
log("Found {} open ports on {} host(s) with {}".format(np, len(self.host_dict), "nmap"), self.verbose)
def rjoin(self):
Thread.join(self)
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, ports=self.ports, arguments=output(self.out, self.host, 7), sudo=True)
log(self.scanner.command_line(), self.verbose)
log("Finished quick scan", self.verbose)
np = 0
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
np += len(port_list)
log("Found {} open ports on {} host(s) with {}".format(np, len(self.host_dict), "masscan"), self.verbose)
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())
def log(message, verbose):
if verbose: print("{}: {}".format(date(True), message))
def date(long=False):
if long:
return datetime.now().strftime("%Y-%m-%d_%H%M%S")
return datetime.now().strftime("%Y-%m-%d_%H%M")