telnet无交互测试端口连通性

之所有要无交互,是因为需要批量测试大量主机的网络连通性。所以需将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.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,240评论 2 33
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,238评论 1 19
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,628评论 9 467
  • 假如一场比赛你赢了会有奖励输了也没什么付出这就是零和博弈。 这样无法促进大家的积极性,所以在这种时候提倡吃着碗里的...
    Ding欣欣阅读 208评论 0 0
  • 尧宇阅读 127评论 0 1