TelnetCisco.py - A Reusable Module for Accessing Cisco Devices with Python

For one reason or another, Python seems to have been my go to scripting language of choice recently. One of the things that I've been working on is creating a reusable python library for accessing Cisco devices via telnet. It's pretty basic code right now, but I'll be expanding upon what I have soon and will be sharing via github.com as well. For now, here is my simple library.


class TelnetCisco:

def __init__(self, userName, userPass, enablePass, host):
self.userName = userName
self.userPass = userPass
self.enablePass = enablePass
self.host = host

def getCreds(self):
import getpass

self.userName = raw_input("Username: ")
self.userPass = getpass.getpass("User Password: ")
self.enablePass = getpass.getpass("Enable Password: ")

return self.userName, self.userPass, self.enablePass

def credsFile(self, authfile):
import os, sys

if os.path.isfile(authfile):
login = open(authfile, "r")
self.userName = login.readline()
self.userName = self.userName.replace("username = ", "")
self.userName = self.userName.replace("\n", "")
self.userPass = login.readline()
self.userPass = self.userPass.replace("password = ", "")
self.userPass = self.userPass.replace("\n", "")
self.enablePass = login.readline()
self.enablePass = self.enablePass.replace("enable = ", "")
self.enablePass = self.enablePass.replace("\n", "")
login.close()
else:
print "Error:", authfile, "doesn't exist!"
sys.exit(2)

return self.userName, self.userPass, self.enablePass

def devLogin(self, devType):
import telnetlib, re, sys

TelnetCisco.devType = devType
telnet = telnetlib.Telnet(self.host)

#usermode = re.match("(.*)" + ">", ">")
#enablemode = re.match("(.*)", "#")

cmds2exe = ['show arp']

if devType == "ios":
telnet.read_until("Username: ", 20)
telnet.write(self.userName + "\r")
telnet.read_until("Password: ", 20)
telnet.write(self.userPass + "\r")
telnet.read_until(self.host + ">")
telnet.write("enable\r")
telnet.read_until("Password: ", 20)
telnet.write(self.enablePass + "\r")
telnet.read_until(self.host + "#")
telnet.write("term length 0\r")
telnet.read_until(self.host + "#")
#telnet.write("show arp\r")
#print telnet.read_until(self.host + "#")
for command in cmds2exe:
telnet.write(command + "\r")
print telnet.read_until(self.host + "#")
telnet.close()
else:
print "Error:", devType, "is unknown by this script.\n"
sys.exit(2)

return devType, self.host

def codeDebug(self):
print "### CODE DEBUG ###"
print "Username:", self.userName
print "User Password:", self.userPass
print "Enable Password:", self.enablePass
print "Host: ", self.host
print "Device Type: ", TelnetCisco.devType
print "### CODE DEBUG ###"



Usage is pretty simple. You need to specify a username, password, enable password, and host variable. To activate the module. The easiest way is to do it within the your python script.


import TelnetCisco

username = 'somejoe'
password = 'somepassword'
enable = 'someenable'
host = 'somerouter'

somejob = TelnetCisco(username, password, enable, host)
somejob.devLogin("ios")


Of course, the module also has options to specify a authentication file (credsFile(authfile)) or prompt prompt for your credentials (getCreds()). At the moment, the script only runs a 'show arp' on your devices. I'm still working on how I want to implement feeding commands to your devices. I'll post an update as I get more functionality working.