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