Shell Script – Ping em todas as máquinas

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:

SHELL

#! /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. #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

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.