2020-05-27 22:22:50 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
import logging
|
2020-11-24 04:45:25 +01:00
|
|
|
import sys
|
2020-05-27 22:22:50 +02:00
|
|
|
|
|
|
|
from configparser import ConfigParser
|
|
|
|
from argparse import ArgumentParser
|
|
|
|
from os.path import expanduser, isfile
|
|
|
|
from datetime import datetime
|
|
|
|
from urllib3 import disable_warnings
|
|
|
|
from urllib3.exceptions import InsecureRequestWarning
|
|
|
|
|
|
|
|
from nbs import NetBoxScanner
|
2020-11-24 04:45:25 +01:00
|
|
|
|
|
|
|
argument = str(sys.argv[1])
|
|
|
|
|
|
|
|
if argument == 'nmap':
|
|
|
|
from nbs.nmap import Nmap
|
|
|
|
if argument == 'netxms':
|
|
|
|
from nbs.netxms import NetXMS
|
|
|
|
if argument == 'prime':
|
|
|
|
from nbs.prime import Prime
|
2020-05-27 22:22:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
local_config = expanduser('~/.netbox-scanner.conf')
|
|
|
|
global_config = '/opt/netbox/netbox-scanner.conf'
|
|
|
|
config = ConfigParser()
|
|
|
|
|
|
|
|
if isfile(local_config):
|
|
|
|
config.read(local_config)
|
|
|
|
elif isfile(global_config):
|
|
|
|
config.read(global_config)
|
|
|
|
else:
|
|
|
|
raise FileNotFoundError('Configuration file was not found.')
|
|
|
|
|
|
|
|
netbox = config['NETBOX']
|
2020-11-24 04:45:25 +01:00
|
|
|
if argument == 'nmap':
|
|
|
|
nmap = config['NMAP']
|
|
|
|
if argument == 'netxms':
|
|
|
|
netxms = config['NETXMS']
|
|
|
|
if argument == 'prime':
|
|
|
|
prime = config['PRIME']
|
2020-05-27 22:22:50 +02:00
|
|
|
|
|
|
|
parser = ArgumentParser(description='netbox-scanner')
|
|
|
|
subparsers = parser.add_subparsers(title='Commands', dest='command')
|
|
|
|
subparsers.required = True
|
2020-11-24 04:45:25 +01:00
|
|
|
if argument == 'nmap':
|
|
|
|
argsp = subparsers.add_parser('nmap', help='Nmap module')
|
|
|
|
if argument == 'netxms':
|
|
|
|
argsp = subparsers.add_parser('netxms', help='NetXMS module')
|
|
|
|
if argument == 'prime':
|
|
|
|
argsp = subparsers.add_parser('prime', help='Cisco Prime module')
|
2020-05-27 22:22:50 +02:00
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
logfile = '{}/netbox-scanner-{}.log'.format(
|
|
|
|
netbox['logs'],
|
|
|
|
datetime.now().isoformat()
|
|
|
|
)
|
|
|
|
logging.basicConfig(
|
2020-11-10 14:45:20 +01:00
|
|
|
filename=logfile,
|
|
|
|
level=logging.INFO,
|
2020-05-27 22:22:50 +02:00
|
|
|
format='%(asctime)s\tnetbox-scanner\t%(levelname)s\t%(message)s'
|
|
|
|
)
|
|
|
|
logging.getLogger().addHandler(logging.StreamHandler())
|
|
|
|
|
2020-11-24 16:38:01 +01:00
|
|
|
# useful if you have tls_verify set to no
|
2020-05-27 22:22:50 +02:00
|
|
|
disable_warnings(InsecureRequestWarning)
|
|
|
|
|
|
|
|
|
2020-05-28 22:22:14 +02:00
|
|
|
def cmd_nmap(s): # nmap handler
|
2020-05-27 22:22:50 +02:00
|
|
|
h = Nmap(nmap['path'], nmap['unknown'])
|
|
|
|
h.run()
|
2020-05-28 22:22:14 +02:00
|
|
|
s.sync(h.hosts)
|
|
|
|
|
2020-11-10 14:45:20 +01:00
|
|
|
|
2020-06-16 01:12:08 +02:00
|
|
|
def cmd_netxms(s): # netxms handler
|
|
|
|
h = NetXMS(
|
|
|
|
netxms['address'],
|
|
|
|
netxms['username'],
|
|
|
|
netxms['password'],
|
|
|
|
netxms.getboolean('tls_verify'),
|
|
|
|
netxms['unknown']
|
|
|
|
)
|
|
|
|
h.run()
|
|
|
|
s.sync(h.hosts)
|
|
|
|
|
2020-11-10 14:45:20 +01:00
|
|
|
|
2020-05-28 22:22:14 +02:00
|
|
|
def cmd_prime(s): # prime handler
|
|
|
|
h = Prime(
|
|
|
|
prime['address'],
|
|
|
|
prime['username'],
|
|
|
|
prime['password'],
|
2020-11-10 14:45:20 +01:00
|
|
|
prime.getboolean('tls_verify'),
|
2020-05-28 22:22:14 +02:00
|
|
|
prime['unknown']
|
|
|
|
)
|
|
|
|
h.run() # set access_point=True to process APs
|
|
|
|
s.sync(h.hosts)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
scanner = NetBoxScanner(
|
2020-05-28 01:58:09 +02:00
|
|
|
netbox['address'],
|
|
|
|
netbox['token'],
|
2020-11-24 16:38:01 +01:00
|
|
|
netbox['tls_verify'],
|
2020-11-10 14:45:20 +01:00
|
|
|
nmap['tag'],
|
2020-05-27 22:22:50 +02:00
|
|
|
nmap.getboolean('cleanup')
|
|
|
|
)
|
|
|
|
|
2020-05-28 22:22:14 +02:00
|
|
|
if args.command == 'nmap':
|
|
|
|
cmd_nmap(scanner)
|
2020-06-16 01:12:08 +02:00
|
|
|
elif args.command == 'netxms':
|
|
|
|
scanner.tag = 'netxms'
|
|
|
|
scanner.cleanup = netxms.getboolean('cleanup')
|
|
|
|
cmd_netxms(scanner)
|
2020-05-28 22:22:14 +02:00
|
|
|
elif args.command == 'prime':
|
|
|
|
scanner.tag = prime['tag']
|
|
|
|
scanner.cleanup = prime.getboolean('cleanup')
|
|
|
|
cmd_prime(scanner)
|
2020-05-27 22:22:50 +02:00
|
|
|
|
|
|
|
exit(0)
|