Uma das minhas maiores dificuldades como administrador de redes é descobrir se as máquinas do escritório estão ou não on-line, ou saber se elas estão respondendo ou não ao ping. O chato é que geralmente temos que fazer os testes nas máquinas uma por uma pelo terminal, para saber quem está online. Uma outra alternativa é fazer um pequeno shell script, contendo apenas comandos de ping para cada máquina, o que ainda assim seria trabalhoso, pois você teria que ver todo o resultado impresso na tela do terminal e conferir com uma lista com a relação de IP’s e máquinas para conferir quem está on-line ou não.
Depois de vários testes, descobri uma forma de facilitar essa questão. Primeiro, fiz o teste de ping em uma máquina ligada e em outra desligada, e olhei os resultados. Veja o que reparei:
Máquina responde: 3 packets transmitted, 3 received, 0% packet loss, time 2001ms
Máquina não responde: 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2016ms
Então toda vez que a máquina não responde, o ping dá uma resposta padrão: 100% packet loss. então se você mandar o comando ping -c 3 192.168.2.10 | egrep 100%, o shell vai fazer 3 testes de ping e vai imprimir na tela somente as linhas onde aparece a string 100%. Caso a máquina responda corretamente ao teste nas 3 tentativas, nada será impresso na tela.
Resolvi então jogar esta linha de comando dentro de uma variável e fazer um teste para ver se retornará uma string vazia ou não. Caso a string não esteja vazia, a máquina ou está OFF-line, ou não responde aos comandos de ping.
Vamos começar indo no gedit (ou nano, caso prefira fazer direto pelo terminal) e criar uma função de teste de ping:
#! /bin/bash
# Vamos criar a função teste, que vai receber 4 argumentos: o IP da máquina,
# o HOST da máquina e o nome do usuário, nesta ordem.
# A função faz 3 testes de ping, verifica se algum dos 3 falhou e lança o resultado na tela.
function teste(){
if test -z “$(ping -c 3 $1 | egrep 100%)”
then
echo “$2 ($1) – $3 ON-line”
else
echo “$2 ($1) – $3 OFF-line”
fi
}
# Aqui, rodamos a função para todos os hosts
echo “Fazendo teste de conexão da faixa de IP 49 a 52″
echo “Aguarde um pouco, por favor. Esta operação pode demorar alguns minutos…”
echo “”
echo “Máquinas da rede:
“
teste “192.168.2.49″ “maquina-01″ “Son Goku”
teste “192.168.2.50″ “maquina-02″ “Seu Madruga”
teste “192.168.2.51″ “maquina-03″ “Jaspion”
teste “192.168.2.52″ “maquina-04″ “Change Pegasus”
echo “
Teste de rede finalizado. Aperte qualquer tecla para sair.”
read $fim
exit 0
Se você quiser, pode colocar algum laço while envolvendo o teste todo e perguntar no final se deseja repetir e talz… Mas aí vai pela sua criatividade. Recomendo que os códigos aqui sejam copiados com cuidado. O wordpress às vezes substiui o caracter das aspas, e pode não ser reconhecido pelo gedit.
Veja aqui o post que me ajudou na criação da função em shell com argumentos.
Se te ajudei, não esqueça de orar por nós!
Seu Brother, G@be-san
Let Jesus do an Upgrade in your Life


#1 by Cedric on 31/05/2011 - 14:24
Isso é k é o fascinio da programação; poder usar o poder da “criação” p ajudar a resolver problemas. Vlw