如何检查 Telnet 连接是否仍然建立?使用 telnetlib

r00*_*0fl 5 telnetlib

我想检查使用 telnetlib 的连接是否仍然存在。

我这样做的方法是发送ls命令并检查答案,但我确信必须有更流畅的解决方案。

Loh*_*HAR 0

我从这里得到了这个想法,所以向他们致敬,代码可能是这样的

def check_alive(telnet_object):
    try:
        if telnet_object.sock:
            telnet_object.sock.send(telnetlib.IAC + telnetlib.NOP)
            telnet_object.sock.send(telnetlib.IAC + telnetlib.NOP)
            telnet_object.sock.send(telnetlib.IAC + telnetlib.NOP)
            return True
    except:
        pass 
Run Code Online (Sandbox Code Playgroud)

这个想法很简单:

  • 如果调用 close() .sock 将为 0,所以我们什么也不做
  • 否则,我们会尝试发送一些无害的内容,这些内容不应与底层服务交互,IAC + NOP 是一个很好的选择。 LaterEdit:似乎只发送一次是不够的,所以我只做了 3 次,我知道这不是很专业,但是......“如果它看起来很愚蠢,但它有效......比它不愚蠢”
  • 如果一切顺利,我们会得到“return True”,这样我们就会得到答案,否则,异常将被忽略,并且,由于没有返回,我们将得到 None 作为响应

我已将这种方法用于针对几个 Cisco 路由器的直接连接和代理(SocksiPy)连接