上午接到任务,将来业务上线前,要求我们先做一下我们系统业务与其他系统业务的连通性测试。包括ping测试(网络是否连通)、端口是否打开。领导给的意见是使用telnet,因为之前他们的业务也是这样测试的,但是他具体的细节忘了。要求我完成一个脚本实现该功能。
当然,大家都知道ping测试只能测网络是否可达,但是具体的端口是否开发是无法用ping测试的。我就先去使用telnet去实现。由于我只是想通过使用telnet来实现判断,并不想真正去做登录端口。
在我做实验时,变出现了以下的问题
我必须再次输入quit才能退出。这对于批量处理来说简直是崩溃的。后来求助网友,有人说可以使用nc。这个我是知道可以的,因为我自己上网搜索也有人这样使用。但是我们环境的要求,不能随便安装软件,并且还要审批,非常复杂。再加上领导以前确实是通过telnet实现的。我也相信telnet确实可以实现,只不过我不知道。后来我就去查看man telnet。最后,实践着实践着。就发现。我可以这样:
[root@centos6~]#echo q|telnet -e 'q' 192.168.0.103 22
Telnet escape character is 'q'.
Trying 192.168.0.103...
Connected to 192.168.0.103.
Escape character is 'q'.
telnet> Connection closed.
[root@centos6~]#echo q|telnet -e 'q' 192.168.0.103 22 > /dev/null
[root@centos6~]#echo $?
0
再来看,telnet 一个没有打开的端口。这样我就可以无需登录某端口实现判断其是否开放。
[root@centos6~]#echo q|telnet -e 'q' 192.168.0.103 222 > /dev/null
telnet: connect to address 192.168.0.103: No route to host
[root@centos6~]#echo $?
1
现在来看,我已经解决了telnet的问题,那么就好说了。
我脚本的思路首先是通过ping来判断网络通不通,再次使用telnet来判断端口是否打开。
现在复习一下ping命令,简单说一下ping -c 10 -i 0.2 192.168.0.103,向192.168.0.103发送间隔为0.2s,总数为10个的报文。每个系统的最小间隔可能不同,有时需要调整改值。还有一个叫nc的命令也可以很好地判断端口是否开放。如:nc -z 192.168.0.103 22
本文转自 ping9527 51CTO博客,原文链接:http://blog.51cto.com/babyhanggege/1900359,如需转载请自行联系原作者