Encontrei scripts que dizem que verificam a conectividade com a Internet. Alguns verificam o endereço IP se a interface estiver ativa, mas não verifica a conectividade com a Internet. Eu encontrei alguns que usam ping como este: if [ 'ping google.com -c 4 | grep time' != "" ]; then
mas às vezes isso pode não ser confiável, já que o ping pode travar por algum motivo (por exemplo, aguardando alguma E / S travada).
Alguma sugestão sobre a maneira correta / confiável de verificar a conectividade da Internet usando scripts? Eu tenho que usar alguns pacotes?
Ele precisa verificar periodicamente com, cron
por exemplo, algo quando a conexão cair como invocarifup --force [interface]
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'
>/dev/null
>/dev/null
redireciona a saída padrão para/dev/null
o dispositivo nulo , que a descarta, pois não é desejada nesse caso (tudo o que nos interessa são os valores de saída dos comandos). Em vez disso, uma saída mais aplicável é obtida dasecho
linhas.Eu recomendo não usar
ping
para determinar a conectividade. Existem muitos administradores de rede que desabilitam o ICMP (o protocolo usado) devido a preocupações com ataques de inundação de ping originados em suas redes.Em vez disso, uso um teste rápido de um servidor confiável em uma porta que você pode esperar estar aberta:
Isso usa netcat (
nc
) no modo de varredura de porta , um toque rápido (-z
é o modo de E / S zero [usado para varredura] ) com um tempo limite rápido (-w 1
aguarda no máximo um segundo). Ele verifica o Google na porta 443 (HTTPS).Eu usei HTTPS em vez de HTTP como um esforço para proteger contra portais cativos e proxies transparentes que podem responder na porta 80 (HTTP) para qualquer host. Isso é menos provável ao usar a porta 443, pois haveria uma incompatibilidade de certificado, mas ainda acontece.
Se você quiser se provar contra isso, precisará validar a segurança na conexão:
Isso verifica se há uma conexão (em vez de aguardar o tempo limite do openssl) e, em seguida, efetua o handshake SSL, digitando a fase de verificação. Ele sai silenciosamente ("true") se a verificação foi "OK" ou sai com um erro ("false"), então relatamos a descoberta.
fonte
-d
por exemplo,nc -dzw1
também, para não escutar STDIN e travar indefinidamente em um script. e talvez use 8.8.8.8 em vez de google.com para salvar uma pesquisa.nc -dzw1 8.8.8.8 443
-d
nos meus scripts, talvez porque nunca tive um pipeline não utilizado. Isso deve ser seguro para adicionar.-w 1
ainda custa um segundo quando não há conectividade, embora talvez o seunc
tenha algum tipo de problema obscuro em algum lugar. Se você possui uma versão recente do nmap instalada, podencat --send-only --recv-only -w 334ms
reduzir esse tempo de falha para um terçonc
(descobri que 334ms é um bom tempo de espera).Criei um script que usa várias maneiras de verificar a conexão à Internet (ping, nc e curl, graças a Adam Katz, Gilles e Archemar). Espero que alguém ache isso útil. Sinta-se livre para editá-lo ao seu gosto / otimizá-lo.
Verifica seu gateway, DNS e conexão à Internet (usando curl, nc e ping). Coloque isso em um arquivo e torne-o executável (geralmente
sudo chmod +x filename
)fonte
$GW
?/sbin/ip route | awk '/default/ { print $3 }'
obtém o endereço do gateway da interface primária (espero). Se desejar, você mesmo pode definir o endereço IP do gateway.existem muitos IPs na internet, uma abordagem leve é fazer ping em alguns deles
uma resposta mais completa pode estar recebendo páginas usando
wget
Onde
fonte
graças às suas contribuições de cada usuário e de outra web, consegui concluir este script em três dias. e vou deixá-lo livre para o seu uso.
esse script automatiza a renovação do endereço IP quando a conexão é perdida, o faz persistentemente.
pastebin: https://pastebin.com/wfSkpgKA
fonte
eth0
, mas isso não for mencionado.) (2) Usando o inglês. (3) Colocar todas as variáveis do shell (por exemplo,"$HOST"
,"$LINE1"
e"$LOG"
) em aspas duplas. (4) DefinaLINE2
ou não use. (Eu suspeito que você temLINE1
/LINE2
confundido cominet4
/inet6
.) ... (Cont)