Wie kann eine Internetverbindung getestet werden, ohne eine Website anzupingen? Ich meine, was ist, wenn eine Verbindung besteht, die Site jedoch nicht verfügbar ist? Gibt es einen Scheck für eine Verbindung mit der Welt?
bash
connection
ping
lauriys
quelle
quelle
Antworten:
Ohne Ping
-q : Stummschaltungsmodus
--spider : nicht bekommen, nur Seitenverfügbarkeit prüfen
$? : Shell-Rückkehrcode
0 : Shell-Code "Alles in Ordnung"
Ohne wget
quelle
nc
, um sicherzustellen, dass die Zeitüberschreitung abläuft . so etwas wienc google.com 80 -w 10
Pingen Sie Ihr Standard-Gateway an:
quelle
function ping_gw() { ... && return 0 || return 1 }
und dann wieping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
und habe immer noch ein Standard-Gateway und es ist pingbar, obwohl ich die Außenwelt tatsächlich nicht erreichen kann.Super Vielen Dank an den Benutzer somedrew für seinen Beitrag hier: https://bbs.archlinux.org/viewtopic.php?id=55485 am 2008-09-20 02:09:48
Hier ist mein Skript zum Testen auf eine andere Netzwerkverbindung als die Rückschleife. Ich verwende das Folgende in einem anderen Skript, das ich habe, um regelmäßig zu testen, ob meine Website zugänglich ist. Wenn es NICHT zugänglich ist, weist mich ein Popup-Fenster auf ein Problem hin.
Das folgende Skript verhindert, dass ich alle fünf Minuten Popup-Nachrichten erhalte, wenn mein Laptop nicht mit dem Netzwerk verbunden ist.
Hinweis für Neueinsteiger: Die letzte 'if'-Anweisung testet, ob NICHT [!] Online ist, und wird beendet, wenn dies der Fall ist. Weitere Informationen finden Sie unter man bash und suchen Sie nach "Ausdrücke können kombiniert werden".
PS Ich bin der Meinung, dass Ping hier nicht das Beste ist, da es darauf abzielt, eine Verbindung zu einem bestimmten Host zu testen. NICHT zu testen, ob eine Verbindung zu einem Netzwerk jeglicher Art besteht.
PPS The Above funktioniert unter Ubuntu 12.04. Das / sys ist in einigen anderen Distributionen möglicherweise nicht vorhanden. Siehe unten:
quelle
cat /sys/class/net/wwan0/carrier
nicht auf Ubuntu 14.04 LTS.2>/dev/null
nachcat /sys/class/net/$interface/carrier
nicht Fehlerausgang haben , falls Vernetzung deaktiviert ist.Dies funktioniert sowohl unter MacOSX als auch unter Linux:
quelle
ping: invalid option -- w
)fping google.com
oder macht einfachfping 8.8.8.8
die Magie mit einem Bonus Sie erhalten Statuscode, ohne ihn testen zu müssen ("google.com is alive
") ...In Bash wird der Netzwerk-Wrapper über / dev / { udp , tcp } / host / port verwendet :
(
:
ist das Bash-No-Op, weil Sie nur die Verbindung testen, aber nicht verarbeiten möchten.)quelle
Ich habe zuvor Skripte geschrieben, die einfach Telnet verwenden, um eine Verbindung zu Port 80 herzustellen, und dann den Text übertragen:
gefolgt von zwei CR / LF-Sequenzen.
Vorausgesetzt, Sie erhalten eine HTTP-Antwort zurück, können Sie im Allgemeinen davon ausgehen, dass die Site funktioniert.
quelle
Bei der Top-Antwort fehlt die Tatsache, dass Sie eine perfekt stabile Verbindung zu Ihrem Standard-Gateway haben können. Dies bedeutet jedoch nicht automatisch, dass Sie tatsächlich etwas im Internet erreichen können. Das OP fragt, wie er / sie eine Verbindung mit der Welt testen kann. Daher schlage ich vor, die Top-Antwort zu ändern, indem Sie die Gateway-IP in eine bekannte IP (xyzw) ändern, die sich außerhalb Ihres LAN befindet.
Die Antwort würde also lauten:
Entfernen Sie auch die ungünstigen Backticks für die Befehlsersetzung [1] .
Wenn Sie nur sicherstellen möchten, dass Sie mit der Welt verbunden sind, bevor Sie Code ausführen, können Sie auch Folgendes verwenden:
quelle
Stellen Sie sicher, dass in Ihrem Netzwerk TCP-Datenverkehr ein- und ausgeht. Anschließend können Sie mit dem folgenden Befehl Ihre öffentlich zugängliche IP-Adresse wiederherstellen
quelle
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob eine Website aktiv ist und welche Statusmeldung der Webserver anzeigt:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
Der Statuscode '200 OK' bedeutet, dass die Anfrage erfolgreich war und eine Website erreichbar ist.
quelle
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Wenn Ihr lokaler Nameserver nicht verfügbar ist,
ist eine leicht zu merkende Always-Up-IP (eigentlich sogar ein Nameserver).
quelle
Die Antwort mit der höchsten Bewertung funktioniert nicht für MacOS. Für Benutzer eines Mac habe ich dies erfolgreich getestet:
getestet unter MacOS High Sierra 10.12.6
quelle
route
Befehl soroute -n get default 2> /dev/null | grep gateway
, dass im Offline-Modus kein Fehler in stderr geschrieben wird.Dieses Bash-Skript sucht kontinuierlich nach dem Internet und gibt einen Piepton aus, wenn das Internet verfügbar ist.
quelle
kürzester Weg:
fping 4.2.2.1
=> "4.2.2.1 lebt"Ich bevorzuge dies, da es schneller und weniger ausführlich ausgegeben wird als der
ping
Nachteil, dass Sie es installieren müssen.Sie können eine beliebige öffentliche DNS anstelle einer bestimmten Website verwenden.
fping -q google.com && echo "do something because you're connected!"
-q
Gibt einen Exit-Code zurück, daher zeige ich nur ein Beispiel für die Ausführung von etwas, das Sie online sind.auf dem Mac installieren :
brew install fping
; auf Ubuntu:sudo apt-get install fping
quelle
Ping wurde entwickelt, um genau das zu tun, was Sie suchen. Wenn die Site jedoch das ICMP-Echo blockiert, können Sie das Telnet jederzeit für Port 80 einer Site, eines Wget oder eines Curls ausführen.
quelle
Das Überprüfen der Google-Indexseite ist eine weitere Möglichkeit:
quelle
Ähnlich wie bei der Antwort von @ Jesse ist diese Option möglicherweise viel schneller als jede Lösung
ping
und möglicherweise etwas effizienter als die Antwort von @ Jesse .Explenation:
Dieser Befehl verwendet
find
mit-exec
Befehl für alle Dateien ausgeführt werden nicht genannt*lo*
in/sys/class/net/
. Dies sollten Links zu Verzeichnissen sein, die Informationen zu den verfügbaren Netzwerkschnittstellen auf Ihrem Computer enthalten.Der ausgeführte Befehl ist ein
sh
Befehl, der den Inhalt der Dateicarrier
in diesen Verzeichnissen überprüft . Der Wert von$interface/carrier
hat 3 Bedeutungen - Zitat :Die erste Option wird in der Antwort von @ Jesse nicht berücksichtigt . Der
sh
gestreifte Befehl lautet:cat
wird verwendet, um den Inhalt dercarrier
gesamten Ausgabe zu überprüfen und sie auf die Standardausgabe umzuleiten, auch wenn dies fehlschlägt, da die Datei nicht lesbar ist. Wenngrep -q
Funde"1"
unter diesen Dateien bedeutet dies , gibt es mindestens 1 - Schnittstelle verbunden. Der Exit-Code vongrep -q
ist der endgültige Exit-Code.Verwendung
Wenn Sie beispielsweise den Exit-Status dieses Befehls verwenden, können Sie damit nur dann einen Gnubiff in Ihrem Befehl starten,
~/.xprofile
wenn Sie über eine Internetverbindung verfügen.Referenz
/sys/class/net/
quelle
Pong bedeutet nicht, dass der Webdienst auf dem Server ausgeführt wird. Dies bedeutet lediglich, dass der Server auf das ICMP-Echo antwortet. Ich würde empfehlen, Curl zu verwenden und den Rückgabewert zu überprüfen.
quelle
Wenn Sie tatsächlich nach einem Internetzugang suchen möchten, sind viele der vorhandenen Antworten auf diese Frage fehlerhaft. Einige Dinge, die Sie beachten sollten:
Vor diesem Hintergrund glaube ich, dass die beste Strategie darin besteht, mehrere Sites über eine HTTPS-Verbindung zu kontaktieren und true zurückzugeben, wenn eine dieser Sites antwortet.
Beispielsweise:
Verwendung:
Einige Anmerkungen zu diesem Ansatz:
quelle
if wait $pid;
. Keine Ahnung, warum das auf Ihrem System nicht funktioniert. Bist du sicher, dass du Bash verwendest?wait
und verstehe jetzt, dass der Rückkehrcode tatsächlich getestet wird. Ich habe Ihren Code erneut kopiert und heute funktioniert es - whoops! Ich muss beim letzten Mal etwas durcheinander gebracht haben, obwohl ich nicht verstehen kann, was oder wie. Trotzdem mea culpa. Entschuldigung.Mit diesem Befehl:
.
quelle
Dies ist deutlich schneller als jede hier veröffentlichte Lösung und kann auch zum Testen eines bestimmten Hosts verwendet werden.
Der Trick besteht darin, die IP mit einem weniger ausgelasteten DNS-Solver zu lösen als dem von
ping
:quelle