Come verificare da una riga di comando che la rete è raggiungibile?


12

Voglio inviare un ringhio a me stesso dopo che il server SuSE ha completato il processo di avvio. Ho ricevuto questo messaggio socket_sendto(): unable to write to socket [101]: Network is unreachable in.

Come posso verificare dalla riga di comando se la rete è raggiungibile e attendere in caso contrario?



Linux one-liner per rispondere sì o no, siamo connessi a Internet: ping -c 1 www.yourtrustedserver.com | grep " 0% packet loss". Quello che fa è eseguire il ping del server con un pacchetto e greps l'output per la stringa "0% di perdita di pacchetti". (lo spazio prima dello 0% è importante) Se il comando restituisce una riga, si è connessi, altrimenti non connesso.
Eric Leschinski l'

Risposte:


13

ping a un host esterno può fallire per una moltitudine di ragioni, solo alcune delle quali in realtà dicono qualcosa di utile sullo stato della propria rete.

Come primo passo, apri una finestra di terminale e digita ip route ls

Dovresti vedere un output lungo le linee di

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 

Ciò indica che la tua rete locale è una connessione ethernet ( eth0) con l'indirizzo 192.168.15.0e che è possibile trovare il suo gateway predefinito attraverso il quale accede al resto di Internet 192.168.15.1.

Successivamente, puoi provare a pingquell'indirizzo:

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

Se vedi qualcosa di simile a quanto sopra, almeno la tua rete locale va bene. A questo punto puoi iniziare a cercare con strumenti più avanzati come traceroutevedere dove la connessione alla destinazione potrebbe non riuscire.

Tuttavia, dopo un rapido controllo da parte di Google di ciò growlche dovrebbe essere, ho la sensazione che ci sia qualcos'altro che non va. Puoi espandere la tua domanda per darci qualche dettaglio in più su ciò che stai cercando di fare, su come lo stai provando e sull'output dell'errore completo? La linea che ci stai attualmente assegnando viene tagliata bruscamente ...


3
ip route get 1.2.3.4è più affidabile del semplice fare ip route ls. Il primo prenderà effetto tutte le regole in atto oltre alle rotte. Elimina inoltre la possibilità di leggere erroneamente le tabelle di routing.
Patrick,

3

Un modo molto semplice e veloce è usare il pingcomando.

Puoi semplicemente digitare

 $ ping yahoo.com

(o cnn.com o qualsiasi altro host) e verifica se ricevi un output. Ciò presuppone che i nomi host possano essere risolti (ad esempio, dns funziona). Altrimenti, si spera di poter fornire un indirizzo IP / numero valido di un sistema remoto e vedere se è possibile raggiungerlo.

Ecco la pagina man del ping .

Aggiornamento :

A titolo di esempio, è possibile verificare il valore restituito (ad es. Con "echo $?") da pingper vedere se il comando ha avuto esito positivo (è sempre possibile reindirizzare l'output del comando a > /dev/nul). Nota che uso -c 1qui, ma potresti usarne di più.

$ 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

Ma come posso capire dall'uso del ping che tutto è ok?
Radek,

1
@Radek Hai già provato a eseguirlo? ping ti dice se riceve risposte.
jw013,

Cosa succede se il server si trova solo su Intranet e non ha accesso al mondo esterno?
Radek,

@ jw013: Non ho provato ... Non so usare il ping da uno script incustodito.
Radek,

3
@Radek è abbastanza semplice. Presumo che per "connettività" intendi che può parlare con qualche altro host sulla rete intranet. Quindi esegui ping -c 2 -n <other host's IP>e agisci sul codice di ritorno: se vero (0), allora ha connettività; se false (1), non può parlare con quella macchina.
lxop,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.