netbox-scanner/netbox-scanner.py

121 lines
3.0 KiB
Python
Raw Permalink Normal View History

2020-05-27 22:22:50 +02:00
#!/usr/bin/env python3
import logging
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
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']
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
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)