美文网首页Linux系统管理程序员
telnet无交互测试端口连通性

telnet无交互测试端口连通性

作者: 咖啡大象不含咖啡 | 来源:发表于2018-02-28 22:52 被阅读378次

    之所有要无交互,是因为需要批量测试大量主机的网络连通性。所以需将telnet写入脚本,并将其测试结果保存在文件中。所以,需要无交互式进行测试。

    • 正常来说,telnet执行结果是这样的
    $ telnet 192.168.119.166  21
    
    Trying 192.168.119.166 ...
    Connected to 192.168.119.166  21.
    Escape character is '^]'
    >
    

    此时命令未退出。
    根据提示Escape character is '^]'。 可知退出字符为’^]’ (CTRL+])。此时输入其它字符不能使其退出,CTRL+C都不行。输入CTRL+]后会自动执行,进入命令模式:

    ^]
    
    telnet>
    

    此时再运行quit才会真正退出。
    显然,这样是无法写入脚本的,所有需要让其输出结果后自行退出。有两种情景:

    • 输出结果后立即退出
    $ echo " " | telnet 192.168.119.166  21
    
    Trying 192.168.119.166....
    Connected to 192.168.119.166
    Escape character is '^]'.
    Connection closed by foreign host.
    

    上述为网路通成功的返回结果。
    网络不通的执行结果为:

    Trying 192.168.119.166...
    telnet: connect to address 192.168.119.166: Connection refused
    
    • 输出结果后延迟退出
      sleep 2使得telnet输出结果后,停留2秒后退出命令模式。
    $ sleep 2 | telnet 192.168.119.166  21
    

    返回结果与上述一致。

    使用这种方式可以将标准输出和标准错误重定向到文件中,通过分析文件的内容来判断端口打开状态。
    所以,可以通过以下方式来判断telnet测试结果的连通性。

    result=`echo "" | telnet $ip $port 2>/dev/null | grep "]" | wc -l`
    if [ $result -eq 1 ];then
          echo "$ip的$port端口已开启"
    else 
          echo "$ip的$port端口未开启"
    fi
    

    --------------------------EOF-------------------------------------
    题外话:
    telnet的Escape character可以自定义,使用参数-e:

    $ telnet -e p telnet 192.168.119.166  21
    Telnet escape character is 'p'.
    Trying telnet 192.168.119.166 ..
    Connected to telnet 192.168.119.166 .
    Escape character is 'p'.
    p
    telnet> quit
    
    Connection closed.
    

    相关文章

      网友评论

        本文标题:telnet无交互测试端口连通性

        本文链接:https://www.haomeiwen.com/subject/qacwxftx.html