Skip to content

Commit e87eef5

Browse files
committed
Add a Python script to do an off-box snmpwalk of the ENTITY-MIB.
1 parent 76daeeb commit e87eef5

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

snmp_entity/README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# SNMP: Print the results of an snmpwalk of the ENTITY-MIB from a device
2+
3+
This is a Python script that uses net-snmp's Python bindings
4+
to print the results of an snmpwalk of the ENTITY-MIB from a device.
5+
6+
The script uses either SNMPv1 or SNMPv2c.
7+
8+
For example:
9+
10+
```
11+
$ snmp_entity.py -a 10.1.1.1 -c public -v 2
12+
entPhysicalDescr.1 : CISCO1941/K9 chassis, Hw Serial#: FTX180381QX, Hw Revision: 1.0
13+
entPhysicalDescr.2 : C1941 Chassis Slot
14+
entPhysicalDescr.3 : C1941 Mother board 2GE, integrated VPN and 2W
15+
entPhysicalDescr.4 : C1941 DaughterCard Slot
16+
entPhysicalDescr.5 : C1941 DaughterCard Slot
17+
entPhysicalDescr.6 : 8 Port GE POE EHWIC Switch
18+
entPhysicalDescr.7 : EHWIC-8 Gigabit Ethernet
19+
...
20+
```
21+
22+
## Setup
23+
24+
This script has been tested with Python 2.7, and requires the following non-default module(s):
25+
26+
* net-snmp's netsnmp module (see http://net-snmp.sourceforge.net/wiki/index.php/Python_Bindings)
27+
28+
NOTE: On Ubuntu and Debian, this package is python-netsnmp
29+
On CentOS, this is net-snmp-python

snmp_entity/snmp_entity.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/usr/bin/env python
2+
#
3+
# Copyright (c) 2017 Joe Clarke <jclarke@cisco.com>
4+
# All rights reserved.
5+
#
6+
# Redistribution and use in source and binary forms, with or without
7+
# modification, are permitted provided that the following conditions
8+
# are met:
9+
# 1. Redistributions of source code must retain the above copyright
10+
# notice, this list of conditions and the following disclaimer.
11+
# 2. Redistributions in binary form must reproduce the above copyright
12+
# notice, this list of conditions and the following disclaimer in the
13+
# documentation and/or other materials provided with the distribution.
14+
#
15+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25+
# SUCH DAMAGE.
26+
#
27+
# This script retrieves the ENTITY-MIB tree from a device via NETCONF and
28+
# prints it out in a "pretty" XML tree.
29+
#
30+
31+
import netsnmp
32+
import argparse
33+
import sys
34+
35+
if __name__ == '__main__':
36+
parser = argparse.ArgumentParser(
37+
prog=sys.argv[0], description='Print ENTITY-MIB data via NETCONF from a device')
38+
39+
parser.add_argument('-a', '--host', type=str, required=True,
40+
help="Device IP address or Hostname")
41+
parser.add_argument('-c', '--community', type=str, required=True,
42+
help="SNMP community string")
43+
parser.add_argument('-v', '--version', type=int, required=True,
44+
help="SNMP version (1 or 2 [for v2c])")
45+
46+
args = parser.parse_args()
47+
48+
if args.version != 1 and args.version != 2:
49+
parser.error('SNMP version must be either 1 or 2')
50+
51+
vars = netsnmp.VarList(netsnmp.Varbind('entityMIB'))
52+
netsnmp.snmpwalk(vars,
53+
Version = args.version,
54+
DestHost = args.host,
55+
Community = args.community)
56+
57+
for var in vars:
58+
print('{}.{} : {}'.format(var.tag, var.iid, var.val))

0 commit comments

Comments
 (0)