当我运行此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命令shell中运行良好。
答案 0 :(得分:3)
telnet
命令本身对端口23与其他端口做了不同的事情:主要是它实现了telnet选项协商。 telnetlib
的目的是为您实现Telnet协议(选项协商等),以便您可以在端口23上与另一端需要telnet
的服务进行交互。由于telnet
命令不对端口223执行这些操作,因此您的设备可能不期望telnet选项协商,并且被telnetlib
的初始化(在带内发送telnet选项)所困惑。 / p>
解决方案是使用普通socket
与端口223进行交互。已经有很多关于SO的例子。