参考
https://www.jianshu.com/p/a381f1240a9b http://www.scicat.cn/jingyan/20210824/5811420.html https://blog.csdn.net/weixin_43796685/article/details/104499543
背景
由于进程在运行时,有时候会出现,进行依然存在,而端口已经不在的情况,此时服务已经不正常了。为了防止这种情况出现,所以需要检测进程所启动的端口是否能正常响应。
检测端口的命令
对于http的端口,可以使用curl命令用来检测http端口,如果是tcp和udp端口,则不能使用curl命令。
curl 端口正常并能连通
curl 端口未正常打开
curl www.baidu.com:8080
telnet
telnet命令使用的是tcp协议,换句话说telnet命令只能检测tcp的这个端口打开了没。即如果这个端口是udp端口,而不是tcp端口,那么使用telnet则无法检测该端口的状态。 使用telnet命令时存在以下3种情况:
- 端口未打开没响应
> telnet 101.199.97.65 62715
Trying 101.199.97.65...
- 端口打开但被拒绝连接
> telnet 101.199.97.65 62715
Trying 101.199.97.65...
telnet: connect to address 101.199.97.65: Connection refused
- 端口打开并建立连接
> telnet 101.199.97.65 62715
Trying 101.199.97.65...
Connected to 101.199.97.65.
Escape character is '^]'.
此时命令未退出。
nc
正如上面说到的,telnet只能检测tcp的端口,而不能检测udp的端口。要实现这种需求,则可以使用nc命令。对于nc命令执行的结果,我们可以通过
安装nc命令
yum install nc
nc 命令参数
nc参数默认检测tcp端口,在指定-u 参数时,检测的就是udp端口。
-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议,即检测udp端口
-v 显示指令执行过程,可以多次使用,如-vv,则表示打印更详细的信息
-w <超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用,表示连接立即关闭,不进行数据交换,nc执行完会立即退出。
nc使用
在使用nc命令时,可以通过命令的状态码来证明端口是否打开,0表示命令成功执行,也就是端口打开并能连通。1表示命令执行失败,也就是端口没有打开或不能连通。
- 端口没有打开或不能连通
> nc -v -z 10.244.27.20 6880
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused
- 端口没有打开或不能连通
> nc -v -z -u 10.244.27.20 8733
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.244.27.20:8733.
Ncat: Connection refused
- 端口打开并建立连接
> nc -v -z 10.244.27.20 8733
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.244.27.20:8733.
Ncat: 0 bytes sent, 0 bytes received in 0.0.1 seconds.
|