使用python连接eNSP中交换机并添加配置

使用拓扑:

在这里插入图片描述

通过云来连接本地主机和eNSP中的设备,保证双方能互相通信。IP地址规划入图中所示,现在通过python连接到SW1、SW2、SW3上做配置修改。

版本:python3.9

一、使用telnetlib修改eNSP交换机的配置:

在SW1上配置了telnet,现在通过telnetlib模块连接到SW1并创建一个Loopback0接口,ip地址为1.1.1.1/32。代码如下:

#导入telnetlib模块
import telnetlib

#设置SW1的管理地址,用户名和密码三个变量
host = "192.168.56.11"    

user = "prin"

password = "Huawei@123"

#调用telnetlib的telnet函数,连接SW1,并将值赋予tn
tn = telnetlib.Telnet(host)

#调用read_until()函数,告诉python读到Username时输入user变量的值
tn.read_until(b"Username:")
tn.write(user.encode('ascii')+b"\n")

#调用read_until()函数,告诉python读到PassWord时输入password变量的值
tn.read_until(b"Password:")
tn.write(password.encode('ascii')+b"\n")

#通过write()函数输入配置的命令,完成后退出telnet
tn.write(b"sys \n")

tn.write(b"int l0 \n")

tn.write(b"ip address 1.1.1.1 32 \n")

tn.write(b"return \n")

tn.write(b"quit\n")

最终结果:可以看到在SW1上创建了Loopback0接口,并且有了IP地址。
在这里插入图片描述

二、使用netmiko修改eNSP交换机的配置:

在SW2上配置了SSH,现在通过netmiko模块连接到SW2并创建一个Loopback0接口,ip地址为2.2.2.2/32。

交换机SSH配置命令:

# 创建秘钥
[sw2]dsa local-key-pair create

## 配置SSH认证类型(密码/其他)
[sw2]ssh user prin authentication-type password
[sw2]ssh user prin service-type stelnet
[sw2]stelnet server enable

## 配置认证模式
[sw2]user-interface vty 0 4
[sw2-ui-vty0-4]authentication-mode aaa  //配置认证模式
[sw2-ui-vty0-4]protocol inbound ssh     //允许 ssh 连接虚拟终端

## 配置本地用户信息
[sw2]aaa
[sw2-aaa] local-user prin password cipher Huawei@123
[sw2-aaa]local-user prin privilege level 15
[sw2-aaa] local-user prin service-type ssh

代码如下:

#netmiko需要通过pip下载
from netmiko import ConnectHandler

#设备类型为huawei,除此之外,还支持绝大多数主流厂商的设备,这也是netmiko的优势;其余上参数分别为SW2的IP,SSH的用户名和密码
SW2 ={
    'device_type': 'huawei',
    'ip': '192.168.56.22',
    'username': 'prin',
    'password': 'Huawei@123',
}

print("正在连接设备..........")
#调用ConnectHandler()函数,用上一步创建的字典进行SSH连接,并且将返回值赋予connect变量,注意**不可以省略
connect = ConnectHandler(**SW2)

print("Successfully connected to "+SW2['ip'])

#设置一个列表,其中为配置的命令,这里可以省略'sys'和'return',因为netmiko会自动加上
config_commands = ['int l0','ip address 2.2.2.2 255.255.255.255']

#调用connect的send_config_set()函数,发送配置命令,并打印出来
output = connect.send_config_set(config_commands)
print(output)

#调用connect的send_command()函数,发送配置命令,并打印
result = connect.send_command('dis ip int brief')

print(result)

#注意connect.send_command()仅能发送一个命令,而send_config_set()函数则可以一次性发送多个命令

运行程序打印出来的结果:
在这里插入图片描述

注意,netmiko常见支持的设备如下:


CLASS_MAPPER_BASE = {
    'a10': A10SSH,
    'accedian': AccedianSSH,
    'alcatel_aos': AlcatelAosSSH,
    'alcatel_sros': AlcatelSrosSSH,
    'apresia_aeos': ApresiaAeosSSH,
    'arista_eos': AristaSSH,
    'aruba_os': ArubaSSH,
    'avaya_ers': AvayaErsSSH,
    'avaya_vsp': AvayaVspSSH,
    'brocade_fastiron': RuckusFastironSSH,
    'brocade_netiron': BrocadeNetironSSH,
    'brocade_nos': BrocadeNosSSH,
    'brocade_vdx': BrocadeNosSSH,
    'brocade_vyos': VyOSSSH,
    'checkpoint_gaia': CheckPointGaiaSSH,
    'calix_b6': CalixB6SSH,
    'ciena_saos': CienaSaosSSH,
    'cisco_asa': CiscoAsaSSH,
    'cisco_ios': CiscoIosSSH,
    'cisco_nxos': CiscoNxosSSH,
    'cisco_s300': CiscoS300SSH,
    'cisco_tp': CiscoTpTcCeSSH,
    'cisco_wlc': CiscoWlcSSH,
    'cisco_xe': CiscoIosSSH,
    'cisco_xr': CiscoXrSSH,
    'coriant': CoriantSSH,
    'dell_force10': DellForce10SSH,
    'dell_os10': DellOS10SSH,
    'dell_powerconnect': DellPowerConnectSSH,
    'dell_isilon': DellIsilonSSH,
    'eltex': EltexSSH,
    'enterasys': EnterasysSSH,
    'extreme': ExtremeSSH,
    'extreme_wing': ExtremeWingSSH,
    'f5_ltm': F5LtmSSH,
    'fortinet': FortinetSSH,
    'generic_termserver': TerminalServerSSH,
    'hp_comware': HPComwareSSH,
    'hp_procurve': HPProcurveSSH,
    'huawei': HuaweiSSH,
    'huawei_vrpv8': HuaweiVrpv8SSH,
    'juniper': JuniperSSH,
    'juniper_junos': JuniperSSH,
    'linux': LinuxSSH,
    'mellanox': MellanoxSSH,
    'mrv_optiswitch': MrvOptiswitchSSH,
    'netapp_cdot': NetAppcDotSSH,
    'netscaler': NetscalerSSH,
    'ovs_linux': OvsLinuxSSH,
    'paloalto_panos': PaloAltoPanosSSH,
    'pluribus': PluribusSSH,
    'quanta_mesh': QuantaMeshSSH,
    'ruckus_fastiron': RuckusFastironSSH,
    'ubiquiti_edge': UbiquitiEdgeSSH,
    'ubiquiti_edgeswitch': UbiquitiEdgeSSH,
    'vyatta_vyos': VyOSSSH,
    'vyos': VyOSSSH,
}

三、使用paramiko修改eNSP交换机的配置:

在SW2上配置了SSH,现在通过paramiko模块连接到SW3并创建一个Loopback0接口,ip地址为3.3.3.3/32。

代码如下:

#paramiko需要通过pip下载
import paramiko
#import time的目的是为了保证不会因为输入命令或者回显内容过快而导致SSH终端速度跟不上,仅能显示部分命令,而netmiko已经自动解决了此问题
import time

#创建三个变量,表示SW3的IP地址、SSH的用户名和密码
ip = "192.168.56.33"
username = "prin"
password = "Huawei@123"

#调用paramiko的SSHClient()函数,并赋值给ssh_client,表示本端作为SSH的客户端
ssh_client = paramiko.SSHClient()

#调用set_missing_host_key_policy()函数,用来接受SSH服务器端提供的公钥
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#调用connect()函数,输入ip地址、ssh用户名和密码三个参数,进行连接
ssh_client.connect(hostname=ip, username=username, password=password)

print("Successfully connect to ", ip)

#SSH连接成功后,需要使用invoke_shell()方法唤醒shell,并赋值给command
command = ssh_client.invoke_shell()

#调用command的send()函数,发送配置的信息给SW3
command.send("sys \n")
command.send("int l0 \n")
command.send("ip address 3.3.3.3 32 \n")
command.send("return \n")
command.send("quit \n")

#为了保证回显内容能够打印出来,需要先调用time模块的sleep()函数让python休眠2s
time.sleep(2)

#调用command的recv()函数截取回显的内容,并打印出来,65535表示截取65535个字符,也是一次性最大能够截取的
output = command.recv(65535)
print(output.decode("ascii"))

#配置完成后,使用close方法退出SSH
ssh_client.close()

打印结果:
在这里插入图片描述

参考资料:《网络工程师的python之路》

  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
使用Python配置ENSP(华为企业网络仿真平台),你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Python。你可以在命令行输入 `python --version` 来检查是否已成功安装Python,并查看其版本。 2. 接下来,你需要下载并安装PyAutoGUI库。这个库可以帮助你自动化模拟鼠标和键盘操作。你可以使用以下命令来安装该库: ``` pip install pyautogui ``` 3. 在你的Python脚本,导入`pyautogui`库: ```python import pyautogui ``` 4. 打开ENSP应用程序,并确保其界面处于可见状态。 5. 使用`pyautogui`库的函数来模拟鼠标和键盘操作,以进行自动配置。例如,你可以使用`pyautogui.click()`函数来模拟鼠标点击,使用`pyautogui.typewrite()`函数来输入文本等。 以下是一个示例代码,展示如何使用Python配置ENSP的一些基本设置: ```python import pyautogui import time # 等待ENSP应用程序启动 time.sleep(5) # 点击菜单栏的“配置”选项 pyautogui.click(x=100, y=50) # 替换为实际的坐标 # 选择“设备管理”选项 pyautogui.click(x=100, y=100) # 替换为实际的坐标 # 输入设备名称 pyautogui.typewrite('Device1') # 点击“确定”按钮 pyautogui.click(x=200, y=200) # 替换为实际的坐标 # 其他配置操作... ``` 请注意,以上代码的坐标值需要根据你的ENSP应用程序窗口的实际位置进行调整。 6. 运行你的Python脚本,它将自动模拟鼠标和键盘操作,完成ENSP配置过程。 注意:在使用自动化脚本时,请确保你已经熟悉ENSP的界面和操作,并且在使用前进行了充分的测试。此外,还要注意遵循华为ENSP的许可协议和使用规定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值