pyhton对网络设备的日常巡检

  利用python对网络设备的日常巡检,主要是防火墙,交换机,负载均衡。方式是用Telnet,或者SSH2。SSH1呢还在研究当中。

  首先说下使用Telnet。可以使用pyhton的telnetlib模块(这个模块是自带的,只需要定义import telnetlib就可以了)。Telnet的方式比较简单,主要是针对交换机,核心思想就是通过账号密码telnet交换机,然后输入命令,取返回值,再提取需要的数据,最后做表。根据不同的设备,写不同的脚本,最后整合一下。(当然第一次整合特别繁琐,虽然我们机房都是华为的交换机,但是型号不同,板卡数量不同,命令和返回值都截然不同,需要更多的耐心和时间)

命令如下:

        tn = telnetlib.Telnet(ip, port = 23, timeout = 10)
        tn.set_debuglevel(2)
        tn.read_until('Username:')                           
        tn.write(username + '\n')                         
        tn.read_until('Password:')
        tn.write(password1 + '\n')   #行进登录操作,账号密码                          
        tn.read_until('>')           #当读取返回值为‘>’时输入命令,>即用户模式
        tn.write(‘命令’)
        log_file = open(txt, "w+")   #打开创建好的TXT,把取到的返回值存入TXT
        tn.write('qquit'+'\n')
        ret = tn.read_until('uit')
        log_file.write(ret)
        log_file.flush()
        log_file.close()
        tn.close()
        s = linecache.getline(txt,33)#打开TXT,找到需要的数据并输入到excel表中,
        val=s.split()                  #就从哪一行,第几列去值,当然可以利用val[][]的字符串
        t = val[-1]                    #技巧
        ws_newWb.write(i, 4, t);#内存
        s = linecache.getline(txt,39)
        val=s.split()
        t = val[-3]
        ws_newWb.write(i, 3, t);#CPU
        s = linecache.getline(txt,21)
        val=s.split()
        t = val[-1]
        ws_newWb.write(i, 6, t);#温度
        linecache.clearcache()
然后就是SSH了,主要是用于防火墙和负载均衡
一般来说SSH2通过 paramiko这个模块来实现SSH2登录,这个模块不是自带的安装有几个步骤,
第一,安装python的VCForPython27.msi(这个是针对用window跑脚本才需要的)
第二,安装pycrypto-2.6.win-amd64-py2.7
第三,安装paramiko
安装模块也是比较麻烦的,最好使用easy_install 来安装很方便(具体操作呢,度娘)
    ssh = paramiko.Transport(ip,22)
    ssh.connect(username=“用户名”, password=“密码”)
    chan=ssh.open_session()
    chan.settimeout(60)
    chan.get_pty()
    chan.invoke_shell()
    log_file=open(txt,'w+')
    time.sleep(1)
    chan.send('命令')
    time.sleep(1)
    log_file.write(chan.recv(65535))
    log_file.flush()
    log_file.close() 
    ssh.close()

因为使用ssh登录呢,在你输入值以后不会像Telnet那样直接给你返回值,你需要通过chan.recv

的方式来取,其中需要停顿,不然会导致输入错误,所以我加入了time.sleep(当然time模块也是需要定义的)

取值的方法更Telnet的方法一样,就不在重复说了

还有一点就是通过python对excel的操作,我把设备的账号密码保存在excel表中,然后读取的。读取到的值是带有格式的,需要对其进行字符转换,也就是加一个str()即可。

总的来说,技术含量不高,主要是需要耐心。菜鸟第一次写类似的文档,表述能力还需要提高,谢谢大家