Python与Cisco的事儿之三

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python与Cisco的事儿之三相关的知识,希望对你有一定的参考价值。

   以下代码可以实现登录网络设备后通过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')

   技术分享图片


   技术分享图片

  




以上是关于Python与Cisco的事儿之三的主要内容,如果未能解决你的问题,请参考以下文章

Python与Cisco的事儿之四

Python与Cisco的事儿之三

Python与Cisco 的事儿

聊聊Cisco 3650交换机系统升级那点事儿!

Cisco ISE1.4升级到2.2的那点事儿……

Cisco思科路由器HSRP配置和排障那些事儿~~