Я настійно рекомендую проти використання ping
для визначення підключення. Занадто багато мережевих адміністраторів, які відключають ICMP (протокол, який він використовує) через побоювання з приводу того, що пінг- атаки потікають від їхніх мереж.
Натомість я використовую швидкий тест надійного сервера на порту, який ви можете розраховувати на відкриття:
if nc -zw1 google.com 443; then
echo "we have connectivity"
fi
При цьому використовується Netcat ( nc
) в його сканування порту режимі, швидкий пхати ( -z
в режимі нульового введення / виведення [використовується для сканування] ) зі швидкою тайм - ауту ( -w 1
очікування не більше однієї секунди). Він перевіряє Google на порт 443 (HTTPS).
Я використовував HTTPS, а не HTTP як зусилля для захисту від закритих порталів і прозорих проксі-серверів, які можуть відповідати на порт 80 (HTTP) для будь-якого хоста. Це менш ймовірно при використанні порту 443, оскільки не було б невідповідності сертифікатів, але все ж це відбувається.
Якщо ви хочете довести себе проти цього, вам потрібно перевірити безпеку підключення:
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
Це перевіряє наявність з'єднання (замість того, щоб чекати, коли Opensl буде вичерпано), а потім робить рукостискання SSL, натискаючи на фазі перевірки. Він мовчки виходить ("вірно"), якщо перевірка була "ОК", або ж виходить із помилкою ("помилковою"), тоді ми повідомляємо про знахідку.
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'