Como uma conexão de internet pode ser testada sem pingar algum site? Quero dizer, e se houver uma conexão, mas o site estiver fora do ar? Existe uma verificação de conexão com o mundo?
bash
connection
ping
Laurys
fonte
fonte
Respostas:
Sem ping
-q : modo de silêncio
--spider : não obtenha, apenas verifique a disponibilidade da página
$? : código de retorno do shell
0 : código shell "Tudo OK"
Sem wget
fonte
nc
certificar-se de que ele expire . algo comonc google.com 80 -w 10
Faça ping no seu gateway padrão:
fonte
function ping_gw() { ... && return 0 || return 1 }
e então usado da seguinte maneira:ping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
e ainda tenho um gateway padrão com ping, embora eu não consiga acessar o mundo externo.Super Obrigado ao usuário somedrew por sua postagem aqui: https://bbs.archlinux.org/viewtopic.php?id=55485 em 2008-09-20 02:09:48
Aqui está meu script para testar uma conexão de rede diferente do loopback. Eu uso o seguinte em outro script que tenho para testar periodicamente se meu site está acessível. Se NÃO estiver acessível, uma janela pop-up me alertará sobre um problema.
O script abaixo me impede de receber mensagens pop-up a cada cinco minutos sempre que meu laptop não está conectado à rede.
Nota para aqueles que são novos no bash: A declaração final 'if' testa se NÃO [!] Online e sai se for o caso. Consulte man bash e pesquise "As expressões podem ser combinadas" para obter mais detalhes.
PS Eu sinto que o ping não é a melhor coisa a se usar aqui porque ele visa testar uma conexão com um determinado host, NÃO testar se há uma conexão com uma rede de qualquer tipo.
PPS The Above funciona no Ubuntu 12.04 O / sys pode não existir em algumas outras distros. Ver abaixo:
fonte
cat /sys/class/net/wwan0/carrier
Não funciona no ubuntu 14.04 LTS.2>/dev/null
depoiscat /sys/class/net/$interface/carrier
para não ter saída de erro caso a rede seja desabilitada.Isso funciona em MacOSX e Linux:
fonte
ping: invalid option -- w
)fping google.com
ou simplesmentefping 8.8.8.8
faz a mágica com um bônus, você obtém o código de status sem a necessidade de testá-lo ("google.com is alive
") ...No Bash, usando seu wrapper de rede por meio de / dev / { udp , tcp } / host / port :
(
:
é o Bash no-op, porque você só quer testar a conexão, mas não o processamento.)fonte
Já escrevi scripts antes disso, basta usar telnet para se conectar à porta 80 e, em seguida, transmitir o texto:
seguido por duas sequências CR / LF.
Desde que você obtenha algum tipo de resposta HTTP, geralmente pode-se presumir que o site está funcionando.
fonte
A principal resposta ignora o fato de que você pode ter uma conexão perfeitamente estável com seu gateway padrão, mas isso não significa automaticamente que você pode realmente acessar algo na Internet. O OP pergunta como ele / ela pode testar uma conexão com o mundo. Portanto, sugiro alterar a resposta principal mudando o IP do gateway para um IP conhecido (xyzw) que está fora de sua LAN.
Portanto, a resposta seria:
Também removendo os crases desfavoráveis para substituição de comandos [1] .
Se você apenas deseja ter certeza de que está conectado ao mundo antes de executar algum código, também pode usar:
fonte
certifique-se de que sua rede permite a entrada e saída de tráfego TCP, então você poderá obter de volta seu IP público com o seguinte comando
fonte
Execute o seguinte comando para verificar se um site está ativo e qual mensagem de status o servidor da web está mostrando:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
O código de status '200 OK' significa que a solicitação foi bem-sucedida e um site está acessível.
fonte
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Se o seu servidor de nomes local estiver inativo,
é um IP sempre ativo fácil de lembrar (na verdade, é até mesmo um servidor de nomes).
fonte
A resposta mais votada não funciona para MacOS, então, para aqueles em um mac, testei com sucesso:
testado em MacOS High Sierra 10.12.6
fonte
route
comando pararoute -n get default 2> /dev/null | grep gateway
para evitar a gravação de um erro em stderr quando estiver offline.Este script bash verifica continuamente a existência de Internet e emite um sinal sonoro quando a Internet está disponível.
fonte
caminho mais curto:
fping 4.2.2.1
=> "4.2.2.1 está vivo"Eu prefiro isso porque é mais rápido e menos prolixo do que
ping
, a desvantagem é que você terá que instalá-lo.você pode usar qualquer dns público em vez de um site específico.
fping -q google.com && echo "do something because you're connected!"
-q
retorna um código de saída, então estou apenas mostrando um exemplo de execução de algo que você está online.para instalar no Mac:
brew install fping
; no ubuntu:sudo apt-get install fping
fonte
O Ping foi projetado para fazer exatamente o que você deseja fazer. No entanto, se o site bloquear o eco ICMP, você sempre poderá fazer o telnet para a porta 80 de algum site, wget ou curl.
fonte
Verificar a página de índice do Google é outra maneira de fazer isso:
fonte
De forma semelhante à resposta de @Jesse , esta opção pode ser muito mais rápida do que qualquer solução usando
ping
e talvez um pouco mais eficiente do que a resposta de @Jesse .Explicação:
Este comando usa
find
com-exec
para executar o comando em todos os arquivos não nomeados*lo*
em/sys/class/net/
. Devem ser links para diretórios contendo informações sobre as interfaces de rede disponíveis em sua máquina.O comando executado é um
sh
comando que verifica o conteúdo do arquivocarrier
nesses diretórios. O valor de$interface/carrier
tem 3 significados - Citação :A primeira opção não foi atendida na resposta de @Jesse . O
sh
comando distribuído é:cat
está sendo usado para verificar o conteúdocarrier
e redirecionar toda a saída para a saída padrão, mesmo quando falha porque o arquivo não é legível. Segrep -q
encontrar"1"
entre esses arquivos, significa que há pelo menos 1 interface conectada. O código de saída degrep -q
será o código de saída final.Uso
Por exemplo, usando o status de saída desse comando, você pode usá-lo para iniciar um gnubiff no seu
~/.xprofile
somente se tiver uma conexão com a Internet.Referência
/sys/class/net/
fonte
Pong não significa que o serviço da web no servidor está em execução; significa apenas que o servidor está respondendo ao eco ICMP. Eu recomendaria usar curl e verificar seu valor de retorno.
fonte
Se o seu objetivo é realmente verificar o acesso à Internet , muitas das respostas existentes para essa pergunta são erradas. Algumas coisas que você deve estar ciente:
Com isso em mente, acredito que a melhor estratégia é entrar em contato com vários sites por meio de uma conexão HTTPS e retornar true se algum desses sites responder.
Por exemplo:
Uso:
Algumas notas sobre esta abordagem:
fonte
if wait $pid;
. Não faço ideia por que isso não está funcionando em seu sistema. Tem certeza de que está usando o bash?wait
e agora entendo que o código de retorno está realmente sendo testado. Copiei novamente o seu código e hoje funciona - opa! Devo ter bagunçado alguma coisa da última vez, embora não consiga entender o quê ou como. No entanto, mea culpa. Desculpas.Com este comando:
.
fonte
Isso é notavelmente mais rápido que qualquer solução postada aqui e também pode ser usado para testar um host específico .
O truque é resolver o IP usando um solucionador de DNS menos ocupado do que aquele empregado por
ping
:fonte