Python Telnet端口23与223结果不同
当我运行这段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号端口进行互动。网上已经有很多相关的例子可以参考。