Python网络设备脚本中经常使用的connecthandler和telnetlib是什么意思?
你好,这里是网络技术联盟站。
在昨天的文章中,有小伙伴提到对这两天瑞哥提供的Python脚本中涉及的connecthandler和telnetlib两个模块不是太了解,想要学习一下:

今天瑞哥就安排上!
其实这两个模块是Python与网络设备交互最常用的两个模块,当然了,还有其他的哈,那么今天我们就针对性的讲一下吧,希望不仅仅是“死鱼非命”这位小伙伴能够理解,在看的各位朋友都能理解两个模块该如何使用。
让我们直接开始!
一、ConnectHandler
Python的Paramiko库提供了一个叫做ConnectHandler的模块,可以简化SSH连接和命令执行的代码,使得我们能够更加方便地与网络设备交互。
1.1 ConnectHandler模块介绍
ConnectHandler模块是Paramiko库提供的一个高级模块,它封装了SSH连接、命令执行和输出解析等功能,使得我们能够更加方便地与SSH服务器进行交互。
通过ConnectHandler模块,我们可以:
- 建立SSH连接
- 发送命令
- 获取输出结果
- 关闭SSH连接
ConnectHandler模块支持的设备类型非常丰富,包括华为、H3C、锐捷、Cisco、Juniper、HP、Fortinet等众多品牌的设备。
1.2 使用示例
下面我们来看一个简单的使用示例,该示例使用ConnectHandler模块连接到一个Cisco路由器,并执行一个命令:
from netmiko import ConnectHandler# 定义设备信息
device = {'device_type': 'cisco_ios','ip': '192.168.1.1','username': 'username','password': 'password'
}# 建立SSH连接
with ConnectHandler(**device) as conn:# 发送命令output = conn.send_command('show ip interface brief')# 输出结果
print(output)
在上面的代码中,我们首先定义了一个字典类型的device变量,其中包含了连接设备的必要信息,比如设备类型、IP地址、用户名和密码等。接着,我们使用ConnectHandler模块建立SSH连接,并使用with语句来确保连接被正确关闭。在连接建立后,我们发送了一个命令show ip interface brief,并使用send_command方法来执行该命令并获取输出结果。最后,我们输出了命令的输出结果。
除了使用send_command方法来发送单个命令外,ConnectHandler模块还提供了一系列其他方法,如send_config_set、send_config_from_file等,可以用于发送多个配置命令或从文件中加载配置命令。
1.3 小结
ConnectHandler模块是Python Paramiko库提供的一个高级模块,它封装了SSH连接、命令执行和输出解析等功能,使得我们能够更加方便地与SSH服务器进行交互。在使用ConnectHandler模块时,我们只需要提供设备的必要信息,就可以通过简单的代码来实现SSH连接和命令执行。这大大简化了SSH交互的代码编写,提高了我们的工作效率。
二、telnetlib
Python的telnetlib库提供了一个telnet客户端,可以用于与telnet服务器进行交互。
2.1 telnetlib库介绍
telnetlib库是Python标准库中提供的一个模块,它提供了一个telnet客户端,可以用于与telnet服务器进行交互。
通过telnetlib库,我们可以:
- 建立telnet连接
- 发送命令
- 获取输出结果
- 关闭telnet连接
2.2 使用示例
下面我们来看一个简单的使用示例,该示例使用telnetlib库连接到一个telnet服务器,并执行一个命令:
import telnetlib# 定义设备信息
host = '192.168.1.1'
username = 'username'
password = 'password'# 建立telnet连接
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")# 发送命令
tn.write(b"show ip interface brief\n")
output = tn.read_all().decode('ascii')# 关闭连接
tn.close()# 输出结果
print(output)
在上面的代码中,我们首先定义了一些必要的设备信息,如telnet服务器的IP地址、用户名和密码等。接着,我们使用telnetlib.Telnet类建立telnet连接,并使用read_until方法和write方法登录到服务器。在登录后,我们使用write方法发送了一个命令show ip interface brief,并使用read_all方法获取输出结果。最后,我们关闭了telnet连接,并输出了命令的输出结果。
除了使用read_all方法来获取输出结果外,telnetlib库还提供了一系列其他方法,如read_until、read_eager、read_some等,可以用于读取不同形式的输出。
2.3 小结
telnetlib库是Python标准库中提供的一个模块,它提供了一个telnet客户端,可以用于与telnet服务器进行交互。通过telnetlib库,我们可以实现telnet连接的建立、命令的发送和输出结果的获取等功能。在使用telnetlib库时,我们需要使用telnetlib.Telnet类来建立连接,并使用相应的方法来执行操作和获取输出结果。
三、总结
本文给大家介绍了两个重要的知识点:
- ConnectHandler
- telnetlib
ConnectHandler和telnetlib在Python体系的范围中是有差距的:

可以看到ConnectHandler属于Paramiko库的一个高级模块,而telnetlib是Python标准库中提供的一个模块,这个我们需要注意一下。
怎么样,这下理解了吗?
相关文章:
Python网络设备脚本中经常使用的connecthandler和telnetlib是什么意思?
你好,这里是网络技术联盟站。 在昨天的文章中,有小伙伴提到对这两天瑞哥提供的Python脚本中涉及的connecthandler和telnetlib两个模块不是太了解,想要学习一下: 今天瑞哥就安排上! 其实这两个模块是Python与网络设备…...
你真的会写 git commit message 吗?
作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...
ISO文件内添加kickstart完成自动安装
目录 将待制作的centos iso文件挂载到/mnt/目录 将/mnt/下的所有文件复制到新的目录/tmp/mycentos 创建kickstart文件 修改启动文件 重新制作ISO文件 制作完成 kickstart可以实现根据配置自动安装操作系统,本文主要讲解如何让机器读取到iso文件后自动完成操作…...
SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理
SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理前言添加依赖配置文件编写监听器创建SimpleRabbitListenerContainerFactory发送消息前言 RabbitMQ是一种常用的消息队列,Spring Boot对其进行了深度的整合,可以快速地实现消息的发送和接收…...
jquery基础之操作节点对象
jquery操作节点(元素)对象 捕获-DOM操作,获取内容,值 获取内容:1.text()获取元素的文本内容 2.html()获取元素的文档内容 …...
对于Java的深入理解及其特点--面试
前言 计算机语言千千万,每一种语言都有其自己的特点、擅长的领域。在学习了Java之后才对Java有了进一步的理解。 面试问一: 你是如何理解Java这门语言的? 这里我们应该从下面几个点去总结 1、Java语言具有的属性 2、他的特点在哪 Java语…...
Linux GPSD的使用
目录 1: GPSD 运行状态查看 2:停止GPSD 服务 3: GPSD运行输出(协议的识别) 4:开启的服务...
ArrayList无参构造添加元素源码解读
一、ArrayList无参构造add方法源码阅读 Test//无参构造源码阅读 public void testArrayListNoConstructorAdd(){ArrayList<Integer> arrayList new ArrayList<>();ArrayList<Integer> list new ArrayList<>();arrayList.add(1);arrayList.add(12);a…...
手写简易 Spring(二)
文章目录手写简易 Spring(二)1. 扩展 BeanFactory 接口2. 实现资源加载器,从 Spring.xml 解析和注册 Bean 对象1. 核心实现类 XmlBeanDefinitionReader3. 实现应用上下文,自动识别、资源加载、扩展机制1. 应用上下文2. 核心实现类…...
排列问题DFS入门
1、题目描述(全排列) 输入一个正整数n,输出1~n的全排列。 输入格式 一个正整数n。 输出格式 所有1~n的全排列,每个排列占一行。 样例输入 3 样例输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 算法思路 题目要求输出n的全…...
【每日一题Day159】LC1638统计只差一个字符的子串数目 | 枚举
统计只差一个字符的子串数目【LC1638】 给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是 t 串的子串。换言之,请你找到 s 和 t 串中 恰好 只有一个字符不同的子字符串对的数目。 比…...
【07 Metadata and VendorTag】
1. Metadata结构及分类 一个 metadata 通过tag,value及 type 来描述。不同的 metadata 分成三类 controls,dynamic 及 static 2. MTK Metadata IMetadata Mtk metadata containerIMetadataConverter Provide mutual conversion for Android camera_metadata and MTK Imetada…...
Golang中Model的使用
导语我们都知道在Golang中我们一般都是设置GOPATH目录,这个目录主要存放我们的第三方包,这个方式一直不是很方便,今天给大家介绍Go 1.11版本中推出的GoModul使用方法,学过java的同学,可能对maven包有所了解,…...
交友项目【基础环境搭建】
目录 1:交友项目架构介绍 1.1:前后端分离的概述 1.2:YAPI介绍(虚拟机中已经配好) 基本信息 使用 安装跨域拓展(浏览器上安装跨域处理插件) 2:虚拟机工具项目搭建 2.1࿱…...
入职时,公司要求自己带电脑,每月给100元补贴,如果不接受就不能入职!
为了节约成本,公司能做出什么事?一位网友遇到了这样的事:入职时,公司要求自己带电脑,每个月给100元补贴,如果不接受就得放弃入职,这样的公司有没有坑?有人问:连基本的公司…...
20道经典Redis面试题
20道经典Redis面试题 前言 整理了20道经典Redis面试题,希望对大家有帮助。 1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用A…...
十分钟带你看懂接口测试,2023最全超大型接口测试攻略
一、什么是接口测试? 所谓接口,是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试,则是通过接口的不同情况下的输入,去对比输出,看看是否满足接口规范所规定的功能、…...
【设计模式】创建型-单例模式
文章目录一、单例模式二、单例模式的八种实现方式2.1、饿汉式(静态常量)2.2、饿汉式(静态代码块)2.3、懒汉式(线程不安全)2.4、懒汉式(线程安全,同步方法)2.5、双重检查2…...
Python 练习 六
1、(最大数的出现)编写程序读取整数,找出它们中的最大值,然后计算它的出现次数。假设输入以数字0结束。假设你输入的是“352555 0";程序找出的最大数是5,而5的出现次数是4。(提示:维护两个变量max和 count。变量max存储的是当前最大数,而…...
「SQL面试题库」 No_22 员工奖金
🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试࿰…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
