Python与Cisco的事儿之五
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python与Cisco的事儿之五相关的知识,希望对你有一定的参考价值。
以下代码测试单个子网循环的方法:
#!/usr/bin/python from netmiko import ConnectHandler from netmiko.ssh_exception import NetMikoTimeoutException from IPy import IP import time import sys import getpass import re import io import StringIO class CiscoNetwork(): def __init__(self,username,password): self.username = username self.password = password def CiscoDevice(self,iplist): self.device={'device_type':'cisco_ios', 'username':self.username, 'password':self.password, 'ip':iplist } print('-'*100) print "[+]connect to network device... %s" %(iplist) self.connect = ConnectHandler(**self.device) self.connect.enable() def gethostname(self): self.hostname = self.connect.find_prompt() self.hostname = self.hostname.replace("#","") print self.hostname def interfaceInfo(self,cmd): result = self.connect.send_command(cmd) for interface in result.split('\n'): if 'up' in interface: #print interface lines=StringIO.StringIO(interface) data = lines.read() intername = ' '.join(re.findall('^Eth.+\/\d',data)) loopback = ' '.join(re.findall('Loopback[0-9]',data)) interIP = re.findall( '\.'.join(['\d{1,3}']*4),data) if intername: print intername ,':', ''.join(interIP) else: print loopback , ':', ''.join(interIP) def show(self,cmd): result = self.connect.send_command(cmd) lines = StringIO.StringIO(result) data = lines.read() uptime = re.findall('uptime.+',data) id = re.findall('\d{8}',data) soft = re.findall('L3_.+\\.bin',data) print 'Device UPtime:', ''.join(uptime) print 'Device ID:', ''.join(id) print 'Soft Version:',''.join(soft) def close(self): if self.connect is not None: self.connect.disconnect() self.connect = None print '[+] Network devices complete all settings!' if __name__ == '__main__': print "[+] This Program is beging done......." #username = raw_input('Username:') #password = getpass.getpass() ipadd = IP('10.0.0.0/30') for ips in ipadd: ipadds = StringIO.StringIO(ips) ipadds = '\n'.join(ipadds).splitlines() for iplist in ipadds: try: switch = CiscoNetwork('admin','Password.123') switch.CiscoDevice(iplist) switch.gethostname() switch.interfaceInfo('show ip int brief') switch.show('show version') switch.close() except (EOFError, NetMikoTimeoutException): print('Can not connect to Device!')
如何是多个子网需增加多一层循环,代码更改如下:
if __name__ == '__main__': print "[+] This Program is beging done......." #username = raw_input('Username:') #password = getpass.getpass() ipadd = IPSet([IP('10.0.0.0/30'),IP('10.0.1.0/30'),IP('10.0.2.0/30')]) for ips in ipadd: ipadd = StringIO.StringIO(ips) ipadds = '\n'.join(ipadd).splitlines() for ip01 in ipadds: ip02=IP(ip01) for ip03 in ip02: ip03 = StringIO.StringIO(ip03) ip03 = '\n'.join(ip03).splitlines() for iplist in ip03: try: switch = CiscoNetwork('admin','Password.123') switch.CiscoDevice(iplist) switch.gethostname() switch.interfaceInfo('show ip int brief') switch.show('show version') switch.close() except (EOFError, NetMikoTimeoutException): print('Can not connect to Device!')
以上是关于Python与Cisco的事儿之五的主要内容,如果未能解决你的问题,请参考以下文章