当前位置: 首页 > article >正文

Telnet 类图解析

在这里插入图片描述

Telnet 类图(文本描述)

+---------------------------------------+
|              Telnet                   |
+---------------------------------------+
| - host: str                           |  # 目标主机
| - port: int                           |  # 目标端口(默认23)
| - timeout: float                      |  # 超时时间
| - sock: socket.socket                 |  # 底层Socket连接
| - rawq: bytes                         |  # 原始接收缓冲区
| - irawq: int                          |  # 缓冲区索引
| - cookedq: bytes                      |  # 处理后的数据缓冲区
| - option_callback: Callable           |  # 选项协商回调函数
+---------------------------------------+
| + __init__(host=None, port=0, timeout)|  # 初始化对象(可选连接)
| + open(host, port, timeout)           |  # 建立Telnet连接
| + close()                             |  # 关闭连接
| + read_until(match, timeout=None)     |  # 读取直到匹配指定字节串
| + read_all()                          |  # 读取所有数据直到EOF
| + write(buffer)                       |  # 发送字节流数据
| + interact()                          |  # 进入交互模式
| - process_rawq()                      |  # 处理原始数据(解析IAC命令)
| - _process_do(option)                 |  # 处理服务端DO请求
| - _process_dont(option)               |  # 处理服务端DONT请求
| - set_option_negotiation_callback(cb) |  # 设置选项协商回调
+---------------------------------------+

核心关系说明

  1. 依赖关系

    • socket 模块Telnet 类通过 sock 属性依赖底层 Socket 连接。
    • select 模块interact() 方法使用 select 监听输入输出。
  2. 数据流

    • 接收数据sock.recv()rawqprocess_rawq()cookedqread_until()/read_all()
    • 发送数据write()sock.sendall()
  3. 协议处理

    • IAC 命令解析process_rawq() 处理 rawq 中的 IAC 序列(如 0xFF),调用 _process_do 等方法响应选项协商。
    • 回调扩展:通过 option_callback 支持自定义选项处理逻辑。

关键方法详解

1. read_until(match, timeout)
  • 输入:目标字节串 match(如 b"#"),超时时间 timeout
  • 输出:从 cookedq 中提取的字节流,直到匹配 match
  • 流程
    1. 循环填充 rawq(调用 fill_rawq())。
    2. 处理 rawq 中的协议命令(调用 process_rawq())。
    3. 检查 cookedq 是否包含 match,若超时则抛出 socket.timeout
2. write(buffer)
  • 输入:字节流 buffer(若为字符串需用户自行编码)。
  • 流程:直接调用 sock.sendall(buffer) 发送数据。
  • 注意:默认不处理编码,需用户确保字节流符合设备要求(如 buffer.encode("gbk"))。
3. interact()
  • 功能:实现用户与远程设备的实时交互。
  • 流程
    1. 监听 stdinsock 的可读事件(使用 select.select())。
    2. 将用户输入发送到设备,设备响应输出到终端。
    3. Ctrl+] 退出交互模式。

示例调用流程

tn = Telnet(host="192.168.1.1")       # 初始化并连接
tn.read_until(b"Username:")           # 读取直到用户名提示
tn.write(b"admin\n")                  # 发送用户名
tn.read_until(b"Password:")           # 读取直到密码提示
tn.write(b"password123\n")            # 发送密码
tn.interact()                         # 进入交互模式
tn.close()                            # 关闭连接

扩展设计

  • 自定义选项处理

    def custom_callback(tn, command, option):if command == DO and option == ECHO:tn.sock.sendall(IAC + WONT + ECHO)  # 拒绝回显选项tn = Telnet()
    tn.set_option_negotiation_callback(custom_callback)
    
  • 替代方案:对安全性要求高的场景,建议使用 paramiko(SSH 协议库)。


通过此图可快速掌握 telnetlib 的核心结构和数据流,便于调试或二次开发。

相关文章:

Telnet 类图解析

Telnet 类图(文本描述) --------------------------------------- | Telnet | --------------------------------------- | - host: str | # 目标主机 | - port: int …...

Python之with语句

文章目录 Python中的with语句详解一、基本语法二、工作原理三、文件操作中的with语句1. 基本用法2. 同时打开多个文件 四、with语句的优势五、自定义上下文管理器1. 基于类的实现2. 使用contextlib模块 六、常见应用场景七、注意事项 Python中的with语句详解 with语句是Python…...

【Flask全栈开发指南】从零构建企业级Web应用

目录 🌟 前言🏗️ 技术背景与价值🚧 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🔍 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🧩 关键技术模块说明⚖️ 技术选…...

mac 10.15.7 svn安装

macOS 版本推荐 SVN 安装方式≤10.14Homebrew 安装独立 SVN≥10.15优先使用 CLT 自带 SVN 一、使用 brew 安装 (没成功) brew install subversion 这个方法安装一直不成功,一直在提示说版本旧或都是一些引用工具安装失败, 二、使…...

PowerShell 实现 conda 懒加载

问题 执行命令conda init powershell会在 profile.ps1中添加conda初始化的命令。 即使用户不需要用到conda,也会初始化conda环境,拖慢PowerShell的启动速度。 解决方案 本文展示了如何实现conda的懒加载,默认不加载conda环境,只…...

笔记项目 day02

一、用户登录接口 请求参数: 用loginDTO来封装请求参数,要加上RequestBody注解 响应参数: 由于data里内容较多,考虑将其封装到一个LoginUser的实体中,用户登陆后,需要生成jwtToken并返回给前端。 登录功…...

Memcached 服务搭建和集成使用的详细步骤示例

以下是 Memcached 服务搭建和集成使用的详细步骤示例: 一、搭建 Memcached 服务 安装 Memcached Linux 系统 yum 安装:执行命令 yum install -y memcached memcached-devel。源码安装 下载源码:wget http://www.memcached.org/files/memcach…...

国鑫主板bios切换显示模式为独立显卡

# 进入到Platform Miscellaneous Configuration Active Video 切换为PCIE Device保存退出! 如果之前有安装过nvidia驱动,记得卸载掉再安装一遍。...

嵌入式硬件篇---CAN

文章目录 前言1. CAN协议基础1.1 物理层特性差分信号线终端电阻通信速率总线拓扑 1.2 帧类型1.3 数据帧格式 2. STM32F103RCT6的CAN硬件配置2.1 硬件连接2.2 CubeMX配置启用CAN1模式波特率引脚分配过滤器配置(可选) 3. HAL库代码实现3.1 CAN初始化3.2 发…...

【日撸 Java 300行】Day 14(栈)

目录 Day 14:栈 一、栈的基本知识 二、栈的方法 1. 顺序表实现栈 2. 入栈 3. 出栈 三、代码及测试 拓展: 小结 Day 14:栈 Task: push 和 pop 均只能在栈顶操作.没有循环, 时间复杂度为 O(1). 一、栈的基本知识 详细的介…...

2025最新出版 Microsoft Project由入门到精通(七)

目录 优化资源——在资源使用状况视图中查看资源的负荷情况 在资源图表中查看资源的负荷情况 优化资源——资源出现冲突时的原因及处理办法 资源过度分类的处理解决办法 首先检查任务工时的合理性并调整 增加资源供给 回到资源工作表中双击对应的过度分配资源 替换资…...

修改(替换)文件中的指定内容并保留文件修改前的时间(即修改前后文件的最后修改时间保持不变)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 修改(替换)文件中的指…...

Linux云计算训练营笔记day07(MySQL数据库)

数据库 DataBase 保存数据的仓库 数据库管理系统 DBMS 这是一个可以独立运行,用于维护磁盘上的数据的一套软件 特点: 维护性高,灵活度高,效率高,可扩展性强 常见的DBMS Mysql Mariadb Oracle DB2 SQLServer MySQL是一个关系型…...

应用探析|千眼狼PIV测量系统在职业病防治中的应用

1、职业病防治背景 随着《职业病防治法》及各省市“十四五”职业病防治规划的深入推进,工作场所粉尘危害监测与防控已成为疾控部门的核心任务。以矿山、建材、冶金、化工等行业为例,粉尘浓度、分布及传播特性的精准测量是评估职业病风险的关键。 传统的…...

获取accesstoken时,提示证书解析有问题,导致无法正常获取token

错误: https://qyapi.weixin.qq.com/cgi-bin/gettoken": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targ…...

面试中被问到谈谈你对threadlocal的理解

ThreadLocal 的核心理解 1. 基本概念 ThreadLocal 是 Java 提供的线程局部变量机制,用于在多线程环境中为每个线程维护独立的变量副本,实现线程隔离。其核心思想是空间换时间,通过避免共享变量带来的同步开销,提升并发性能。 2…...

nvidia驱动更新-先卸载再安装-ubuntu

显卡驱动升级前,卸载旧版本,可采用两种方式。 1.命令行 (1)查找已安装的 NVIDIA 驱动和相关包:dpkg -l | grep nvidia (2)完全卸载 NVIDIA 驱动:sudo apt remove purge nvidia-*…...

FlashInfer - 安装

FlashInfer - 安装 flyfish 一、JIT 版安装FlashInfer 对于 JIT 版本(即每次都从源代码编译每个内核,此过程需要 NVCC),可通过 PyPI 进行安装。 解释 JIT 版本(JIT Version) JIT 即 Just-In-Time Compi…...

推荐算法工程化:ZKmall模板商城的B2C 商城的用户分层推荐策略

在 B2C 电商竞争激烈的市场环境中,精准推荐已成为提升用户体验、促进商品销售的关键。ZKmall 模板商城通过推荐算法工程化手段,深度挖掘用户数据价值,制定科学的用户分层推荐策略,实现 “千人千面” 的个性化推荐,帮助…...

jackson-dataformat-xml引入使用后,响应体全是xml

解决方案: https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.servlet.config.annotation.Con…...

嵌入式硬件篇---TOF|PID

文章目录 前言1. 硬件准备主控芯片ToF模块1.VL53L0X2.TFmini 执行机构:电机舵机其他 2. 硬件连接(1) VL53L0X(IC接口)(2) TFmini(串口通信) 3. ToF模块初始化与数据读取(1) VL53L0X(基于HAL库)(…...

Realtek 8126驱动分析第四篇——multi queue相关

Realtek 8126是 5G 网卡,因为和 8125 较为接近,第四篇从这里开始也无不可。本篇主要是讲 multi queue 相关,其他的一些内容在之前就已经提过,不加赘述。 1 初始化 1.1 rtl8126_init_one 从第一篇我们可以知道每个 PCI 驱动都注…...

基于Java和PostGIS的AOI面数据球面面积计算实践

目录 前言 一、计算方法简介 二、球面面积计算 1、AOI数据转Polygon 2、Geotools面积计算 3、GeographicLib面积计算 4、PostGIS面积计算 三、结果分析 1、不同算法结果对比 2、与互联网AOI对比 3、与天地图测面对比 四、总结 前言 在现代地理信息系统(G…...

Spring Boot之Web服务器的启动流程分析

如何判断创建哪种web容器:servlet?reactive? 我们在启动Spring Boot程序的时候,会使用SpringApplication.run方法来启动,在启动流程中首先要判断的就是需要启动什么类型的服务器,是servlet?或者…...

C# SQLite高级功能示例

目录 1 主要功能 2 程序结构和流程 3 详细实现说明 3.1 基础设置 3.2 事务演示 3.3 索引演示 3.4 视图演示 3.5 触发器演示 3.6 全文搜索演示 3.7 窗口函数演示 3.8 外键约束演示 4 高级功能示例 5 单个方法详细介绍 5.1 SetupExampleData()方法 5.2 UseTransact…...

【周输入】510周阅读推荐-1

本号一年了,有一定的成长,也有很多读者和点赞。自觉更新仍然远远不够,需要继续努力。 但是还是要坚持2点: 在当前这个时代,信息大爆炸,层次不齐,不追加多, 信息输入可以很多&#x…...

基于动态规划的强化学习方法

目录 # 动态规划 # 基于动态规划的强化学习方法 # 求解过程: ## 策略评估 ## 策略提升 # 价值迭代算法 # 参考 # 动态规划 动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。…...

启动 spyder ModuleNotFoundError: No module named ‘PyQt5.QtWebKitWidgets‘

一、根本原因 Spyder 版本兼容性:Spyder 4.x 依赖 QtWebKitWidgets,但该模块在 PyQt5 5.15 中已被移除。 PyQt5 版本冲突:如果你安装了较新的 PyQt5(如 5.15),则会缺少 QtWebKitWidgets。 二、解决方案 方法…...

ChemBlender:科研绘图创新解决方案

一、研究背景与冲突 (一)研究背景 在科学研究领域,可视化表达对于成果的呈现与交流至关重要。科研绘图作为科学可视化的关键手段,涵盖了从微观分子结构到宏观实验现象等广泛的内容。随着科研的深入发展,研究对象的复杂…...

Uniapp Android/IOS 获取手机通讯录

介绍 最近忙着开发支付宝小程序和app,下面给大家介绍一下 app 获取通讯录的全部过程吧,也是这也是我app开发中的一项需求吧。 效果图如下 勾选配置文件 使用uniapp开发的童鞋都知道有一个配置文件 manifest.json 简单的说一下,就是安卓/ios/…...