You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用telnetlib3实现原telnetlib的多步骤Telnet交互示例?

使用telnetlib3实现多步骤Telnet交互(替代已弃用的telnetlib)

以下是对应旧版telnetlib官方示例的telnetlib3改写版本,基于asyncio实现完整的登录、执行命令、退出流程:

import asyncio
import telnetlib3

async def telnet_session(host, port, username, password):
    # 建立异步Telnet连接
    reader, writer = await telnetlib3.open_connection(host, port)

    # 匹配登录提示符并输入用户名
    login_prompt = await reader.readuntil(b"login: ")
    print(login_prompt.decode(), end="")
    writer.write(f"{username}\r\n")
    await writer.drain()

    # 匹配密码提示符并输入密码
    pass_prompt = await reader.readuntil(b"Password: ")
    print(pass_prompt.decode(), end="")
    writer.write(f"{password}\r\n")
    await writer.drain()

    # 匹配命令行提示符,执行ls命令
    # 根据实际服务器提示符调整,比如改为b"# "或b"$ "
    cmd_prompt = await reader.readuntil(b"$ ")
    print(cmd_prompt.decode(), end="")
    writer.write("ls\r\n")
    await writer.drain()

    # 读取ls命令输出直到提示符再次出现
    ls_output = await reader.readuntil(b"$ ")
    print(ls_output.decode(), end="")

    # 发送退出命令并关闭连接
    writer.write("exit\r\n")
    await writer.drain()
    await writer.close()

if __name__ == "__main__":
    # 替换为你的Telnet服务器参数
    TELNET_HOST = "your-server-ip"
    TELNET_PORT = 23
    USER = "your-username"
    PASS = "your-password"

    asyncio.run(telnet_session(TELNET_HOST, TELNET_PORT, USER, PASS))

关键说明

  • 所有IO操作都用await修饰,因为telnetlib3基于asyncio异步模型
  • reader.readuntil(b"xxx")和旧版telnetlib.Telnet.read_until逻辑一致,需传入字节串形式的提示符
  • writer.write()发送内容后必须调用await writer.drain(),确保数据完全发送到服务器
  • 需根据实际Telnet服务器的提示符调整readuntil中的匹配串(比如有些服务器用Login:大写开头,或#作为管理员提示符)
  • 若需超时控制,可给readuntil添加timeout参数,例如await reader.readuntil(b"login: ", timeout=10)

内容的提问来源于stack exchange,提问作者gwideman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:40:20