Jak sprawdzić z linii poleceń, czy sieć jest osiągalna?


12

Chcę wysłać warczenie do siebie po tym, jak serwer SuSE zakończy proces uruchamiania. Dostałem tę wiadomość socket_sendto(): unable to write to socket [101]: Network is unreachable in.

Jak mogę sprawdzić z linii poleceń, czy sieć jest osiągalna i poczekać, jeśli nie jest?



Linux jedno-liner odpowiedzieć tak lub nie, jesteśmy podłączony do Internetu: ping -c 1 www.yourtrustedserver.com | grep " 0% packet loss". Powoduje to pingowanie serwera jednym pakietem i przechwytywanie danych wyjściowych dla ciągu „0% utraty pakietu”. (spacja przed 0% jest ważna) Jeśli polecenie zwraca wiersz, jesteś połączony, w przeciwnym razie nie jesteś połączony.
Eric Leschinski,

Odpowiedzi:


13

ping na zewnętrznym hoście może zawieść z wielu powodów, z których tylko kilka faktycznie mówi coś przydatnego o stanie twojej sieci.

W pierwszym kroku otwórz okno terminala i wpisz ip route ls

Powinieneś zobaczyć wynik wzdłuż linii

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 

Oznacza to, że twoja sieć lokalna jest połączeniem ethernetowym ( eth0) z adresem 192.168.15.0i że jej domyślną bramę, przez którą uzyskuje dostęp do reszty Internetu, można znaleźć pod adresem 192.168.15.1.

Następnie możesz spróbować znaleźć pingten adres:

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

Jeśli widzisz coś podobnego do powyższego, twoja sieć lokalna jest przynajmniej w porządku. W tym momencie możesz zacząć szukać za pomocą bardziej zaawansowanych narzędzi, takich jak traceroutesprawdzanie, gdzie połączenie z miejscem docelowym może nie działać.

Jednak po szybkim sprawdzeniu przez Google, co growltak naprawdę powinno być, mam wrażenie, że dzieje się coś innego. Czy możesz rozwinąć swoje pytanie, aby podać nam kilka dodatkowych szczegółów na temat tego, co próbujesz zrobić, w jaki sposób próbujesz to zrobić oraz pełnego wyjścia błędu? Linia, którą nam obecnie podajesz, zostaje nagle odcięta ...


3
ip route get 1.2.3.4jest bardziej niezawodny niż tylko robienie ip route ls. Te pierwsze wejdą w życie wszelkie obowiązujące zasady oprócz tras. Eliminuje również możliwość błędnego odczytania tabel routingu.
Patrick,

3

Bardzo prostym i szybkim sposobem jest użycie pingpolecenia.

Możesz po prostu pisać

 $ ping yahoo.com

(lub cnn.com lub jakikolwiek inny host) i sprawdź, czy odzyskasz jakieś dane wyjściowe. Zakłada się, że nazwy hostów można rozwiązać (tzn. Działa dns). Jeśli nie, możesz podać poprawny adres IP / numer zdalnego systemu i sprawdzić, czy można go uzyskać.

Oto strona man pinga .

Aktualizacja :

Jako szybki przykład możesz sprawdzić wartość zwracaną (np. Za pomocą "echo $?"), pingaby sprawdzić, czy polecenie się powiodło (zawsze możesz przesłać dane wyjściowe polecenia do > /dev/nul). Uwaga: używam -c 1tutaj, ale możesz użyć więcej.

$ 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

Ale jak mogę uświadomić sobie po użyciu ping, że wszystko jest w porządku?
Radek

1
@Radek Czy próbowałeś już go uruchomić? ping informuje, czy otrzyma odpowiedzi.
jw013,

Co jeśli serwer jest tylko w intranecie i nie ma dostępu do świata zewnętrznego?
Radek

@ jw013: Nie próbowałem ... Nie wiem, czy użyć ping z nienadzorowanego skryptu.
Radek

3
@Radek jest dość prosty. Zakładam, że przez „łączność” masz na myśli, że może rozmawiać z innym hostem w intranecie. Uruchom więc ping -c 2 -n <other host's IP>i działaj na kodzie powrotu: jeśli true (0), to ma łączność; jeśli false (1), to nie może rozmawiać z tym komputerem.
lxop

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.