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

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 的核心结构和数据流,便于调试或二次开发。

相关文章:

  • 我的五周年创作纪念日
  • 股指期货是什么?有啥特点?怎么用?
  • Linux 内核网络协议栈:从 Socket 类型到协议注册的深度解析
  • 大模型常用位置编码方式
  • MYSQL 查询去除小数位后多余的0
  • Oracle SYSTEM/UNDO表空间损坏的处理思路
  • 数据归属地信息库在广告营销中的应用
  • SQL server数据库实现远程跨服务器定时同步传输数据
  • 集成DHTMLX 预订排期调度组件实践指南:如何实现后端数据格式转换
  • [论文阅读]ControlNET: A Firewall for RAG-based LLM System
  • HTML应用指南:利用POST请求获取全国京东快递服务网点位置信息
  • LangSmith 基本使用教程
  • 力扣热题——统计平衡排列的数目
  • 遨游卫星电话与普通手机有什么区别?
  • 算法备案部分咨询问题解答第三期
  • VScode 的插件本地更改后怎么生效
  • Mysql 事物
  • Jupyter Notebook 配置学习笔记
  • 物联网设备状态监控全解析:从告警参数到静默管理的深度指南-优雅草卓伊凡
  • 离散制造企业WMS+MES+QMS+条码管理系统高保真原型全解析
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 排污染黑海水后用沙土覆盖黑泥?汕尾环保部门:非欲盖弥彰
  • 沈阳一超市疑借领养名义烹食流浪狗,当地市监局:已收到多起投诉
  • 再获殊荣!IP SH跻身上海文化品牌全球传播力TOP 6
  • 季后赛主场优势消失之谜,这事竟然要赖库里