|
Programming HowTo's -
Python HowTo's
|
|
Written by Allen Sanabria
|
|
Sunday, 07 February 2010 16:29 |
|
In this HowTo, I will show you how you can get statistics off of the Netscaler without using SNMP. You might be asking why would I want to do that?? Well like many other devices that support SNMP, the Netscaler makes use of dynamic OID creation. For those of you that do not understand what I mean. Dynamic OID creation, is the way that Networking devices give OID's to variables that are not static in the device itself.
Here are some common static variables/OID's, amongst most devices out there.
- CPU Utilization
- Disk Utilization
- Memory Utilization
- TCP Statistics
Here are some common, non-static variables/OID's..
- A Load Balanced Virtual Server
- Statistics about LUNS
- Statistics about Services
Now you can get these statistics off of the SNMP based device. But if and when this device is rebooted, more then likely the OID has changed. Now you are stuck with the task, of finding the new OID. Since the Netscalers have a SOAP Based API, we can get those same statistics with out ever needing to know the OID.
Here I have attached a script that I wrote, using Python and Suds to connect to the Netscaler. This script works perfectly with Zenoss and its DataPoint structure. Download Get Netscaler Stats | | File Title: | Get Netscaler Stats (Details) | | File Type: | py | | File Version: | 1.0.1 | | File Size: | 10.00 Kb | | License: | | | File Author: | Allen Sanabria | | File HomePage: | | | Downloads: | 8 | | Rating: | ( Votes) | | Your Vote: | |
| |
|
|
Last Updated on Thursday, 11 February 2010 10:46 |
|
Read more...
|
|
Programming HowTo's -
Python HowTo's
|
|
Written by Allen Sanabria
|
|
Monday, 01 February 2010 08:22 |
|
Recently I just started to use the Citrix Netscalers again ( Load Balancers ). Being the person that I am, I wanted a way to grab the information using the SOAP API. Now Citrix has a ton of documentation for Perl/C/C# and Java ( None for Python ). SOAP client support has not been the best for Python, in my opinion. I know you have soappy/ZSI, which I have had issues with consuming Broken WSDL files ( Having to fix the Broken WSDL file manually, SUCKS!).
Just 2 weeks ago, I encounterd SUDS. This module is by far, the best SOAP client for Python. There documentation is simple and straight to the point, with a bunch of nice samples to get you on your way.
Install SUDS before proceeding further. You can get suds from here. https://fedorahosted.org/suds/ Connection to my netscaler was as simple as this...
Python 2.4.3 (#1, Sep 3 2009, 15:37:37) [GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from suds.client import Client >>> url = "http://nsip/api/NSConfig.wsdl" >>> from suds.xsd.doctor import * >>> imp = Import('http://schemas.xmlsoap.org/soap/encoding/') >>> imp.filter.add("urn:NSConfig") >>> d = ImportDoctor(imp) >>> client = Client(url, doctor=d, location="http://nsip/soap/") >>> client.service.login(username="login", password="pass") (simpleResult){ rc = 0 message = "Done" } >>>
|
|
Last Updated on Monday, 01 February 2010 21:26 |
|
Read more...
|
|
Programming HowTo's -
Python HowTo's
|
|
Written by Allen Sanabria
|
|
Thursday, 10 September 2009 18:57 |
|
This new script is for Network Engineers and System Engineers a like. Though I must admit it is more for the System Engineers who do not have access to the command line on the CDP enabled device. Have you ever wanted to know what CDP enabled devces ( and info related to those devices ) that were directly connected to your your Core Switch? But you just do not have the access to get that info. But you do have access to the monitoring system, which has SNMP access to the Core Switch.
Well this is where my script comes into play... Stay tuned for updates, as I'm planning on adding to this script. So you can run it with the detail option and a detail port option. Please post any support related question in the forums here..http://www.linuxdynasty.org/forums/Scripting/scripting/sh_cdp_neighbor_help
Revision 1.2 9/13/2009
- Catch all CDP connected switches, even if there is more then 1 switch seen through 1 port.
Revision 1.1 9/11/2009
- Added --type option ( --type=detail )
Revision 1.0 9/10/2009
- This script is the equivalent of sho cdp nei on a cisco switch, but this is using snmp.
When you log into a switch and run a show cdp neighbor, your info might look a little like this..
show cdp neighbor Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone Device ID Local Intrfce Holdtme Capability Platform Port ID 71_5th_SW1 Gig 10/15 145 S I WS-C2960G-Gig 0/48 D_M1001_V180_SW1 Gig 1/42 132 S I WS-C2960G-Gig 0/1 D_M1001_V181_SW1 Gig 1/46 136 S I WS-C2960G-Gig 0/1 D_M1001_V181_SW2 Gig 1/47 166 S I WS-C2960G-Gig 0/1 D_M1001_V180_SW3 Gig 1/43 147 S I WS-C2960G-Gig 0/1 D_M1001_V181_SW3 Gig 1/48 158 S I WS-C2960G-Gig 0/1 D_M1001_V180_SW2 Gig 1/41 141 S I WS-C2960G-Gig 0/1 D_M1001_V181_SW4 Gig 1/44 179 S I WS-C2960G-Gig 0/1 D_M1001_V180_SW4 Gig 1/40 145 S I WS-C3560G-Gig 0/1 D_M701_V177_SW4 Gig 10/7 174 S I WS-C2970G-Gig 0/25 D_M701_V177_SW1 Gig 10/6 154 S I WS-C2970G-Gig 0/25 Router Gig 10/1 162 R S WS-C6513 Gig 9/9 Router1 Gig 10/14 168 R S WS-C6513 Gig 9/16 79_18th_Fl_SW1 Gig 10/12 174 S I WS-C2960G-Gig 0/48 D_1700_V187_SW1 Gig 10/13 129 S I WS-C3560G-Gig 0/28 D_1700_V187_SW3 Gig 10/10 146 S I WS-C2960G-Gig 0/48 D_1700_V187_SW2 Gig 10/9 148 S I WS-C2960G-Gig 0/48 D_522_V176_SW1 Gig 10/3 121 S I WS-C2970G-Gig 0/25 D_522_V176_SW4 Gig 10/4 125 S I WS-C2970G-Gig 0/25 D_CL001_V200_SW1 Gig 10/11 125 S I WS-C2960G-Gig 0/24 2W_4507R Gig 7/2 147 R S I WS-C4507R Gig 3/9
Now this is how it will look if you run sh_cdp_neighbor.py script...
|
|
Last Updated on Saturday, 12 September 2009 23:14 |
|
Read more...
|
|
Programming HowTo's -
Python HowTo's
|
|
Written by Allen Sanabria
|
|
Sunday, 12 April 2009 17:07 |
|
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
-
- install python-setuptools
- then run easy_install pysnmp
- 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
Download LD Port Report | | File Title: | LD Port Report (Details) | | File Type: | py | | File Version: | 1.13 | | File Size: | 43.83 Kb | | License: | | | File Author: | Allen Sanabria | | File HomePage: | | | Downloads: | 338 | | Rating: | ( Votes) | | Your Vote: | |
| |
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.
|
|
Last Updated on Tuesday, 08 September 2009 11:12 |
|
Read more...
|
|
Programming HowTo's -
Python HowTo's
|
|
Written by Allen Sanabria
|
|
Tuesday, 07 April 2009 10:52 |
|
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..
- Pysnmp
- Pyasn1
- SNMP Access to the switch you want to talk too and its community string.
To make your life easier you should do the following
- install python-setuptools
- then run easy_install pysnmp
- and easy_install pyasn1
- or you can download the 2 modules manually.
pysnmp and pyasn1
- 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
- Cisco
- Catalyst 6509 w/ Supervisor 720 running IOS
- Catalyst 3560
- Catalyst 3550 (SMI)
- Cisco CIGESM series Chassis Blades
- Cisco Catalyst 2960
- Foundry
- Nortel
- Nortel Passport 8600
- Nortel 5520 Ethernet Routing Switch
- HP
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 Download Port Report 1.9 | | File Title: | Port Report 1.9 (Details) | | File Type: | py | | File Version: | 1.9 | | File Size: | 37.70 Kb | | License: | | | File Author: | Allen Sanabria | | File HomePage: | | | Downloads: | 123 | | Rating: | ( Votes) | | Your Vote: | |
| |
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"--verbose Fri Apr 24 15:15:41 2009 Main Started Fri 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/techsupport Copyright (c) 1986-2005 by cisco Systems, Inc. Compiled Thu Fri Apr 24 15:15:42 2009 Finished Checking for mac Fri Apr 24 15:15:42 2009 Found IP Fri 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 Function 00 14 38 4f 5e 38 Fri Apr 24 15:15:42 2009 Looping Through CommTable Fri Apr 24 15:15:42 2009 In CommTable For Loop Fri Apr 24 15:15:42 2009 First If Statement Fri Apr 24 15:15:42 2009 Looping Through CommTable Fri Apr 24 15:15:42 2009 In CommTable For Loop Fri Apr 24 15:15:42 2009 Looping Through CommTable Fri 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 38 Port = GigabitEthernet1/17 Vlan = 175 IPAddr = 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 39 Port = GigabitEthernet1/17 Vlan = 175 IPAddr = 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 it MAC = 00 1b 95 97 3c 81 Port = GigabitEthernet1/40 Vlan = 1 IPAddr = The IP Address for this MAC is not in the ARP Table
MAC = 00 15 fa b4 10 06 Port = GigabitEthernet1/40 Vlan = 174 IPAddr = 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 it MAC = 08 00 0f 20 b3 aa Port = GigabitEthernet1/2 Vlan = 176 IPAddr = 192.168.101.104
MAC = 08 00 0f 21 d3 78 Port = GigabitEthernet1/2 Vlan = 173 IPAddr = 192.168.101.105
MAC = 08 00 0f 20 b3 aa Port = GigabitEthernet1/2 Vlan = 175 IPAddr = 192.168.101.115
|
|
Last Updated on Tuesday, 08 September 2009 11:12 |
|
Programming HowTo's -
Python HowTo's
|
|
Written by Allen Sanabria
|
|
Friday, 03 April 2009 21:00 |
|
Today a friend of mine wanted to know how he can check the status and or speed of multiple Network Interfaces/Ports on a device ( Switch, Router, Server, etcc ) using SNMP. Specifically he wanted to know if the Interfaces/Ports are Operationally Up or Down and also if it is Administratively. Then he also wanted to know the speed of the Interfaces/Ports that were Up or Down.
Now you can easily get this information through SNMP or if you have a monitoring tool like Zenoss. But he wanted a command line script that would run fairly quickly and either print the results to STDOUT or that he can pipe the ouput in an email.
So I decided, ok I'll wite you a quick script in Python that will get you that information. FYI, I'm thinking of making this script compatible with the Nagios API. If you want this feature please let me know... Below I will give you some examples of the script....
python check_int_speed.py --device zenoss --community "public" --astatus "Up" --ostatus "Up" lo is Administratively Up and Operationally Up and running at 10mbs eth0 is Administratively Up and Operationally Up and running at 1gbps
|
|
Last Updated on Friday, 03 April 2009 21:38 |
|
Read more...
|
|
|