Spis treści:
- Korzystanie z bash i
timeout
- Za pomocą
nc
- Komenda
- RHEL 6 (nc-1.84)
- RHEL 7 (nmap-ncat-6.40)
- Uwagi
Używanie bash i timeout
:
Zauważ, że timeout
powinien być obecny z RHEL 6+ lub alternatywnie można go znaleźć w jądrach GNU 8.22. W systemie MacOS zainstaluj go, używając brew install coreutils
i używaj go jako gtimeout
.
Komenda:
$ timeout $TIMEOUT_SECONDS bash -c "</dev/tcp/${HOST}/${PORT}"; echo $?
Jeśli parametryzujesz host i port, pamiętaj, aby podać je tak jak ${HOST}
i ${PORT}
powyżej. Nie określaj ich jedynie jako $HOST
i $PORT
, tj. Bez nawiasów klamrowych; w tym przypadku nie zadziała.
Przykład:
Sukces:
$ timeout 2 bash -c "</dev/tcp/canyouseeme.org/80"; echo $?
0
Niepowodzenie:
$ timeout 2 bash -c "</dev/tcp/canyouseeme.org/81"; echo $?
124
Jeśli musisz zachować status wyjścia bash
,
$ timeout --preserve-status 2 bash -c "</dev/tcp/canyouseeme.org/81"; echo $?
143
Używanie nc
:
Zauważ, że wsteczna niekompatybilna wersja nc
instalowana jest na RHEL 7.
Komenda:
Zauważ, że poniższe polecenie jest unikalne, ponieważ jest identyczne zarówno dla RHEL 6, jak i 7. To tylko instalacja i wyjście są różne.
$ nc -w $TIMEOUT_SECONDS -v $HOST $PORT </dev/null; echo $?
RHEL 6 (nc-1.84):
Instalacja:
$ sudo yum install nc
Przykłady:
Sukces:
$ nc -w 2 -v canyouseeme.org 80 </dev/null; echo $?
Connection to canyouseeme.org 80 port [tcp/http] succeeded!
0
Niepowodzenie:
$ 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
Jeśli nazwa hosta zostanie odwzorowana na wiele adresów IP, powyższe nieudane polecenie przejdzie przez wiele lub wszystkie z nich. Na przykład:
$ 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):
Instalacja:
$ sudo yum install nmap-ncat
Przykłady:
Sukces:
$ 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
Niepowodzenie:
$ nc -w 2 -v canyouseeme.org 81 </dev/null; echo $?
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection timed out.
1
Jeśli nazwa hosta zostanie odwzorowana na wiele adresów IP, powyższe nieudane polecenie przejdzie przez wiele lub wszystkie z nich. Na przykład:
$ 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
Uwagi:
Argument -v
( --verbose
) i echo $?
polecenie służą oczywiście wyłącznie do ilustracji.