Netdevops入门之Telnetlib语法案例
1、Telnetlib模块:
支持telnet/ssh远程访问的模块很多,常见的有telnetlib、ciscolib、paramiko、netmiko、pexpect,其中telnetlib和ciscolib对应telnet协议,后面3个对应SSH协议。
①-通过ENSP环境搭建实验环境


②-基础语法-telnetlib案例1:
注意:python3中,telnetlib模块下所有的返回值都是字节流,而默认输入的都是普通字符串str,因此在python3中使用tlenetlib需要注意:
①在字符串的前面需要加上一个b; 转换成字节流
②在变量和tlentlib函数后面需要加上.encode('ascii')函数 进行解码
③在read_all()函数后面需要加上decode('ascii')函数

import telnetlib
import timehost = '192.168.2.11'
user = '111'
password = '111'
#执行telnet 并输入用户名和密码
tn = telnetlib.Telnet(host,port=23,timeout=1) #tn实例化函数 telnet设备ip地址,(端口号,超时时间也可以不写,默认即可)
tn.read_until(b"Username",timeout=1) #read函数 读取设备返回的Username字符串
tn.write(user.encode('ascii') + b'\n') #将用户名转为ascii编码方式将字符串转换为bytes \n回车
tn.read_until(b"Password:",timeout=1)
tn.write(password.encode('ascii') + b'\n')
print('已登录进设备'+ host)tn.write(b"sys\n") #写入命令
tn.write(b"int loopback 1\n")
tn.write(b"ip address 1.1.1.1 32\n")
tn.write(b"quit\n")
tn.write(b"quit\n")
tn.write(b"save\n")
tn.write(b"y\n")time.sleep(2) #时间模块,暂停2s 等待设备响应
output = (tn.read_very_eager().decode("ascii")) #输出结果区域
print(output)
tn.close()
③-登录多台设备(for 循环)-telnetlib案例2:
通过列表添加设备ip,然后for循环调用执行
import telnetlib
import timehosts =['192.168.2.11','192.168.2.12','192.168.2.13','192.168.2.14','192.168.2.15','192.168.2.16']
user = '111'
password = '111'for ip in hosts: #循环执行hosts列表tn = telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址,(端口号,超时时间也可以不写,默认即可)tn.read_until(b"Username:") #read函数 读取设备返回的Username字符串tn.write(user.encode('ascii') + b'\n') #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(b"Password:",timeout=1)tn.write(password.encode('ascii') + b'\n')print('已登录进设备'+ ip)tn.write(b"sys\n") #写入命令tn.write(b"int loopback 1\n")tn.write(b"ip address 1.1.1.1 32\n")tn.write(b"quit\n")tn.write(b"quit\n")tn.write(b"save\n")tn.write(b"y\n")time.sleep(2) #时间模块,暂停2s 等待设备响应output = (tn.read_very_eager().decode("ascii")) #输出结果区域 转为ascii编码方式将字符串转换为bytesprint(output)tn.close()
④-循环执行多条命令-telnetlib案例3:
定义主机ip列表
定义命令字符串列表
然后for循环执行以上列表
import telnetlib
import timehosts =['192.168.2.11','192.168.2.12','192.168.2.13','192.168.2.14','192.168.2.15','192.168.2.16'] #s表示列表
user = '111'
password = '111'
commands = ['sys','int loopback 1','ip address 1.1.1.1 32','quit','quit','save','y'] #相当于把命令刷到文档里,s表示列表for ip in hosts:tn = telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址,(端口号,超时时间也可以不写,默认即可)tn.read_until(b"Username:") #read函数 读取设备返回的Username字符串tn.write(user.encode('ascii') + b'\n') #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(b"Password:",timeout=1)tn.write(password.encode('ascii') + b'\n')print('已登录进设备'+ ip)for command in commands:tn.write(command.encode('ascii')+b'\n') #循环调用commands内的命令time.sleep(2) #时间模块,暂停2s 等待设备响应output = (tn.read_very_eager().decode("ascii")) #输出结果区域print(output)tn.close()
⑤-异常处理-telnetlib案例:
增加异常处理,防止某台交换机登录失败,导致程序中断
import telnetlib
import timehosts =['192.168.2.11','192.168.2.12','192.168.2.13','192.168.2.14','192.168.2.15','192.168.2.16'] #s表示列表
user = '111'
password = '111'
commands = ['sys','int loopback 1','ip address 1.1.1.1 32','quit','quit','save','y'] #相当于把命令刷到文档里,s表示列表
Error= [] #创建Error队列
for ip in hosts: #循环登录iptry:tn = telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址tn.read_until(b"Username:",timeout=1) #read函数 读取设备返回的Username字符串tn.write(user.encode('ascii') + b'\n') #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(b"Password:",timeout=1)tn.write(password.encode('ascii') + b'\n')print('已登录进设备'+ ip)for command in commands:tn.write(command.encode('ascii')+b'\n') #循环调用commands内的命令time.sleep(2) #时间模块,暂停2s 等待设备响应output = (tn.read_very_eager().decode("ascii")) #输出结果区域print(output)tn.close()except: #只要登录错误都按如下打印
# except TimeoutError: # 只会处理timeoutError的错误print("登录失败,登录超时的设备IP:"+ip )Error.append(ip) #append添加,附加,将失败的ip添加到Error的列表
print(Error) #打印失败的设备ip
连接异常和密码错误异常 处理判断
⑥-通过文本读取IP和命令-telnetlib案例:
将ip地址或者命令放在txt文本文件中,通过脚本读取文本文件
import telnetlib
import timehosts = open('hosts.txt','r') #使用open函数 打开文本,并read 读取
user = '111'
password = '111'
commands = open('commands.txt','r')
ConnectionError= [] #连接失败的列表for ip in hosts.readlines(): #readline 逐行读取文本文件try:ip =ip.strip() #strip函数可以去除文本中的回车和空格tn = telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址tn.read_until(b"Username:") #read函数 读取设备返回的Username字符串tn.write(user.encode('ascii') + b'\n') #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(b"Password:")tn.write(password.encode('ascii') + b'\n')print('已登录进设备'+ ip)#print(f'已登录进设备:{ip}')commands.seek(0) #光标每次读取完都会在最后,需要用seek函数将光标置于最前面for command in commands.readlines():tn.write(command.encode('ascii')+b'\n') #循环调用commands内的命令time.sleep(2)output = (tn.read_very_eager()).decode("ascii") #输出结果区域print(output)tn.close()except: #只要登录错误都按如下打印print("##########登录失败,登录超时的设备IP:"+ip+'##########' )ConnectionError.append(ip) #append添加,附加,将失败的ip添加到ConnectionError的列表
print(ConnectionError)
⑦-封装成函数解决问题-telnetlib案例:
将telnetlib封装成函数,方便小规模灵活应用,便于调用,同时增加input输入用户名和密码。允许部分交换机用户名和密码不同。
import telnetlib
import timecommands = open('commands.txt','r')
ConnectionError= []
AuthenFaill= []def Telnet (host,username=input('请输入用户名:'),password=input('请输入密码:'),port=23): #封装定义函数,定义host username passwordtry:tn = telnetlib.Telnet(host) #tn实例化函数 telnet设备ip地址tn.read_until(b"Username:") #read函数 读取设备返回的Username字符串tn.write(username.encode('ascii') + b'\n') #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(b"Password:")tn.write(password.encode('ascii') + b'\n')index,obj,oup=tn.expect([b'Info',b'Error'],timeout=1)if index ==0:print('已经成功登录设备'+host)elif index == 1:print('设备用户或密码错误'+host)AuthenFaill.append(host)commands.seek(0) #光标每次读取完都会在最后,需要用seek函数将光标置于最前面for command in commands.readlines():tn.write(command.encode('ascii')+b'\n') #循环调用commands内的命令time.sleep(2)output = (tn.read_very_eager()).decode("ascii") #输出结果区域print(output)tn.close()except :print("连接异常失败IP:"+host)ConnectionError.append(host) #append添加,附加,将失败的ip添加到ConnectionError的列表Telnet('192.168.2.11')
Telnet('192.168.2.12')
Telnet('192.168.2.13',username='root',password='roo111') #如果此台主机密码不同于其他,可以直接赋予正确的密码
Telnet('192.168.2.14')
Telnet('192.168.2.15')
Telnet('192.168.2.16')print('-'*100)
print('认证失败的设备如下:')
print(AuthenFaill)
print('-'*100)
print('连接异常的设备如下:')
print(ConnectionError)
⑧-ping案例:
可以使用os.system或者subprocess模块实现ping检测
import os
ip ='192.168.1.1'
response =os.system('ping -n 1 '+ip) #发1包if response ==0:print(ip,'is up!')
else:print(ip,'is down!')
或者
import os
host = ['192.168.1.1']
for ip in host:try:ping_result = os.system(f"ping -n 1 {ip}")if ping_result == 0:print(f"{ip} 连通性正常")else:print(f"{ip} 连通性异常")except Exception as e:print("检查 {ip} 连通性时出现异常:{e}")

或者
import subprocess #subprocess模块执行ping命令(只返回结果不返回打印)
host = ['192.168.1.1']
for ip in host:try:command = ['ping', '-n', str(1), ip]result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)#朱提部分subprocess.run执行命令,捕获输出但不打印if result.returncode == 0: #检查是否执行成功print('ok')else:print('pok')#print('pok',result.stderr) 如果需要可以打印错误信息except Exception as e:print("检查 {ip} 连通性时出现异常:{e}")

相关文章:
Netdevops入门之Telnetlib语法案例
1、Telnetlib模块: 支持telnet/ssh远程访问的模块很多,常见的有telnetlib、ciscolib、paramiko、netmiko、pexpect,其中telnetlib和ciscolib对应telnet协议,后面3个对应SSH协议。 ①-通过ENSP环境搭建实验环境 ②-基础语法-telnetlib案例1&…...
永辉“爆改”续命
2024年,在线下零售一片哀嚎之下,胖东来似乎活成了国内零售业的密码,同时也变身成为各大零售企业的咨询公司,四处帮助“友商”救火,就连一直名声在外的永辉超市,也成了救火对象。 作为曾经国内生鲜超市的“…...
IEEE双一区Top“饱受诟病”!曾上医院黑名单,国人占比高达82.405%,目测即将拉下神坛?
本周投稿推荐 SCI&EI • 1区计算机类,3.5-4.0(1个月录用) • CCF推荐,1区-Top(3天初审) EI • 各领域沾边均可(2天录用) 知网(CNKI)、谷歌学术 •…...
Hive环境搭建(Mysql数据库)
【实验目的】 1) 了解hive的作用 2) 熟练hive的配置过程(Mysql数据库) 【实验原理】 Hive工具中默认使用的是derby数据库,该数据库使用简单,操作灵活,但是存在一定的局限性,hive支持使用第三方数据库&…...
【ESP32 IDF SPI硬件驱动W25Q64】
目录 SPISPI介绍idf配置初始化配置通信 驱动代码 SPI SPI介绍 详细SPI介绍内容参考我之前写的内容【ESP32 IDF 软件模拟SPI驱动 W25Q64存储与读取数组】 idf配置 初始化配置 spi_bus_initialize() 参数1 :spi几,例如spi2,spi3 参数2:…...
太原高校大学智能制造实验室数字孪生可视化系统平台建设项目验收
随着科技的不断进步,智能制造已经成为推动制造业转型升级的重要力量。太原高校大学智能制造实验室紧跟时代步伐,积极推进数字孪生可视化系统平台的建设,并于近日圆满完成了项目的验收工作。这一里程碑式的成果,不仅标志着实验室在…...
Kafka消息队列
目录 什么是消息队列 高可用性 高扩展性 高可用性 持久化和过期策略 consumer group 分组消费 ZooKeeper 什么是消息队列 普通版消息队列 说白了就是一个队列,生产者生产多少,放在消息队列中存储,而消费者想要多少拿多少,按序列号消费 缓存信息 生产者与消费者解耦…...
@Transactional注解及其事务管理
1. 事务问题概述 事务问题主要来源于数据库,与数据库事务紧密相关。事务的四大特性(ACID): 原子性(Atomicity):事务要么完全执行,要么完全不执行。一致性(Consistency&a…...
ROS2入门到精通—— 3-1 ROS2实战:CasADi —— 优化计算的利器
0 前言 CasADi是一个强大的开源软件库,它提供了一种灵活且高效的方式来构建和解决复杂的非线性模型。通过其直观的API,开发者可以轻松地定义数学表达式并自动求解微分方程、优化问题以及符号计算等任务。 CasADi基于Python编写,但提供了C++和MATLAB接口,使得不同背景的开发…...
日拱一卒 | JVM
文章目录 什么是JVM?JVM的组成JVM的大致工作流程JVM的内存模型 什么是JVM? 我们知道Java面试,只要你的简历上写了了解JVM,那么你就必然会被问到以下问题: 什么是JVM?简单说一下JVM的内存模型?…...
乐尚代驾六订单执行一
加载当前订单 需求 无论是司机端,还是乘客端,遇到页面切换,重新登录小程序等,只要回到首页面,查看当前是否有正在执行订单,如果有跳转到当前订单执行页面 之前这个接口已经开发,为了测试&…...
SciPy 与 MATLAB 数组
SciPy 与 MATLAB 数组 SciPy 是一个开源的 Python 库,广泛用于科学和工程计算。它构建在 NumPy 数组的基础之上,提供了许多高级科学计算功能。MATLAB 是一个高性能的数值计算环境,它也使用数组作为其基础数据结构。在这篇文章中,我们将探讨 SciPy 和 MATLAB 在数组操作上的…...
基于vue-grid-layout插件(vue版本)实现增删改查/拖拽自动排序等功能(已验证、可正常运行)
前端时间有个需求,需要对33(不一定,也可能多行)的卡片布局,进行拖拽,拖拽过程中自动排序,以下代码是基于vue2,可直接运行,报错可评论滴我 部分代码优化来自于GPT4o和Clau…...
DBoW3相关优化脉络
1 DBow3 GitHub - rmsalinas/DBow3: Improved version of DBow2 2 优化后得到fbow GitHub - rmsalinas/fbow: FBOW (Fast Bag of Words) is an extremmely optimized version of the DBow2/DBow3 libraries. 其中fbow是ucoslam的一部分; ucoslam GitHub - la…...
qt 如何制作动态库插件
首先 首先第一点要确定我们的接口是固定的,也就是要确定 #ifndef RTSPPLUGIN_H #define RTSPPLUGIN_H #include "rtspplugin_global.h" typedef void (*func_callback)(uint8_t* data,int len,uint32_t ssrc,uint32_t ts,const char* ipfrom,uint16_t f…...
一种docker start放回Error response from daemon: task xxx错误的解决方式
1. 问题描述 执行systemctl daemon-reload与systemctl restart docker命令后,发现docker中有的应用无法启动,并显示出Exit(255)的错误提示。 重新执行docker start 容器id后发现返回,Error response from daemon: task xxx的错误。 2. 问题…...
规控面试常见问题
一、项目中遇到的困难或者挑战是什么? 二、A*算法原理(伪代码) 输入:代价地图、start 、 goal(Node结构,包含x、y、g、h、id、pid信息) 首先初始化:创建一个优先级队列openlist,它是一个最小堆,根据节点的f值排序 ( priority_queue<Node, std::vector<Node…...
代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙
代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…...
【全网最全】CSDN博客的文字颜色、字体和字号设置
文章目录 一、字体颜色二、字体大小三、字体类型四、字体背景色 在这篇博客中,我们将深入探讨如何在Markdown编辑器中设置文字颜色、大小、字体与背景色。Markdown本身并不直接支持这些功能,但通过结合HTML标签和CSS样式,我们可以实现这些视觉…...
C#实现数据采集系统-Mqtt实现采集数据转发
在数据采集系统中,通过ModbusTcp采集到数据之后,再通过MQTT转发到其他应用 MQTT操作 安装MQTT mqtt介绍和环境安装 使用MQTT 在C#/Net中使用Mqtt MQTT类封装 MQTT配置类 public class MqttConfig{public string Ip {get; set;...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
