diff --git a/snmp-scan.py b/snmp-scan.py
index 5110b6a4a0..47a2de1550 100755
--- a/snmp-scan.py
+++ b/snmp-scan.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""
Scan networks for snmp hosts and add them to LibreNMS
@@ -21,13 +21,10 @@ along with this program. If not, see .
@author Tony Murray
"""
-from __future__ import print_function
-from __future__ import unicode_literals
-
import argparse
-from argparse import RawTextHelpFormatter
import json
from collections import namedtuple
+from ipaddress import ip_network, ip_address
from multiprocessing import Pool
from os import path, chdir
from socket import gethostbyname, gethostbyaddr, herror, gaierror
@@ -35,14 +32,6 @@ from subprocess import check_output, CalledProcessError
from sys import stdout
from time import time
-try:
- from ipaddress import ip_network, ip_address
-except:
- print('Could not import ipaddress module. Please install python-ipaddress or use python3 to run this script')
- print('Debian/Ubuntu: apt install python-ipaddress')
- print('RHEL/CentOS: yum install python-ipaddress')
- exit(2)
-
Result = namedtuple('Result', ['ip', 'hostname', 'outcome', 'output'])
@@ -100,53 +89,53 @@ def handle_result(data):
stats[data.outcome] += 1
-def check_ip_excluded(ip):
- for net in EXCLUDED_NETS:
- if ip in net:
- debug("\033[91m{} excluded by autodiscovery.nets-exclude\033[0m".format(ip), 1)
+def check_ip_excluded(check_ip):
+ for network_check in EXCLUDED_NETS:
+ if check_ip in network_check:
+ debug("\033[91m{} excluded by autodiscovery.nets-exclude\033[0m".format(check_ip), 1)
stats[Outcome.EXCLUDED] += 1
return True
return False
-def scan_host(ip):
+def scan_host(scan_ip):
hostname = None
try:
try:
# attempt to convert IP to hostname, if anything goes wrong, just use the IP
- tmp = gethostbyaddr(ip)[0]
- if gethostbyname(tmp) == ip: # check that forward resolves
+ tmp = gethostbyaddr(scan_ip)[0]
+ if gethostbyname(tmp) == scan_ip: # check that forward resolves
hostname = tmp
except (herror, gaierror):
pass
try:
- arguments = ['/usr/bin/env', 'php', 'addhost.php', hostname or ip]
+ arguments = ['/usr/bin/env', 'php', 'addhost.php', hostname or scan_ip]
if args.ping:
arguments.insert(3, args.ping)
add_output = check_output(arguments)
- return Result(ip, hostname, Outcome.ADDED, add_output)
+ return Result(scan_ip, hostname, Outcome.ADDED, add_output)
except CalledProcessError as err:
output = err.output.decode().rstrip()
if err.returncode == 2:
if 'Could not ping' in output:
- return Result(ip, hostname, Outcome.UNPINGABLE, output)
+ return Result(scan_ip, hostname, Outcome.UNPINGABLE, output)
else:
- return Result(ip, hostname, Outcome.FAILED, output)
+ return Result(scan_ip, hostname, Outcome.FAILED, output)
elif err.returncode == 3:
- return Result(ip, hostname, Outcome.KNOWN, output)
+ return Result(scan_ip, hostname, Outcome.KNOWN, output)
except KeyboardInterrupt:
- return Result(ip, hostname, Outcome.TERMINATED, 'Terminated')
+ return Result(scan_ip, hostname, Outcome.TERMINATED, 'Terminated')
- return Result(ip, hostname, Outcome.UNDEFINED, output)
+ return Result(scan_ip, hostname, Outcome.UNDEFINED, output)
if __name__ == '__main__':
###################
# Parse arguments #
###################
- parser = argparse.ArgumentParser(description='Scan network for snmp hosts and add them to LibreNMS.', formatter_class=RawTextHelpFormatter)
+ parser = argparse.ArgumentParser(description='Scan network for snmp hosts and add them to LibreNMS.', formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('network', action='append', nargs='*', type=str, help="""CIDR noted IP-Range to scan. Can be specified multiple times
This argument is only required if 'nets' config is not set
Example: 192.168.0.0/24