Ich empfehle gegen mit ping
Konnektivität zu bestimmen. Es gibt zu viele Netzwerkadministratoren, die ICMP (das verwendete Protokoll) deaktivieren, weil sie sich Sorgen über Ping-Flood- Angriffe machen, die von ihren Netzwerken ausgehen.
Stattdessen benutze ich einen schnellen Test eines zuverlässigen Servers an einem Port, von dem Sie erwarten können, dass er offen ist:
if nc -zw1 google.com 443; then
echo "we have connectivity"
fi
Dies verwendet netcat ( nc
) in seinem Port-Scan- Modus, einem schnellen Poke ( -z
ist der Null-E / A-Modus [zum Scannen verwendet] ) mit einem schnellen Timeout ( -w 1
wartet höchstens eine Sekunde). Es überprüft Google auf Port 443 (HTTPS).
Ich habe HTTPS anstelle von HTTP verwendet, um mich vor unverlierbaren Portalen und transparenten Proxys zu schützen, die für jeden Host auf Port 80 (HTTP) antworten können. Dies ist weniger wahrscheinlich, wenn Port 443 verwendet wird, da ein Zertifikat nicht übereinstimmt, dies jedoch immer noch der Fall ist.
Wenn Sie sich dagegen behaupten möchten, müssen Sie die Sicherheit der Verbindung überprüfen:
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
Dies prüft auf eine Verbindung (anstatt auf eine Zeitüberschreitung von openssl zu warten) und führt dann den SSL-Handshake durch, wobei die Überprüfungsphase verschlüsselt wird. Es wird stillschweigend beendet ("true"), wenn die Überprüfung "OK" war, oder es wird mit einem Fehler beendet ("false"), und der Befund wird gemeldet.
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'