Verifique se a conexão da residência tem acesso à internet

1

Gostaria de poder testar se tenho acesso à internet. Meu computador está conectado à conexão de internet da residência. Eu pensei em usar ping assim:

ping -q -w 1 -c 1 'ip r | grep default | cut -d ' ' -f 3' > /dev/null && echo ok || echo error

Mas isso não funciona!

Como eu disse, a conexão é fornecida por uma residência (que na verdade está apenas encaminhando a conexão da universidade). Para ter acesso à internet você deve abrir um navegador da web onde é solicitado o nome de usuário e senha e somente então o acesso à internet é concedido (eu realmente não tenho idéia sobre configurações de redes etc. não tenho acesso ao modo como é configurado, por isso não posso fornecer mais informações deste lado)

O código acima imprime "ok" mesmo quando não tenho acesso à Internet. Mesmo o teste com www.google.com falha. Eu acredito que isso é porque ele está sendo redirecionado para a página de login e "pensa" para recuperar os pacotes corretamente.

Como posso verificar com segurança se tenho acesso à internet?

Algum contexto

Gostaria de me conectar ao computador na minha sala via ssh quando eu for para casa nos finais de semana. Às vezes, a conexão falha, portanto, gostaria de criar um script que, de vez em quando, verifica a conexão e, eventualmente, inicia um navegador da Web e envia pressionamentos de tecla usando xdotool para efetuar login. Se você conhece uma maneira melhor de reabrir a conexão para permitir ssh acesso remoto do que, por favor, escreva também.

Atualização:

Alguns exemplos de saída de nslookup :

$ nslookup unix.stackexchange.com
Server:         127.0.1.1
Address:        127.0.1.1#53

Non-authoritative answer:
Name:   unix.stackexchange.com
Address: 69.59.197.21

O resultado é exatamente o mesmo com acesso à internet e sem ele. (Eu também tentei fazer logoff e relog, e conectar e desconectar várias vezes).

Além disso, eu gostaria de acrescentar que não é o fechamento da conexão ssh . Por algum tempo sou capaz de criar a conexão, fazer as coisas e sair. Depois de algumas horas tentando fazer ssh the-IP dá um erro de timeout (eu realmente registrei uma conta no-ip, já que o IP é dinâmico, então estou fazendo ssh mydomain.no-ip.org ).

    
por Bakuriu 18.11.2012 / 22:02

4 respostas

0

A única maneira de fazer o que eu preciso parece baixar uma página aleatória e ver se o conteúdo corresponde ou não à página de login.

Por exemplo, fazendo:

$ wget www.google.com

Faz o download do conteúdo html da página do Google, se eu tiver acesso à internet, enquanto ele conteria apenas algo como:

<!--
**
**  ZEROSHELL Captive Portal Login Page  
**
**          (Native Interface)
**
-->

<html>
<head>
<title>Web Login</title>
    ...
</html>

Se estiver sendo redirecionado para a página de login. Parece funcionar bem para detectar o que eu quero, mesmo que eu espere encontrar uma solução mais elegante.

    
por 26.11.2012 / 23:11
2

Você cometeu um erro fatal em seu comando.

ping -q -w 1 -c 1 'ip r | grep default | cut -d ' ' -f 3' > /dev/null && echo ok || echo error

O comando ip r | grep default | cut -d ' ' -f 3 retorna seu gateway padrão. Como resultado, ping , em vez de verificar o Google, verifica o roteador ao qual você está conectado. O roteador enviará de volta um pacote, o que torna todo o comando verdadeiro. É por isso que sempre retorna "ok". Ele não verifica a conectividade com a Internet. Mas olhe para o lado positivo. Ele verifica se você está conectado à LAN.

De qualquer forma, talvez você queira usar ping -q -w 1 -c 1 google.com > /dev/null && echo ok || echo error em vez de usar ip r | grep default | cut -d ' ' -f 3 .

    
por 17.03.2015 / 10:15
0

Parece que você precisa de um programa como o AutoWifi .

    
por 19.11.2012 / 03:45
0

Que tal IF?

if [[ $(ping -c1 -w1 google.com) ]]
then 
    echo "All good in the hood"
else
    echo "Where are my interwebs?"
fi

ou como uma linha

if [[ $(ping -c1 -w1 google.com) ]]; then  echo "All good in the hood"; else; echo "Where are my interwebs?"; fi
    
por 19.11.2012 / 08:15