Python与Cisco的事儿之三

发布时间:2019-09-17 07:44:29编辑:auto阅读(1548)

       以下代码可以实现登录网络设备后通过show cdp nei 命令查看邻居设备,然后利用拼接的方式来增加描述,最后再写进相对应的网络设备的接口。

    #!/usr/bin/python
    
    from netmiko import ConnectHandler
    from netmiko.ssh_exception import NetMikoTimeoutException
    import time
    import sys
    import getpass
    import StringIO
    import pprint
     
    
    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("#","")
                    
    
            def show(self):
                    self.output = self.connect.send_command('show cdp nei')
                    lines = self.output.splitlines()[5:-2]
                    hostnames = None
                    config = []
                    for line in lines:
                        words = line.split()
                        if len(words) == 1:
                            hostnames = words[0].split('.')[0]
                        elif hostnames is None:
                            hostnames = words[0].split('.')[0]
                            local = ''.join(words[1:3])
                            remote = ''.join(words[-2:])
                            description = '_'.join((hostnames,remote))
                            config.append('interface' + ' ' + local)
                            config.append('description' +' ' + description)
                            hostnames = None
                        else:
                             local = ''.join(words[0:2])
                             remote = ''.join(words[-2:])
                             description = '_'.join((hostnames,remote))
                             config.append('interface' + ' '+ local)
                             config.append('description' + ' ' + description)
                             hostnames = None
                    self.config='\n'.join(config)
            
            def configure(self):
                    configure = self.connect.send_config_set(self.config)
                    saveconfigure = self.connect.send_command('write  memory')
                    print  configure
                    print saveconfigure 
                 
            def close(self):
                    if self.connect is not None:
                           self.connect.disconnect()
                           self.connect = None
    
    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.show()
                       switch.configure()
                       switch.close()
                    except (EOFError, NetMikoTimeoutException):
                       print ('Can not connect to Device')

       01.png


       02.png

      




关键字