如何从客户端保持 telnet 连接

How to keep telnet connection alive from client side

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

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

顺便说一句,putty 在 Linux 上可用。您只需要在您的机器上安装一个 X 服务器,以便在远程主机上 运行 它(我假设您正在通过 ssh-ing 进入您进行 telnet 工作的 Linux 框)。如果您使用 Windows,Windows 的 Linux 子系统与 X 服务器一起使用可能会成功。 Cygwin 也适用于此。

这不是一个完美的解决方案,但可能就足够了。将 telnet 包装在检测缺少输入的 expect 脚本中。它向telnet客户端发送转义序列control-]得到命令提示符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