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.
76 Zeilen
2.9 KiB
Python
76 Zeilen
2.9 KiB
Python
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())
|