如何从客户端保持 telnet 连接处于活动状态

时间:2021-01-28 09:27:04

标签: linux terminal telnet

我有一个设备作为 telnet 服务器,但如果在 60 秒内没有收到数据包,则断开连接,由于某种原因,此行为无法更改。 Putty 具有定期向服务器发送空数据包以保持会话活动的功能,这对我来说很好用。但有时我必须从 linux 终端 telnet 到设备,其中 putty 不可用。所以我想知道是否可以使用 linux telnet 客户端定期发送空数据包,或任何其他保持会话活动的方式,或其他可以执行此操作的命令行 telnet 客户端。

2 个答案:

答案 0 :(得分:0)

使用命令行 telnet 客户端是不可能的。您可以全局启用频繁的 TCP keepalive:TCP Keepalive HOWTO。我不知道这是否有任何副作用,但似乎是一种可行的解决方法。

顺便说一下,putty 在 Linux 上是可用的。你只需要在你的机器上有一个 X 服务器来在远程主机上运行它(我假设你是 ssh-ing 到你执行 telnet 工作的 Linux 机器上)。如果您使用的是 Windows,则适用于 Windows 的 Linux 子系统和 X 服务器可能会奏效。 Cygwin 也适用于此。

答案 1 :(得分:0)

这不是一个完美的解决方案,但可能就足够了。将 telnet 包装在检测缺少输入的期望脚本中。它将转义序列 control-] 发送到 telnet 客户端以获取命令提示符 telnet>,并发出命令 send nop(无操作)。我认为这足以保持连接有效。如果没有,还有其他命令可以尝试。

#!/usr/bin/expect
spawn telnet localhost 
expect "ogin: "
send "username\r"
expect "assword:"
send "mypw\r"
expect {$ }
interact timeout 10 {
 log_user 0; send "\x1d"; expect "telnet>" { send "send nop\r" };
 expect "send nop\r\n"; log_user 1 }

显然,您需要使用所需的主机名、用户名、密码和预期的命令提示符对其进行编辑。有关语法,请参阅 man expect