目录:
- 使用 bash 和
timeout
- 使用
nc
- 命令
- RHEL 6 (nc-1.84)
- RHEL 7 (nmap-ncat-6.40)
- 备注
使用 bash 和 timeout:
请注意,timeout 应该存在于 RHEL 6+ 中,或者可以在 GNU coreutils 8.22 中找到。在 MacOS 上,使用brew install coreutils 安装它,并将其用作gtimeout。
命令:
$ timeout $TIMEOUT_SECONDS bash -c "</dev/tcp/${HOST}/${PORT}"; echo $?
如果对主机和端口进行参数化,请务必将它们指定为${HOST} 和${PORT},如上所述。不要仅将它们指定为$HOST 和$PORT,即不使用大括号;在这种情况下它不起作用。
示例:
成功:
$ timeout 2 bash -c "</dev/tcp/canyouseeme.org/80"; echo $?
0
失败:
$ timeout 2 bash -c "</dev/tcp/canyouseeme.org/81"; echo $?
124
如果一定要保留bash的退出状态,
$ timeout --preserve-status 2 bash -c "</dev/tcp/canyouseeme.org/81"; echo $?
143
使用nc:
请注意,在 RHEL 7 上安装了向后不兼容的 nc 版本。
命令:
请注意,下面的命令是独一无二的,因为它对于 RHEL 6 和 7 都是相同的。只是安装和输出不同。
$ nc -w $TIMEOUT_SECONDS -v $HOST $PORT </dev/null; echo $?
RHEL 6 (nc-1.84):
安装:
$ sudo yum install nc
示例:
成功:
$ nc -w 2 -v canyouseeme.org 80 </dev/null; echo $?
Connection to canyouseeme.org 80 port [tcp/http] succeeded!
0
失败:
$ nc -w 2 -v canyouseeme.org 81 </dev/null; echo $?
nc: connect to canyouseeme.org port 81 (tcp) timed out: Operation now in progress
1
如果主机名映射到多个 IP,上述失败的命令将循环遍历其中的多个或全部。例如:
$ nc -w 2 -v microsoft.com 81 </dev/null; echo $?
nc: connect to microsoft.com port 81 (tcp) timed out: Operation now in progress
nc: connect to microsoft.com port 81 (tcp) timed out: Operation now in progress
nc: connect to microsoft.com port 81 (tcp) timed out: Operation now in progress
nc: connect to microsoft.com port 81 (tcp) timed out: Operation now in progress
nc: connect to microsoft.com port 81 (tcp) timed out: Operation now in progress
1
RHEL 7 (nmap-ncat-6.40):
安装:
$ sudo yum install nmap-ncat
示例:
成功:
$ nc -w 2 -v canyouseeme.org 80 </dev/null; echo $?
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 52.202.215.126:80.
Ncat: 0 bytes sent, 0 bytes received in 0.22 seconds.
0
失败:
$ nc -w 2 -v canyouseeme.org 81 </dev/null; echo $?
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection timed out.
1
如果主机名映射到多个 IP,上述失败的命令将循环遍历其中的多个或全部。例如:
$ nc -w 2 -v microsoft.com 81 </dev/null; echo $?
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection to 104.43.195.251 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 23.100.122.175 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 23.96.52.53 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 191.239.213.197 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection timed out.
1
备注:
-v (--verbose) 参数和echo $? 命令当然仅用于说明。