2

当我运行此 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
\> 

有没有人遇到过这样的事情,在同一设备上使用 Python 进行不同的 telnet 行为但端口不同,或者有人知道我需要对 WinCE Pocket 采取什么特殊方法吗?端口 23 不使用 WinCE Pocket - 只有端口 223 使用。两个 telnet 程序在同一个 windows 命令 shell 上运行得一样好。

4

1 回答 1

3

telnet命令本身对端口 23 和其他端口做不同的事情:主要它实现 telnet 选项协商。的目的telnetlib是为您实现 Telnet 协议(选项协商等),以便您可以与telnet另一端期望的端口 23 上的服务进行交互。由于telnet该命令不会对端口 223 执行这些操作,因此您的设备很可能不期待 telnet 选项协商,并且对telnetlib(在带内发送 telnet 选项)的初始化感到困惑。

解决方案是使用 plainsocket与端口 223 交互。SO 上已经有很多这样的例子。

于 2011-10-14T22:36:51.987 回答