TOC:
- Использование 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 $?
, конечно, только для иллюстрации.