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
:
Зауважте, що nc
на RHEL 7 встановлюється назад несумісна версія .
Команда:
Зауважте, що команда нижче унікальна тим, що вона ідентична як для 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 $?
команда, звичайно, лише для ілюстрації.