guanana afecb475a5 __init__.py: Improve tag checking (With the previous version of check wasn't working, don't know if it was dependant on old Netbox version)
nmap.py: Add extra function to improve DNS resolution since nmap is not always consistent
2020-12-15 01:27:34 +00:00

49 lines
1.4 KiB
Python

import socket
import nmap3
class Nmap(object):
def __init__(self, unknown, networks):
self.unknown = unknown
self.networks = networks
self.hosts = list()
self.scan_results = {}
def scan(self):
nmap = nmap3.NmapHostDiscovery() # instantiate nmap object
for item in self.networks:
temp_scan_result = nmap.nmap_no_portscan(item.replace('\n', ''))
self.scan_results = {**self.scan_results, **temp_scan_result}
self.scan_results.pop("stats")
self.scan_results.pop("runtime")
return self.scan_results
def dns_resolution(self):
# Try to improve DNS resolution since NMAP is not consistent
for ip, v in self.scan_results.items():
try:
name, arpa, ip = socket.gethostbyaddr(ip)
try:
v["hostname"][0]["name"]
except (TypeError, IndexError):
v.update({"hostname": {"name": name, "type": 'PTR'}})
except socket.herror:
pass
def run(self):
self.scan()
self.dns_resolution()
for k,v in self.scan().items():
try:
self.hosts.append((
k,
v['hostname'][0]['name']
))
except (IndexError, KeyError):
self.hosts.append((
k,
self.unknown
))