ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用python对比华为设备配置是否改变(eNSP模拟器)

2021-03-20 20:32:12  阅读:280  来源: 互联网

标签:__ username eNSP python dev ssh 模拟器 md5 MD5


实验拓扑:

在这里插入图片描述

将路由器桥接到与Linux系统同一网段,保证可以Linux系统和路由器能够通信。

要求:

一共要制作两个函数:
第一个函数用于获取设备配置(注意:华为设备只获取sysname xxx到return之间的部分)。
第二个函数每五秒获取一次设备配置,并计算配置的MD5值。如果和之前的MD5相同就打印MD5,如果不相同就打印告警并退出。

步骤:

1.在AR上配置SSH。(略)
2.创建dev_ssh.py文件,使用paramiko连接AR。

# 导入paramiko模块
import paramiko
import time

# 定义ssh的函数,方便调用
def dev_ssh(ip, username, password, port=22, cmd='dis cu\n'):
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    # 如果没有密钥,添加密钥
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip, port, username, password, timeout=5, compress=True)
    command = ssh.invoke_shell()
    # 保证dis cu能够一次将所有信息显示出来
    command.send('screen-length 0 temporary\n')
    # 输入命令
    command.send(cmd)
    time.sleep(2)
    output = command.recv(65535)
    x = output.decode('ascii')
    # 返回shell界面显示的内容
    return x

# 本地进行测试
if __name__ == '__main__':
    print(dev_ssh('192.168.0.11', 'prin', 'Huawei@123'))

3.创建compare_md5.py文件,获取配置的MD5值并比较。

# 引入dev_ssh.py模块中的dev_ssh函数
from dev_ssh import dev_ssh
# 引入正则表达式的模块
import re
# 引入计算hash值的模块
import hashlib
# 引入time模块
import time

# 定义获取配置的函数
def dev_get_config(ip, username='admin', password='Huawei@123'):
    try:
    # 调用dev_ssh函数得到配置信息
        dev_config_raw = dev_ssh(ip, username, password)
        # 使用正则表示匹配sysname --- return之前的配置信息
        dev_config = re.findall('sysname[\s\S]+return', dev_config_raw)[0]
        # 返回处理后的配置信息
        return dev_config
    except Exception:
        return

# 定义计算和比较MD5值的函数
def check_diff(ip, username='admin', password='Huawei@123'):
# 计算初始的MD5值,并赋值给before_md5变量
    m = hashlib.md5()
    m.update(dev_get_config(ip, username).encode())
    before_md5 = m.hexdigest()
    # 每隔5s检查重新计算一次MD5值,并与初始的MD5值进行对比
    while True:
        time.sleep(5)
        m = hashlib.md5()
        m.update(dev_get_config(ip, username, password).encode())
        # 如果两次对比相同,打印出MD5值
        if before_md5 == m.hexdigest():
            print(before_md5)
        # 如果两次对比不相同,在打印最新的MD5值的同时,退出循环,并且打印告警信息
        else:
            print(m.hexdigest())
            print('MD5 value changed!')
            break

# 进行测试
if __name__ == '__main__':
    check_diff('192.168.0.11', 'prin')

查看结果:

在这里插入图片描述
在程序运行的时候,我们将配置做一定的改变,可以看到MD5值发生了改变,并且有对应的提示。

标签:__,username,eNSP,python,dev,ssh,模拟器,md5,MD5
来源: https://blog.csdn.net/tushanpeipei/article/details/115033407

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有