Skip to main content
 首页 » 编程设计

python之是否可以自动验证 telnet

2025年05月04日9cloudgamer

使用 telnetlib 时我注意到一些有趣的变量:

AUTHENTICATION = chr(37) # Authenticate 
XAUTH = chr(41) # XAUTH 
PRAGMA_LOGON = chr(138) # TELOPT PRAGMA LOGON 
SSPI_LOGON = chr(139) # TELOPT SSPI LOGON 

此外,this page列出了一些详细描述 AUTHENTICATION 选项的 RFC。

如果我理解正确,如果 telnet 服务器支持身份验证,我应该在连接到它时收到 IAC DO AUTHENTICATION。但是,在 Linux 机器上尝试连接到 telnetd 时,我没有收到此选项,因此我无法发送 IAC WILL AUTHENTICATION。

我的理解正确吗?有没有办法让服务器进行身份验证?甚至可以自动验证 telnet session 吗? (不听“登录:”、“用户名:”、“密码:”等类似提示)

请您参考如下方法:

是的,你正在理解RFC 1416正确。如果服务器支持身份验证,它应该首先发送DO。无论如何您都可以尝试发送 WILL 但这将违反规范并且可能无论如何都行不通。

Linux telnetd,您可能指的是 netkit telnetd。据我在其联机帮助页上所见:

-a authmode This option may be used for specifying what mode should be used for authentication. Note that this option is only useful if telnetd has been compiled with support for authentication, which is not available in the current version. [...]

所以我只想说它不能那样做。我正在使用 OpenBSD telnetd(Gentoo 中的 telnet-bsd 包);它似乎有一些授权位,但我根本无法让它工作。我怀疑它只支持基于 Kerberos 的身份验证。

查看 RFC 2941 中的身份验证类型列表, 似乎大多数身份验证类型都从未指定过。看看那些,DSS/DSA 最有趣(它也用在 SSH 中)但我想很难找到兼容的服务器和客户端。可悲的是,那里似乎没有关于简单(明文)身份验证的建议。

因此,总结一下:是的,如果有人实现它,将成为可能。但是由于 telnet 实际上已经死了,我怀疑您会找到它的服务器实现。即使你这样做了,你也必须自己编写客户端,这对于受支持的方案来说并不是那么容易。所以我怀疑这样做是否值得。