Como verificar em uma linha de comando se a rede está acessível?

12

Quero enviar um grunhido para mim mesmo depois que o servidor SuSE concluir o processo de inicialização. Eu recebi esta mensagem socket_sendto(): unable to write to socket [101]: Network is unreachable in.

Como posso verificar na linha de comando se a rede está acessível e aguardar, caso não esteja?


Radek
fonte
Linux one-liner para responder sim ou não, estamos conectados à internet: ping -c 1 www.yourtrustedserver.com | grep " 0% packet loss". O que isso faz é executar ping no servidor com um pacote e receber a saída da sequência "0% packet loss". (o espaço antes dos 0% é importante) Se o comando retornar uma linha, você estará conectado, caso contrário, não conectado.
Eric Leschinski

Respostas:

13

ping para um host externo pode falhar por várias razões, das quais apenas algumas dizem realmente algo útil sobre o estado da sua própria rede.

Como primeira etapa, abra uma janela do terminal e digite ip route ls

Você deve ver uma saída ao longo das linhas de

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 

Isso indica que sua rede local é uma conexão Ethernet ( eth0) com o endereço 192.168.15.0e que seu gateway padrão através do qual acessa o restante da Internet pode ser encontrado em 192.168.15.1.

Em seguida, você pode tentar pingesse endereço:

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 você vir algo semelhante ao acima, sua própria rede local estará, pelo menos, correta. Nesse ponto, você pode começar a procurar com ferramentas mais avançadas, como traceroutepara ver onde sua conexão com o destino pode estar falhando.

No entanto, após uma rápida verificação no Google do que growlrealmente deveria ser, sinto que há algo errado. Você pode expandir sua pergunta para fornecer mais alguns detalhes sobre o que você está tentando fazer, como está tentando e o resultado completo do erro? A linha que você está nos dando no momento é cortada abruptamente ...

Shadur
fonte
3
ip route get 1.2.3.4é mais confiável do que apenas fazer ip route ls. O primeiro entrará em vigor todas as regras existentes além das rotas. Também remove a possibilidade de interpretar incorretamente as tabelas de roteamento.
Patrick
3

Uma maneira muito simples e rápida é usar o pingcomando

Você pode simplesmente digitar

 $ ping yahoo.com

(ou cnn.com ou qualquer outro host) e veja se você obtém alguma saída de volta. Isso pressupõe que nomes de host possam ser resolvidos (ou seja, o DNS está funcionando). Caso contrário, é possível que você possa fornecer um endereço IP / número válido de um sistema remoto e ver se ele pode ser alcançado.

Aqui está a página do manual ping .

Atualização :

Como um exemplo rápido, você pode verificar o valor de retorno (por exemplo, with "echo $?") from pingpara ver se o comando foi bem-sucedido (você sempre pode canalizar a saída do comando para > /dev/nul). Observe que eu uso -c 1aqui, mas você pode usar mais.

$ 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
Levon
fonte
Mas como posso perceber usando o ping que está tudo bem?
Radek
1
@Radek Você já tentou executá-lo? o ping informa se ele recebe respostas.
Jw013
E se o servidor estiver apenas na intranet e não tiver acesso ao mundo externo?
Radek
@ jw013: Não tentei ... não sei usar ping de um script autônomo.
Radek
3
@Radek é bastante simples. Presumo que por 'conectividade' você quer dizer que ele pode conversar com outro host na intranet. Portanto, execute ping -c 2 -n <other host's IP>e opere no código de retorno: se true (0), ele possui conectividade; se false (1), não poderá falar com essa máquina.
Lxop 17/07/2012
2

mtr é uma ferramenta semelhante ao ping, mas fornece mais informações, como perda de pacotes, estatísticas sobre tempos de viagem de pacotes, etc.

Sardathrion - contra o abuso de SE
fonte