Python Telnet端口23与223结果不同

2 投票
1 回答
6170 浏览
提问于 2025-04-17 04:21

当我运行这段Python 3.1代码来通过telnetlib访问一个设备时,一切都很正常:

import telnetlib

tn = telnetlib.Telnet("15.39.100.126", "23")
tn.write(b"menu\n")
tn.write(b"0\n")
print(tn.read_all().decode('ascii'))

然后,我运行这段代码(和上面的很相似,但这个端口显示不同的菜单)去访问223端口,却什么都没得到:

import telnetlib

tn = telnetlib.Telnet("15.39.100.126", "223")
tn.write(b"ipconfig\n")
tn.write(b"exit\n")
print(tn.read_all().decode('ascii'))

当我手动运行telnet会话连接到223端口时,它报告了这个:

WinCEPocket CMD v 6.00
\> 

有没有人遇到过类似的情况,就是在同一个设备上,不同端口的telnet行为不一样?或者有没有人知道我在使用WinCE Pocket时需要采取什么特别的方法?23端口不使用WinCE Pocket - 只有223端口使用。两个telnet程序在同一个Windows命令行下运行都很好。

1 个回答

3

telnet这个命令在23号端口和其他端口的功能是不一样的:主要是它会进行telnet选项的协商。telnetlib的目的是为了帮你实现Telnet协议(比如选项协商等),这样你就可以和在23号端口上期待telnet连接的服务进行互动。因为telnet命令在223号端口上不会进行这些操作,所以你的设备可能不期待telnet选项的协商,这就导致了telnetlib的初始化(在数据流中发送telnet选项)让它感到困惑。

解决办法是直接使用普通的socket来和223号端口进行互动。网上已经有很多相关的例子可以参考。

撰写回答