【问题标题】:Python Telnet Port 23 vs 223 with Different ResultsPython Telnet 端口 23 与 223 的结果不同
【发布时间】:2011-10-14 22:14:34
【问题描述】:

当我运行此 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 上运行得一样好。

【问题讨论】:

    标签: python python-3.x windows-ce telnetlib


    【解决方案1】:

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

    解决方案是使用普通的socket 与端口 223 进行交互。在 SO 上已经有很多这样的例子了。

    【讨论】:

    • Ben,感谢您的回答,但我不确定如何实施您所说的可能的解决方案。你能详细说明吗?汤姆
    • 本,非常感谢您的更新。根据我的经验,这是有道理的。事实上,我也尝试过使用这个端口进行一些套接字编程,但到目前为止,我还无法从套接字代码中获得可破译的输出。我会继续尝试,也许会在套接字代码上发布一个问题。汤姆
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 2016-09-17
    • 2021-03-05
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    相关资源
    最近更新 更多