Já faz algum tempo que penso em uma maneira de monitorar constantemente a
conexão de internet aqui de casa. A intenção seria saber se a rede está
suficientemente estável e principalmente ser alertado quando ela fica
indisponível. Em tempos de home office, admito que essa necessidade até se
tornou mais evidente, pois não foram uma nem duas vezes que fui bruscamente
desconectado durante uma reunião virtual, me permitindo voltar apenas quando
habilitei o roteamento do 4G do celular e reconectei através dele.
O problema que relato poderia muito bem ser resolvido apenas executando o bom
e velho "ping". No Windows, disparando o comando contra o DNS da Google pra
deixar em constante execução, seria algo assim: "ping 8.8.8.8 -t".
Comando "ping"
No exemplo acima, enquanto o tempo de resposta for baixo e obtiver uma
variação pequena, pode-se dizer que a qualidade da conexão está boa. Quando
aparecer que o tempo limite do pedido foi esgotado, é sinal de que há
problemas com a conectividade. No caso da rede de destino inacessível, como
apareceu na imagem, foi porque eu desconectei a wi-fi do notebook pra provocar
o erro e mostrar o "esgotado o tempo limite do pedido", que é a mensagem
retornada quando o destino não é alcançado, no caso, o Google. E se não tem
Google, não tem internet. 😂
Entretanto, apesar de haver uma solução bastante simples, fui em busca de algo
mais elaborado. Encontrei algumas variações de scripts, parte delas utilizando
Shell Script (para Linux) e outras Powershell (também do Windows).
Nessa busca, achei
um cara sugerindo duas opções de scripts em Powershell para monitorar a
conectividade com a internet. Uma mais simples e outra um pouco mais complexa.
checkInternetSimple.ps1 | Essa opção é a mais básica e indica apenas se há ou
não conexão com a internet.
checkInternetContinuous.ps1 | Essa alternativa é a mais avançada e além de
indicar se há ou não conectividade com a internet, mostra o tempo desde que
a conexão foi estabelecida (a partir do momento que o script começou a
rodar) e também o tempo desde a desconexão. Além disso, é apresentado o
uptime, calculando o percentual atingido com base no período
conectado e desconectado.
Como é possível perceber, o comando "ping" é a essência de tudo. Pois mostrei
como é possível utilizá-lo exclusivamente, e esses scripts, por "baixo dos
panos", de certa forma, é o que estão fazendo ("pingando" o site), mas claro
que com muito mais elegância e requinte, utilizando parte do poderio que o
Powershell oferece.
ExecutionPolicy no Powershell
Se você tiver interesse e acho que terá, caso contrário não teria chegado até
aqui, o código fonte dos scripts que apresentei estão disponibilizados no
GitHub do autor e podem ser encontrados
clicando aqui. E caso deseje baixar os arquivos diretamente no formato do Powershell,
seguem em
checkInternetContinuous.ps1
e
checkInternetSimple.ps1.
Dica: Caso você nunca tenha executado scripts de terceiros no seu Powershell,
lembre de modificar a política de execução. Para consultá-la, você deve rodar
o comando "Get-ExecutionPolicy". Se já não estiver, deve ser alterada para
"Unrestricted" e essa modificação é feita pelo comando "Set-ExecutionPolicy
Unrestricted".
P.S.: Como recentemente me mudei, estou com um novo provedor de internet e as
falhas relatadas ainda no primeiro parágrafo, por enquanto não ocorreram.