
Ich möchte mir selbst ein Knurren senden, nachdem der SuSE-Server den Startvorgang abgeschlossen hat. Ich habe diese Nachricht erhalten socket_sendto(): unable to write to socket [101]: Network is unreachable in
.
Wie kann ich über die Befehlszeile prüfen, ob das Netzwerk erreichbar ist und warten, falls dies nicht der Fall ist?
Antwort1
ping
zu einem externen Host kann aus einer Vielzahl von Gründen fehlschlagen, von denen nur wenige tatsächlich etwas Nützliches über den Zustand Ihres eigenen Netzwerks aussagen.
Öffnen Sie als ersten Schritt ein Terminalfenster und geben Sie
ip route ls
Sie sollten eine Ausgabe in etwa wie folgt sehen:
shadur@equinox:~$ ip route ls
192.168.15.0/24 dev eth0 proto kernel scope link src 192.168.15.102
default via 192.168.15.1 dev eth0
Dies zeigt an, dass Ihr lokales Netzwerk eine Ethernet-Verbindung ( eth0
) mit der Adresse ist 192.168.15.0
und dass sein Standard-Gateway, über das es auf den Rest des Internets zugreift, unter zu finden ist 192.168.15.1
.
Als nächstes können Sie es mit ping
dieser Adresse versuchen:
shadur@equinox:~$ ping 192.168.15.1
PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data.
64 bytes from 192.168.15.1: icmp_req=1 ttl=255 time=0.352 ms
64 bytes from 192.168.15.1: icmp_req=2 ttl=255 time=0.269 ms
^C
--- 192.168.15.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.269/0.310/0.352/0.045 ms
Wenn Sie etwas Ähnliches wie oben sehen, ist Ihr eigenes lokales Netzwerk zumindest in Ordnung. An diesem Punkt können Sie mit fortgeschritteneren Tools nachsehen, traceroute
wo Ihre Verbindung zum Ziel möglicherweise fehlschlägt.
Nach einer kurzen Google-Überprüfung, was growl
eigentlich passieren soll, habe ich jedoch das Gefühl, dass etwas anderes schief läuft. Können Sie Ihre Frage erweitern und uns ein paar weitere Einzelheiten dazu geben, was Sie versuchen, wie Sie es versuchen und die vollständige Fehlerausgabe? Die Zeile, die Sie uns gerade geben, wird abrupt abgeschnitten ...
Antwort2
Eine sehr einfache und schnelle Möglichkeit ist die Verwendung des ping
Befehls.
Sie können einfach eingeben
$ ping yahoo.com
(oder cnn.com oder ein anderer Host) und sehen Sie, ob Sie eine Ausgabe zurückbekommen. Dies setzt voraus, dass Hostnamen aufgelöst werden können (d. h. DNS funktioniert). Wenn nicht, können Sie hoffentlich eine gültige IP-Adresse/Nummer eines Remote-Systems angeben und sehen, ob es erreichbar ist.
Hier ist diePing-Manpage.
Aktualisieren:
Als schnelles Beispiel können Sie dieRückgabewert(z. B. mit "echo $?"
), um ping
zu sehen, ob der Befehl erfolgreich war (Sie können die Ausgabe des Befehls auch an weiterleiten > /dev/nul
). Beachten Sie, dass ich -c 1
hier verwende, Sie können aber auch mehr verwenden.
$ ping -c 1 yahoo.com
PING yahoo.com (72.30.38.140) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (72.30.38.140): icmp_seq=1 ttl=52 time=83.5 ms
--- yahoo.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 83.593/83.593/83.593/0.000 ms
echo $?
0
$ ping -c 1 unicorns.are.here
ping: unknown host unicorns.are.here
$ echo $?
2
Antwort3
Ich würde netcat
den gewünschten Service gerne in Anspruch nehmen.
Zum Beispiel das Testen eines IP-Ports, erfolgreich
> nc -zv 192.168.1.1 80
Connection to 172.26.0.1 80 port [tcp/http] succeeded!
...und scheitert
> nc -zv 192.168.1.1 22
netcat: connect to 172.26.0.1 port 22 (tcp) failed: Connection refused
mit 10s Timeout
> nc -zv -w 10 10.0.0.1 80
netcat: connect to 10.0.0.1 port 80 (tcp) timed out: Operation now in progress
Antwort4
Ich verwende die folgende Funktion ... Sie ist standardmäßig auf quad9 eingestellt, aber Sie können eine andere Domäne angeben. Nach 15 Minuten wird die Funktion abgeschaltet.
wait_for_dns() {
local fqhn="quad9.net"
fqhn=${1:-$fqhn}
printf "waiting"
for i in {1..15}; do
local a_record=$(dig +short +time=2 $fqhn)
if [[ $a_record != '' ]]; then
printf "\n"
return 0
fi
printf '.'
sleep 60
done
printf "\n"
return 1
}