1 import sys
2 from netmiko import ConnectHandler
3
4 try: #判断有没有MAC地址通过变量传递进来
5 mac=sys.argv[1]
6 except BaseException:
7 mac=input("输入mac:(支持格式:IP、123456789abc、12-34-56-78-9a-bc、1234-5678-9abc)\n") #没有变量传递进来就自己输mac地址
8
9 if("." in mac): #判断格式 是否为IP地址
10 mac2=mac
11 elif("-" not in mac): #判断格式 123456789abc
12 mac1=mac[0:4]+"-"+mac[4:8]+"-"+mac[8:]
13 mac2 = str(mac1).lower()
14 elif mac.startswith('-', 2, 3): #判断格式 12-34-56-78-9a-bc
15 mac1=mac[0:2]+mac[3:6]+mac[6:8]+mac[9:13]+mac[13:14]+mac[15:]
16 mac2 = str(mac1).lower()
17 else: #判断格式 其它
18 mac2 = str(mac).lower()
19
20 command='display arp | include '+mac2 #组合查询命令
21 huawei = {
22 'device_type':'huawei',
23 'host':'1.1.1.1', #交换机ip
24 'username':'123', #ssh账号
25 'password':'345' #ssh密码
26 }
27
28 ssh_connect = ConnectHandler(**huawei) #创建ssh连接
29 #Python中,(*)会把接收到的参数形成一个元组,而(**)则会把接收到的参数存入一个字典
30 #等同于:
31 #net_connect = ConnectHandler(device_type='huawei',host='IP地址',username='用户名',password='密码')
32
33 current_view = ssh_connect.find_prompt() #找到目前所在视图
34 print(current_view)
35 output = ssh_connect.send_command(command) #执行命令,返回结果为字符串,赋值给output
36 print(output)
37 ssh_connect. disconnect() #关闭ssh
***********记得安装netmiko模块(cmd下执行):pip install netmiko
"""
Netmiko常用方法介绍
a.send_command_timing()
基于延迟机制执行command命令, 常用于查询场景, 与send_command()方法不同之处在于该方法时在循环次数达到最大值自动退出, 而send_command()方法则必须匹配到指定的退出标识, 否则抛出异常。
b.send_config_set()
该方法可以同时执行多条命令, 同时会把执行的过程进行返回,一般会用在配置下发场景,该方法会自动进入设备配置模式不需要额外传入进入配置模式的命令。
c.send_config_from_file()
该方法可以从文件中加载配置命令进行配置下发
d.write_channel()
该方法是将命令字符串写入SSH会话通道中
e.read_channel()
该方法是从SSH会话通道中读取设备的响应数据
f.disconnect()
该方法是关闭SSH会话
"""