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

如何在Windows下用Python的telnetlib实现telnetlib3相同效果?

问题:telnetlib无法获取Telnet服务欢迎消息的解决办法

我使用telnetlib3的Python代码可以在Linux和Windows系统中正常连接Telnet服务,并获取预期的欢迎输出:

import asyncio
import telnetlib3

async def foo():
    reader, writer = await telnetlib3.open_connection("192.168.200.10", 9000)
    data = await asyncio.wait_for(reader.read(4096), timeout=2)
    print(data)

asyncio.run(foo())

预期输出:

Terminal emulator detected (unknown), switching to interactive shell

Debug server connected. Waiting for commands (or 'exit')...
Supported client terminals: telnet, screen, PuTTY.

prompt >>

但改用telnetlib编写代码时,在Linux和Windows系统中仅能得到输出b'\x1b[0G\x1b[0G',代码如下:

import time
import telnetlib

session = telnetlib.Telnet("192.168.200.10", 9000, 2)
received = b""
t0 = time.time()
while time.time() - t0 < 2:
    data = session.read_very_eager()
    if data:
        received += data
        t0 = time.time()
print(received)

需要修改上述telnetlib代码,使其在Windows系统下也能获取到完整的交互式欢迎消息。


解决思路与修改方案

问题根源在于telnetlib默认不会自动处理Telnet协议的选项协商,而目标Telnet服务需要客户端完成终端类型协商后,才会返回完整的欢迎消息。telnetlib3内部自动处理了这些协商流程,因此能正常获取内容。

方案一:手动处理终端类型协商

通过模拟标准Telnet客户端的协商行为,向服务端发送终端类型信息,触发服务端返回完整内容:

import telnetlib
import time

session = telnetlib.Telnet("192.168.200.10", 9000, 2)

# 发送Telnet协商命令:请求协商终端类型(DO TERMINAL TYPE)
session.write(b'\xff\xfd\x18')
time.sleep(0.1)
# 回复终端类型为vt100(SB TERMINAL TYPE + IS + 终端类型 + SE)
session.write(b'\xff\xfa\x18\x00vt100\xff\xf0')

received = b""
t0 = time.time()
while time.time() - t0 < 2:
    data = session.read_very_eager()
    if data:
        received += data
        t0 = time.time()
# 按服务端编码解码为字符串(此处假设为utf-8)
print(received.decode('utf-8'))

方案二:直接等待服务端提示符

如果已知服务端最终输出的提示符(如示例中的prompt >>),可以直接使用read_until方法等待该提示符,跳过手动协商的步骤,实现更简洁可靠的获取:

import telnetlib

session = telnetlib.Telnet("192.168.200.10", 9000, 2)
# 等待直到出现目标提示符,超时时间设为2秒
result = session.read_until(b'prompt >>', timeout=2)
# 解码为字符串输出
print(result.decode('utf-8'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:50:20