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.

94 Zeilen
3.5 KiB
Python

from utils import log, Col
class AnmapResult(dict):
def add_host(self, host):
try:
if host.services_tcp:
self[host.hostname].append(host.services_tcp)
if host.services_udp:
self[host.hostname].append(host.services_udp, True)
if host.osmatch:
self[host.hostname].osmatch.extend(host.osmatch)
except KeyError:
self[host.hostname] = host
return host.open_ports
def print(self):
for host in self.values():
host.print()
class AnmapHost:
def __init__(self, host, verbose=False):
self.ip = host["addresses"]["ipv4"]
self.hostname = host.hostname()
self.osmatch = list()
try:
self.osmatch.extend(host["osmatch"])
except KeyError:
self.information = ""
self.state = host.state()
self.services_tcp = dict()
self.services_udp = dict()
self.open_ports = 0
log(self.get_info(), verbose)
for t in host.all_tcp():
if "open" not in host['tcp'][t]['state']:
continue
self.open_ports += 1
log("Port {}/tcp: {}".format(t, host['tcp'][t]), verbose)
self.services_tcp[t] = host["tcp"][t]
for u in host.all_udp():
if "open" not in host['udp'][u]['state']:
continue
self.open_ports += 1
log("Port {}/udp: {}".format(u, host['udp'][u]), verbose)
self.services_udp[u] = host["udp"][u]
def print(self):
print(self.get_info())
for guess in self.osmatch:
print("\tOS-Guess: {} ({}%)".format(guess["name"], guess["accuracy"]))
for osclass in guess["osclass"]:
for key, value in osclass.items():
print("\t\t{}: {}".format(key, value))
for port, info in self.services_tcp.items():
print("\tPort {}/tcp:".format(port))
for key, value in info.items():
if key == "script":
print("\t\tScript:")
for k, v in value.items():
print("\t\t\t{}: {}".format(k, v))
continue
print("\t\t{}: {}".format(key, value))
for port, info in self.services_udp.items():
print("\tPort {}/udp:".format(port))
for key, value in info.items():
if key == "script":
print("\t\tScript:")
for k, v in value.items():
print("\t\t\t{}: {}".format(k, v.replace("\n", "\n\t\t\t\t")))
continue
print("\t\t{}: {}".format(key, value))
def get_info(self):
return "{}/{} is {} with {} open ports".format(self.hostname, self.ip, self.state, self.open_ports)
def append(self, services, udp=False):
for port, service in services.items():
if udp:
if port in self.services_udp:
for key, value in service.items():
self.services_udp[port][key] = value
continue
self.services_udp[port] = service
self.open_ports += 1
else:
if port in self.services_tcp:
for key, value in service.items():
self.services_tcp[port][key] = value
continue
self.services_tcp[port] = service
self.open_ports += 1