Gorąco polecam przed użyciem ping
w celu ustalenia łączności. Jest zbyt wielu administratorów sieci, którzy wyłączają ICMP (protokół, którego używa) ze względu na obawy związane z atakami ping powodziowymi pochodzącymi z ich sieci.
Zamiast tego korzystam z szybkiego testu niezawodnego serwera na porcie, którego można się spodziewać:
if nc -zw1 google.com 443; then
echo "we have connectivity"
fi
Korzysta z netcat ( nc
) w trybie skanowania portów , szybkim wciskaniu ( -z
to tryb zero-I / O [używany do skanowania] ) z szybkim limitem czasu ( -w 1
trwa maksymalnie jedną sekundę). Sprawdza Google na porcie 443 (HTTPS).
Użyłem HTTPS zamiast HTTP jako próby ochrony przed niewoli portali i przezroczystych serwerów proxy, które mogą odpowiadać na porcie 80 (HTTP) dla dowolnego hosta. Jest to mniej prawdopodobne w przypadku korzystania z portu 443, ponieważ wystąpiłoby niedopasowanie certyfikatu, ale nadal tak się dzieje.
Jeśli chcesz się temu przeciwstawić, musisz zweryfikować bezpieczeństwo połączenia:
test=google.com
if nc -zw1 $test 443 && echo |openssl s_client -connect $test:443 2>&1 |awk '
handshake && $1 == "Verification" { if ($2=="OK") exit; exit 1 }
$1 $2 == "SSLhandshake" { handshake = 1 }'
then
echo "we have connectivity"
fi
Spowoduje to sprawdzenie połączenia (zamiast oczekiwania na przekroczenie limitu czasu przez openssl), a następnie nawiązanie połączenia SSL, wpisanie na etapie weryfikacji. Po cichu kończy działanie („prawda”), jeśli weryfikacja była „OK” lub kończy się z błędem („fałsz”), wówczas zgłaszamy znalezisko.
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'