Created
June 22, 2018 21:45
-
-
Save lanbugs/e86042c0b2afaf7166637a9aa9711cb6 to your computer and use it in GitHub Desktop.
Commandline Tool to export AP inventory from an Cisco Wireless LAN Controller WLC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# Need following pip packages | |
# - easysnmp | |
# - tabulate | |
# Checkout blog article to tool | |
# https://lanbugs.de/netzwerktechnik/hersteller/cisco/cli-tool-export-ap-inventory-from-an-cisco-wireless-lan-controller-wlc/ | |
from easysnmp import Session | |
import argparse | |
from tabulate import tabulate | |
from operator import itemgetter | |
def main(): | |
#### | |
# ARGS | |
#### | |
description = """ | |
Cisco AP WLC inventory grabber\nVersion 0.1\nWritten by Maximilian Thoma 2017 | |
""" | |
aparser = argparse.ArgumentParser(description=description) | |
aparser.add_argument('-H', dest='host', help='WLC IP address', required=True) | |
aparser.add_argument('-v', dest='snmp_version', help='SNMP version, valid are 2 or 3', required=True) | |
aparser.add_argument('-C', dest='snmp_community', help='SNMP Community (only v2)') | |
aparser.add_argument('-u', dest='snmp_user', help='SNMP user (v3)') | |
aparser.add_argument('-A', dest='snmp_auth', help='SNMP auth password (v3)') | |
aparser.add_argument('-a', dest='snmp_auth_method', help='SNMP auth method, valid are MD5 or SHA (v3)') | |
aparser.add_argument('-X', dest='snmp_privacy', help='SNMP privacy password (v3)') | |
aparser.add_argument('-x', dest='snmp_privacy_method', help='SNMP privacy method, valid are AES or DES (v3)') | |
aparser.add_argument('-L', dest='snmp_security', | |
help='SNMP security level, valid are no_auth_or_privacy, auth_without_privacy or auth_with_privacy (v3)') | |
aparser.add_argument('--csv', dest='csv', help='Result should be CSV', action='store_true') | |
args = aparser.parse_args() | |
#### | |
# Setup SNMP connection | |
#### | |
if args.snmp_version == "2": | |
try: | |
snmp = Session(hostname=args.host, version=2, use_numeric=True) | |
except Exception as e: | |
print e | |
if args.snmp_version == "3": | |
try: | |
snmp = Session( | |
hostname=args.host, | |
version=3, | |
security_level=args.snmp_security, | |
security_username=args.snmp_user, | |
auth_protocol=args.snmp_auth_method, | |
auth_password=args.snmp_auth, | |
privacy_protocol=args.snmp_privacy_method, | |
privacy_password=args.snmp_privacy, | |
use_numeric=True | |
) | |
except Exception as e: | |
print e | |
#### | |
# Init Data Buffer | |
#### | |
inventory = [] | |
longids = [] | |
#### | |
# SNMP Walk AP Inventory | |
#### | |
## Get longids for APs | |
result_longids = snmp.walk(".1.3.6.1.4.1.14179.2.2.1.1.1") | |
for rl in result_longids: | |
longids.append(rl.oid.replace(".1.3.6.1.4.1.14179.2.2.1.1.1.", "") + "." + rl.oid_index) | |
## Collect informations | |
for id in longids: | |
# MAC | |
result_mac = snmp.get(".1.3.6.1.4.1.14179.2.2.1.1.1." + id) | |
mac = ":".join(["%02s" % hex(ord(m))[2:] for m in result_mac.value]).replace(' ', '0').upper() | |
# Name | |
name = snmp.get(".1.3.6.1.4.1.14179.2.2.1.1.3." + id).value | |
# IP | |
ip = snmp.get(".1.3.6.1.4.1.14179.2.2.1.1.19." + id).value | |
# SN | |
sn = snmp.get(".1.3.6.1.4.1.14179.2.2.1.1.17." + id).value | |
# Model | |
model = snmp.get(".1.3.6.1.4.1.14179.2.2.1.1.16." + id).value | |
inventory.append([name, ip, mac, model, sn]) | |
### | |
# Sort table | |
#### | |
inv = sorted(inventory, key=itemgetter(0)) | |
#### | |
# Result | |
#### | |
if args.csv is True: | |
print 'Name;IP;MAC;Model;Serialnumber' | |
for name, ip, mac, model, sn in inv: | |
print '%s;%s;%s;%s;%s' % (name, ip, mac, model, sn) | |
else: | |
print tabulate(inv, headers=["Name", "IP", "MAC", "Model", "Serialnumber"], tablefmt="orgtbl") | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hi ,
I am all new with this so i have a silly question ? where do I suppose to run this so I can get the results ?