Apr 122009
 

 

In my previous HowTO, I created the get_port.py script. Now this script did the job, but had a few faults in it.

  • Major fault was the fact that the script could not match multiple MAC
    Addresses per port
  • Also if the port had multiple MAC Addresses it usually would fail while doing the search
  • Better error checking. For example if you searched by IP Address before, the error was ambiguous.
    Now the error will say the IP Address you are looking for is not in the ARP Table

This script has been heavily tested on Cisco Core Switches and on Cisco Catalyst Switches. So far no issues like in the previous one.
I will post some of my output below so you can get an idea on how the script works.

Also to see the script in action immediately, you should run the command like this..

python port_report.py -d 192.168.101.1 -c public -n "1/40"

The reason you should run the above first, is that if the ip address you are searching for is not in the ARP table you will not get any results. Also I have already seen instance where a someone runs the script and uses the search for mac function and it does not return a mac. One reason this happens, is because the mac you are searching for is not on the switch you are walking or not part of any vlan.So by passing a port, the script  will scan every vlan on the switch for MAC Addresses connected to that port.This script uses the dot1d tables to get the MAC info as per the CISCO website.

Update 1.1

  • Fixed Port Matching…
  • Now for the -n option you can pass the port number ’1/1′ or the Port Name as per ifName “Gi1/1″
    1. Pysnmp
    2. Pyasn1
    3. SNMP Access to the switch you want to talk too and its community string.
  • Three things you will need for this script to work..

    1. install python-setuptools
    2. then run easy_install pysnmp
    3. and easy_install pyasn1
  • To make your life easier you should do the following

    I am using the following revisions from the python cheese shop pysnmp 4.1.7a  and pyasn1 0.0.6a

    You can download the script here
    port_report.py

    {quickdown:39}
    Please post anything related to this script on this forum link http://www.linuxdynasty.org/forums/Scripting/scripting/port_report
    Unless it is just a comment, thank you…

    Also if you download this script on other Platforms besides Cisco, please let me know if it works, so I can added under platforms supported.

    Continue reading “HowTo find the port on a switch that a host belongs to, the easy way, part 2” »

Apr 072009
 

 

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.

The other day I was speaking to a buddy of mine. I asked him how cool would it be, if you could just get the port on a switch that you are plugged into, in one line?? So since I thought about it… I figured why not…. I just finished writing the first revision ( I’m assuming more to come). I must say that I am quite pleased with it. Right now you can pass the switch you want to talk too, the community string, and either the MAC or IP address of the host device. In return you will get the MAC Address, IP Address, Port Description (VLAN), and Port you are plugged into.

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.7a  and pyasn1 0.0.6a

 

Revision 2, will even add more features like…

  • Trying to find out what is plugged into a certain Port.
  • Passing a list of switches
  • follow chained switches
  • Gettinginfo from non vlan ports.
  • If you have more ideas, please let me know..

Update 1.7….This is a big update for Port Report…. In this revision the following brands and devices are supported

  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

The Script has been tested with the above devices… If you have run this script against other devices, please let us know. Also the speed in the report function has drastically increased. I ran this script against a 6509 with 800+ devices connected to it in just over 2 minutes.

You can download the script here {quickdown:44}

Update..  revision 1.6 has been released.

  • Support for HP PROCURVE switches
  • Added Verbose option
  • Combined switch_report.py in port_report.py

Update, version 1.4…
Only changes that have been made are below..

  • Code Clean up
  • added check by port name
  • Added Error Checking
  • fixed a few bugs with matching the ifIndex port to the bridgeport

So from the looks of it this script does work on Cisco Switches,which has been tested. But does not work on HP Procurve switches. I would like to add this feature to this script but I do not have HP switches to test on.  If anyone would like me to add this feature to HP switches oranyother manufacturer please let me know and maybe we can work together to get it working.

     example below...    python get_port.py -d "switch" -c "community" -m "mac address"

    MAC Address = 00 14 28 1f 2d 38    IP Address = 192.168.101.100    PortDescr = Vlan175    Port = GigabitEthernet1/17

    python get_port.py -d "switch" -c "community" -i "ip address"

    MAC Address = 00 14 28 1f 2d 38    IP Address = 192.168.101.100    PortDescr = Vlan175    Port = GigabitEthernet1/17

Please post any questions related to this script here.. http://www.linuxdynasty.org/forums/Scripting/scripting/port_report
You can download the script here… get_port.py

python port_report.py -d 192.168.101.1 -c public --report GigabitEthernet1/11,00 21 5a 80 0b a6,192.168.101.23,vlan51,up,up,fullDuplex,1gbps,GigabitEthernet1/12,00 12 79 83 3b f3,192.168.101.24,vlan51,up,up,fullDuplex,1gbps,

python port_report.py -d 192.168.101.1 -c public -i "192.168.101.201"This IPAddress is not in the ARP table

python port_report.py -d 192.168.101.1 -c public -i "192.168.101.202"--verboseFri Apr 24 15:15:41 2009  Main StartedFri Apr 24 15:15:41 2009  In snmpget function Fri Apr 24 15:15:42 2009  Out of snmpget function Cisco Internetwork Operating System Software IOS (tm) s72033_rp Software (s72033_rp-JK9S-M), Version 12.2(17d)SXB7, RELEASE SOFTWARE (fc2)Technical Support: http://www.cisco.com/techsupportCopyright (c) 1986-2005 by cisco Systems, Inc.Compiled ThuFri Apr 24 15:15:42 2009  Finished Checking for macFri Apr 24 15:15:42 2009  Found IPFri Apr 24 15:15:42 2009  192.168.101.202 is a Cisco Switch Fri Apr 24 15:15:42 2009  In generic_mac_or_ip Function00 14 38 4f 5e 38 Fri Apr 24 15:15:42 2009  Looping Through CommTableFri Apr 24 15:15:42 2009  In CommTable For LoopFri Apr 24 15:15:42 2009  First If Statement Fri Apr 24 15:15:42 2009  Looping Through CommTableFri Apr 24 15:15:42 2009  In CommTable For LoopFri Apr 24 15:15:42 2009  Looping Through CommTableFri Apr 24 15:15:42 2009  In CommTable For Loop

python port_report.py -d 192.168.101.1 -c public -i "192.168.101.209"MAC  = 00 14 38 7f 6e 38Port = GigabitEthernet1/17Vlan = 175IPAddr = 192.168.101.209

python port_report.py -d 192.168.101.1 -c public -m "00 14 38 4f 5e 39"MAC  = 00 14 38 4f 5e 39Port = GigabitEthernet1/17Vlan = 175IPAddr = 192.168.101.201

python port_report.py -d 192.168.101.1 -c public -n "1/40"Port 1/40 has the below MAC Addresses associated with itMAC  = 00 1b 95 97 3c 81Port = GigabitEthernet1/40Vlan = 1IPAddr = The IP Address for this MAC is not in the ARP Table

MAC  = 00 15 fa b4 10 06Port = GigabitEthernet1/40Vlan = 174IPAddr = The IP Address for this MAC is not in the ARP Table

Total MAC Addresses associated with this interface 2

python port_report.py -d 192.168.101.1 -c public -n "1/2"Port 1/2 has the below MAC Addresses associated with itMAC  = 08 00 0f 20 b3 aaPort = GigabitEthernet1/2Vlan = 176IPAddr = 192.168.101.104

MAC  = 08 00 0f 21 d3 78Port = GigabitEthernet1/2Vlan = 173IPAddr = 192.168.101.105

MAC  = 08 00 0f 20 b3 aaPort = GigabitEthernet1/2Vlan = 175IPAddr = 192.168.101.115

Warning: fopen(/home/dynasty/linuxdynasty.org/wp-content/plugins/wp-google-plus-one/lib/standard.txt) [function.fopen]: failed to open stream: No such file or directory in /home/dynasty/linuxdynasty.org/wp-content/plugins/wp-google-plus-one/plusone.php on line 104

Warning: fread(): supplied argument is not a valid stream resource in /home/dynasty/linuxdynasty.org/wp-content/plugins/wp-google-plus-one/plusone.php on line 105

Warning: fclose(): supplied argument is not a valid stream resource in /home/dynasty/linuxdynasty.org/wp-content/plugins/wp-google-plus-one/plusone.php on line 106
.