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.

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())