Python与Cisco的事儿之四

发布时间:2019-09-16 07:39:01编辑:auto阅读(1573)

       以下代码实现的流程: cdp -->获取相应链接的信息-->自动写进设备相对应的端口--->configure保存-->configure备份到TFTP服务器!

    #!/usr/bin/python
    
    from netmiko import ConnectHandler
    from netmiko.ssh_exception import NetMikoTimeoutException
    import time
    import sys
    import getpass
    import datetime
    
    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 cdpconfig(self):
                    self.output = self.connect.send_command('show cdp nei')
                    lines = self.output.splitlines()[5:-2]
                    #print lines
                    hostname = None
                    config = []
                    for line in lines:
                        words = line.split()
                        if len(words) == 1:
                            hostname = words[0].split('.')[0]
                        elif hostname is None:
                            hostname = words[0].split('.')[0]
                            local = ''.join(words[1:3])
                            remote = ''.join(words[-2:])
                            description = '_'.join((hostname,remote))
                            config.append('interface' + ' '+ local)
                            config.append('description' + ' ' + description)
                            hostname = None
                        else:
                             local = ''.join(words[0:2])
                             remote = ''.join(words[-2:])
                             description = '_'.join((hostname,remote))
                             config.append('interface' + ' '+ local)
                             config.append('description' + ' ' + description)
                             hostname = None
                    self.config ='\n'.join(config)
            
            def configure(self):
                    configure = self.connect.send_config_set(self.config)
                    saveconfigure = self.connect.send_command('write  memory')
    
            
            def backup(self,tftpip):
                     date = datetime.datetime.now().strftime('%Y-%m-%d')
                     bkhostname   = '_'.join((self.hostname,date))
                     backupcmd    =  'copy running-config tftp:'
                     self.tftpip  =  tftpip
                     bkconf  = '\n'.join((backupcmd,self.tftpip,bkhostname))
                     self.bkconf  = self.connect.send_command(bkconf)
    
            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()
            for iplist in open("/opt/other/ip.txt"):
                    try:
                       switch = CiscoNetwork('admin','Password.123')
                       switch.CiscoDevice(iplist)
                       switch.gethostname()
                       switch.cdpconfig()
                       switch.configure()
                       switch.backup('172.16.200.201')
                       switch.close()
                    except (EOFError, NetMikoTimeoutException):
                       print ('Can not connect to Device!')

         01.png

关键字