mirror of
https://github.com/lopes/netbox-scanner.git
synced 2025-09-20 16:38:04 +02:00
nmap.py: Add extra function to improve DNS resolution since nmap is not always consistent
49 lines
1.4 KiB
Python
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
|
|
))
|