以下代码测试单个子网循环的方法:

#!/usr/bin/python from netmiko import ConnectHandlerfrom netmiko.ssh_exception import NetMikoTimeoutExceptionfrom IPy import IPimport timeimport sysimport getpassimport reimport io import StringIOclass 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!')

  

  01.png

  

  如何是多个子网需增加多一层循环,代码更改如下:

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!')