
Quero enviar um rosnado para mim mesmo depois que o servidor SuSE terminar o processo de inicialização. 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 esperar caso não esteja?
Responder1
ping
para um host externo pode falhar por uma série de razões, apenas algumas das quais realmente dizem algo útil sobre o estado da sua própria rede.
Como primeira etapa, abra uma janela de terminal e digite
ip route ls
Você deverá ver uma saída nos moldes 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.0
, e que seu gateway padrão através do qual acessa o resto da internet pode ser encontrado em 192.168.15.1
.
Em seguida, você pode tentar ping
esse 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 está, pelo menos, bem. Neste ponto, você pode começar a procurar ferramentas mais avançadas, como traceroute
ver onde sua conexão com o destino pode estar falhando.
No entanto, depois de uma rápida verificação no Google do que growl
realmente deveria ser, tenho a sensação de que há algo mais errado. Você pode expandir sua pergunta para nos fornecer mais alguns detalhes sobre o que você está tentando fazer, como está tentando e a saída completa do erro? A linha que você está nos fornecendo foi cortada abruptamente...
Responder2
Uma maneira muito simples e rápida é usar o ping
comando.
Você pode simplesmente digitar
$ ping yahoo.com
(ou cnn.com ou qualquer outro host) e veja se você obtém alguma saída. Isso pressupõe que os nomes de host podem ser resolvidos (ou seja, o DNS está funcionando). Caso contrário, você poderá fornecer um endereço/número IP válido de um sistema remoto e ver se ele pode ser alcançado.
Aqui está opágina de manual do ping.
Atualizar:
Como um exemplo rápido, você pode verificar ovalor de retorno(por exemplo, com "echo $?"
) from ping
para ver se o comando foi bem-sucedido (você sempre pode canalizar a saída do comando para > /dev/nul
). Observe que eu uso -c 1
aqui, mas você poderia 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
Responder3
Eu usaria netcat
para o serviço desejado.
Por exemplo, testando uma porta IP, sucedendo
> nc -zv 192.168.1.1 80
Connection to 172.26.0.1 80 port [tcp/http] succeeded!
...e falhando
> nc -zv 192.168.1.1 22
netcat: connect to 172.26.0.1 port 22 (tcp) failed: Connection refused
com tempo limite de 10s
> 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
Responder4
Eu uso a seguinte função... O padrão é quad9 mas você pode passar um domínio diferente. O tempo limite expirará após 15 minutos de tentativa
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
}