2401_85775119 2025-01-06 18:07 采纳率: 0%
浏览 82

python做ensp网络自动化运维的😔,求完整代码 🥺

项目所实现的功能,如使用telnetlib下发网络、使用paramiko实现网络设备自动化巡检、使用netmiko发现网络、使用PySNMP获取网络数据等;是华为的ensp

img

  • 写回答

2条回答 默认 最新

  • GISer Liu 2025-01-06 22:14
    关注

    该回答引用自GPT-deepseek, 由博主 GISer Liu 编写:

    问题分析

    用户希望使用Python实现华为ENSP(Enterprise Network Simulation Platform)网络自动化运维,具体功能包括:

    1. 使用telnetlib下发网络配置。
    2. 使用paramiko实现网络设备自动化巡检。
    3. 使用netmiko发现网络设备。
    4. 使用PySNMP获取网络数据。

    解决方案

    为了实现上述功能,我们需要分别编写代码来实现每个功能模块。以下是每个模块的详细实现思路和代码。

    1. 使用telnetlib下发网络配置

    telnetlib是Python标准库中的一个模块,用于通过Telnet协议与远程设备进行交互。我们可以使用它来登录到网络设备并下发配置。

    import telnetlib
    
    def telnet_configure(host, username, password, commands):
        try:
            # 连接到设备
            tn = telnetlib.Telnet(host)
    
            # 输入用户名
            tn.read_until(b"Username: ")
            tn.write(username.encode('ascii') + b"\n")
    
            # 输入密码
            tn.read_until(b"Password: ")
            tn.write(password.encode('ascii') + b"\n")
    
            # 下发配置命令
            for cmd in commands:
                tn.write(cmd.encode('ascii') + b"\n")
    
            # 关闭连接
            tn.write(b"exit\n")
            tn.close()
            print(f"配置已成功下发到 {host}")
        except Exception as e:
            print(f"连接或配置下发失败: {e}")
    
    # 示例使用
    host = "192.168.1.1"
    username = "admin"
    password = "password"
    commands = ["interface GigabitEthernet0/0/1", "ip address 192.168.2.1 255.255.255.0", "no shutdown"]
    
    telnet_configure(host, username, password, commands)
    

    2. 使用paramiko实现网络设备自动化巡检

    paramiko是一个用于SSH连接的Python库,我们可以使用它来登录到网络设备并执行巡检命令。

    import paramiko
    
    def ssh_inspection(host, username, password, commands):
        try:
            # 创建SSH客户端
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
            # 连接到设备
            ssh.connect(host, username=username, password=password)
    
            # 执行巡检命令
            for cmd in commands:
                stdin, stdout, stderr = ssh.exec_command(cmd)
                print(f"命令 '{cmd}' 的输出:\n{stdout.read().decode()}")
    
            # 关闭连接
            ssh.close()
            print(f"巡检已完成 {host}")
        except Exception as e:
            print(f"SSH连接或巡检失败: {e}")
    
    # 示例使用
    host = "192.168.1.1"
    username = "admin"
    password = "password"
    commands = ["show version", "show running-config", "show interfaces"]
    
    ssh_inspection(host, username, password, commands)
    

    3. 使用netmiko发现网络设备

    netmiko是一个基于paramiko的库,专门用于网络设备的自动化操作。我们可以使用它来发现网络设备。

    from netmiko import ConnectHandler
    
    def discover_devices(device_list):
        for device in device_list:
            try:
                # 连接到设备
                connection = ConnectHandler(**device)
                print(f"成功连接到设备 {device['host']}")
    
                # 获取设备信息
                output = connection.send_command("show version")
                print(f"设备 {device['host']} 的信息:\n{output}")
    
                # 关闭连接
                connection.disconnect()
            except Exception as e:
                print(f"连接或发现设备失败: {e}")
    
    # 示例使用
    device_list = [
        {
            'device_type': 'huawei',
            'host': '192.168.1.1',
            'username': 'admin',
            'password': 'password',
        },
        {
            'device_type': 'huawei',
            'host': '192.168.1.2',
            'username': 'admin',
            'password': 'password',
        }
    ]
    
    discover_devices(device_list)
    

    4. 使用PySNMP获取网络数据

    PySNMP是一个用于SNMP协议的Python库,我们可以使用它来获取网络设备的SNMP数据。

    from pysnmp.hlapi import *
    
    def snmp_get(host, community, oid):
        errorIndication, errorStatus, errorIndex, varBinds = next(
            getCmd(SnmpEngine(),
                   CommunityData(community),
                   UdpTransportTarget((host, 161)),
                   ContextData(),
                   ObjectType(ObjectIdentity(oid)))
        )
    
        if errorIndication:
            print(f"SNMP获取数据失败: {errorIndication}")
        elif errorStatus:
            print(f"SNMP错误: {errorStatus.prettyPrint()} at {errorIndex and varBinds[int(errorIndex) - 1][0] or '?'}")
        else:
            for varBind in varBinds:
                print(f"{varBind[0]} = {varBind[1]}")
    
    # 示例使用
    host = "192.168.1.1"
    community = "public"
    oid = "1.3.6.1.2.1.1.1.0"  # 系统描述
    
    snmp_get(host, community, oid)
    

    总结

    以上代码分别实现了使用telnetlib下发网络配置、使用paramiko进行网络设备巡检、使用netmiko发现网络设备以及使用PySNMP获取网络数据的功能。用户可以根据实际需求调整代码中的参数和命令。

    参考文档

    评论

报告相同问题?

问题事件

  • 修改了问题 1月6日
  • 创建了问题 1月6日