Ich habe Skripte gefunden, die besagen, dass sie nach Internetverbindungen suchen. Einige überprüfen die IP-Adresse, wenn die Schnittstelle aktiv ist, jedoch nicht die Internetverbindung. Ich habe einige gefunden, die Ping wie folgt verwenden: if [ 'ping google.com -c 4 | grep time' != "" ]; then
Manchmal kann dies jedoch unzuverlässig sein, da Ping selbst aus irgendeinem Grund hängen bleibt (z. B. wenn auf ein feststeckendes E / A gewartet wird).
Irgendwelche Vorschläge zur richtigen / zuverlässigen Überprüfung der Internetverbindung mithilfe von Skripten? Muss ich einige Pakete verwenden?
Es muss in der Lage sein, in regelmäßigen Abständen zu überprüfen cron
, und dann etwas zu tun, wenn die Verbindung unterbrochen wirdifup --force [interface]
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'
>/dev/null
>/dev/null
die Standardausgabe an/dev/null
das Null-Gerät um , das darüber verfügt, da dies in diesem Fall nicht erwünscht ist (alles, was uns interessiert, sind die Exit-Werte der Befehle). Stattdessen wird eine zutreffendere Ausgabe aus denecho
Zeilen entnommen .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:
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:
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.
quelle
-d
zBnc -dzw1
auch hinzu, damit es nicht auf STDIN lauscht und unbegrenzt in einem Skript hängt. und vielleicht verwenden Sie 8.8.8.8 anstelle von google.com, um eine Suche zu speichern.nc -dzw1 8.8.8.8 443
-d
in meinen Skripten gebraucht , vielleicht weil ich noch nie eine unbenutzte Pipeline hatte. Das sollte sicher sein, hinzuzufügen.-w 1
kostet immer noch eine Sekunde, wenn es keine Konnektivität gibt, obwohl Sie vielleichtnc
irgendwo ein dunkles Problem haben. Wenn Sie eine aktuelle Version von nmap installiert haben, können Sie dies stattdessen tunncat --send-only --recv-only -w 334ms
nc
Sie diese Ausfallzeit auf ein Drittel verkürzen (334 ms sind eine gute Wartezeit).Ich habe ein Skript erstellt, das mehrere Methoden zur Überprüfung der Internetverbindung verwendet (Ping, NC und Curl, dank Adam Katz, Gilles und Archemar). Ich hoffe, jemand findet das hilfreich. Fühlen Sie sich frei, es nach Ihren Wünschen zu bearbeiten / zu optimieren.
Überprüft Ihr Gateway, DNS und Ihre Internetverbindung (unter Verwendung von curl, nc und ping). Setze dies in eine Datei und mache es dann ausführbar (normalerweise
sudo chmod +x filename
)quelle
$GW
?/sbin/ip route | awk '/default/ { print $3 }'
bekommt die Gateway-Adresse von der (hoffentlich) primären Schnittstelle. Wenn Sie möchten, können Sie die Gateway-IP-Adresse selbst festlegen.Es gibt viele IPs im Internet. Ein leichter Ansatz ist es, einige von ihnen zu pingen
Eine vollständigere Antwort könnte darin bestehen, dass Seiten verwendet werden
wget
woher
quelle
Dank Ihrer Beiträge von jedem Benutzer und anderen Websites konnte ich dieses Skript in 3 Tagen fertigstellen. und ich werde es für seine Verwendung frei lassen.
Dieses Skript automatisiert die Erneuerung der IP-Adresse, wenn die Verbindung unterbrochen wird.
Pastebin: https://pastebin.com/wfSkpgKA
quelle
eth0
, dies wird jedoch nicht erwähnt.) (2) Verwenden von Englisch. (3) Setzen Sie alle Shell - Variablen (zB"$HOST"
,"$LINE1"
und"$LOG"
) in doppelte Anführungszeichen. (4) Entweder einstellenLINE2
oder nicht verwenden. (Ich vermute , dass Sie bekommenLINE1
/LINE2
verwechseltinet4
/inet6
.) ... (Fortsetzung)