python脚本:使用Netmiko,在交换机上通过MAC查IP或者通过IP查MAC
时间:2021-07-14
本文章向大家介绍python脚本:使用Netmiko,在交换机上通过MAC查IP或者通过IP查MAC,主要包括python脚本:使用Netmiko,在交换机上通过MAC查IP或者通过IP查MAC使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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会话
"""
原文地址:https://www.cnblogs.com/ribi/p/15010451.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- hadoop伪分布式之启动HDFS并运行MR程序(WordCount)
- 细品Reids的HyperLogLog数据结构
- 布隆过滤器与缓存击穿
- spring之通过注解方式配置Bean(二)
- 【python-leetcode103-树的宽度遍历】二叉树的锯齿形层次遍历
- 图卷积网络(GCN)python实现
- hadoop伪分布式之配置yarn并运行MR程序(WordCount)
- 【python-leetcode637-树的宽度遍历】二叉树的层平均值
- graphSAGE的python实现
- 【python-leetcode111-树的宽度遍历】二叉树的最小深度
- 基于TypeScript封装Axios笔记(四)
- spring之泛型依赖注入
- 【python-leetcode113-树的深度遍历】路径总和Ⅱ
- spring之为什么要使用AOP(面向切面编程)?
- useContext更佳实践