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

   01.png


   02.png

  




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章