LD Port Report Project aka Switch Port Mapper Tool

The Port Report Project is essentially a Switch Port Mapper Tool or a Switch Port Mapping Tool like a few other commercial products out there, except The Port Report Project is free. Right now there is no GUI or WEB interface for the project but it is in the works.

This project started off as being a simple 150 line script that did something quite simple… Its only purpose was to find MAC Addresses on a switch. Then I was asked could you also search by IP, so I added that. Now I was asked to search by Port, so I added that. Well you get where this is all going…. My goal now is to build the equivalent of other commercial port mapping tools, but Open Source….

On this page I will be keeping all the updates to this Project, so please keep checking back every now and again for updates.
You can get any revision of the Port Report tool here http://www.linuxdynasty.org/Port-Report-Project/
{quickdown:39}

Any issues with the LD Port Report Project, please discuss here in the forums
This script requires, Pysnmp and Pyasn1. If you have python-setuptools, you can install it by running this..
easy_install pysnmp, easy_install pyasn1

Three things you will need for this script to work..

  1. Pysnmp
  2. Pyasn1
  3. SNMP Access to the switch you want to talk too and its community string.
To make your life easier you should do the following
  1. install python-setuptools
  2. then run easy_install pysnmp
  3. and easy_install pyasn1
  4. or you can download the 2 modules manually.
    pysnmp and pyasn1
  5. then unzip the 2 files and in each directory run python setup.py install

I am using the following revisions from the python cheese shop pysnmp 4.1.12a and pyasn1 0.0.9a

For revision 1.12 and above….. If you installed pyasn1 and pysnmp using easy_install. Please uninstall it now and install the newest revision and run python setup.py install Instead of using easy_install.
Revision history and Examples below…..
Revision 1.13 10/01/09

  • Fixed line 348 as per christianha. return nmac.lower()
    This fix will allow you to pass a MAC in all uppercase and still match though the switch is responding in lowercase.
    00 E0 B8 81 E8 B7 will now match 00 e0 b8 81 e8 b7

Revision 1.12 09/18/09

  • The report option of the script can now follow cdp neighbors using the –follow option or -f.
    When you run the command below it will create ONE CSV file per cdp neighbor it scanned.
    I was able to scan from my core Switch down to the last neighbor in the line ( 44 Neighbors in just under 20 minutes. )
    Which equaled to a little over 4K Mac Addresses
    For instance…port_report.py -d 192.168.101.1 -c public -r -f

Revision 1.11 09/13/09

  • More code clean up and another increase in speed.
  • Also port_report can now follow EtherChannel
  • Added better verbosity
  • Added Sanity Checking for cdp neighbors

 

Revision 1.10 09/09/09

  • Code Clean up and a slight increase in speed ( by a few seconds ) during the search by mac or ip

Revision 1.9
Code changes and Added CDP Support

  • Detect CDP Neighbors during the scan for MAC Addresses or IP Addresses

Revision 1.8
Here is a quick update…..

  • I just add dns reverse lookups to the output of this script.

Revision 1.7
Adds support to the following devices..

  1. Cisco
    • Catalyst 6509 w/ Supervisor 720 running IOS
    • Catalyst 3560
    • Catalyst 3550 (SMI)
    • Cisco CIGESM series Chassis Blades
    • Cisco Catalyst 2960
  2. Foundry
    • Foundry Server Iron
  3. Nortel
    • Nortel Passport 8600
    • Nortel 5520 Ethernet Routing Switch
  4. HP
    • HP Procurve 5406xl

 

Revision 1.6
New additions to this revision ….

  • Support for HP Procurve Switches, ( Tested on the newer versions of HP )
  • combined switch_report.py in port_report.py.
  • Added –verbose flag

Previous Releases….

  • Search by MAC or IP or PORT

 

EXAMPLES BELOW…

Below is an example of the integrated CDP following of switches using the -m ( –mac ) option

 

python port_report.py -d switch -c community -m "00 13 20 16 5f f7" 
Switch Connected to 192.168.101.1 
SwitchPort = GigabitEthernet10/3 
SwitchPortSpeed = 1000mb 
SwitchPortDuplex = fullDuplex 
SwitchVlan = vlan176 
SnmpHostName = requestTimedOut 
SnmpHostDescr = requestTimedOut 
HostMAC = 00 13 20 16 5f f7 
HostIP = 192.168.101.101 
HostName = Pointer Record Not set for 192.168.101.101 

Found 00 13 20 16 5f f7 on 192.168.101.5
Switch Connected to 192.168.101.5 
SwitchPort = GigabitEthernet0/24 
SwitchPortSpeed = 1000mb 
SwitchPortDuplex = fullDuplex 
SwitchVlan = vlan176 
SnmpHostName = No SNMP Access 
SnmpHostDescr = No SNMP Access 
HostMAC = 00 13 20 16 5f f7 
HostIP = None 
HostName = None 

Found 00 13 20 16 5f f7 on 192.168.101.6 
Switch Connected to 192.168.101.6 
SwitchPort = GigabitEthernet0/22 
SwitchPortSpeed = 1000mb 
SwitchPortDuplex = fullDuplex 
SwitchVlan = vlan176 
SnmpHostName = No SNMP Access 
SnmpHostDescr = No SNMP Access 
HostMAC = 00 13 20 16 5f f7 
HostIP = None 
HostName = None 

This MAC 00 13 20 16 5f f7 was finally traced to this switch 192.168.101.6

Below I will show you an example of the listing of MAC Addresses per Port using the n (–pname) option

python port_report.py -d 192.168.101.1 -c community -n "10/3"
SwitchPort = GigabitEthernet10/3
SwitchPortSpeed = 1000mb
SwitchPortDuplex = fullDuplex
SwitchVlan = vlan176
SnmpHostName = requestTimedOut
HostDescr = requestTimedOut
HostMAC  = 00 22 64 bb 3e 17
HostIP = 192.168.101.146
HostName = Pointer Record Not set for 192.168.101.146

SwitchPort = GigabitEthernet10/3
SwitchPortSpeed = 1000mb
SwitchPortDuplex = fullDuplex
SwitchVlan = vlan176
SnmpHostName = requestTimedOut
HostDescr = requestTimedOut
HostMAC  = 00 0c f1 bb bf eb
HostIP = 192.168.101.147
HostName = Pointer Record Not set for 192.168.101.147

SwitchPort = GigabitEthernet10/3
SwitchPortSpeed = 1000mb
SwitchPortDuplex = fullDuplex
SwitchVlan = vlan176
SnmpHostName = requestTimedOut
HostDescr = requestTimedOut
HostMAC  = 00 20 4a 83 20 97
HostIP = 192.168.101.30
HostName = Pointer Record Not set for 192.168.101.30

Below is an example of running the –report option.. Also the report option will save the output to disk in a CSV file.

python port_report.py -d 192.168.101.5 -c community --report
GigabitEthernet0/1,00 1c c0 12 6a 8b,None,None,vlan180,up,up,fullDuplex,1000mb,
GigabitEthernet0/1,00 20 4a 12 2b 68,None,None,vlan180,up,up,fullDuplex,1000mb,
GigabitEthernet0/1,00 12 44 94 dc 40,192.168.101.132,Pointer Record Not set for 192.168.101.132,vlan180,up,up,fullDuplex,1000mb,
GigabitEthernet0/1,00 21 5a c7 81 16,None,None,vlan180,up,up,fullDuplex,1000mb,
GigabitEthernet0/3,00 20 4a 12 2b 71,None,None,vlan180,up,up,halfDuplex,10mb,

Below is an example of searching by IP Addresses -i (–ip)..

python port_report.py -d 192.168.101.1 -c ommunity -i "192.168.101.200"
Switch Connected to 192.168.101.1
SwitchPort = GigabitEthernet1/17
SwitchPortSpeed = 1000mb
SwitchPortDuplex = unknown
SwitchVlan = vlan175
SnmpHostName = zenmon.linuxdynasty.org
SnmpHostDescr = Linux zenmon.linuxdynasty.org 2.6.18-92.1.22.el5 #1 SMP Tue Dec 16 12:03:43 EST 2008 i686HostMAC  = 00 14 38 4f 5e 38HostIP = 192.168.101.200HostName = zenmon.linuxdynasty.org
This entry was posted in Port Report Projects and tagged , . Bookmark the permalink.

Leave a Reply