Qualquer aspirante a administrador de rede já usou ou ao menos ouviu falar do comando “ping” o qual me arrisco dizer que é um dos primeiros comandos que se deve conhecer quando se pretende trabalhar nesta área. Mas o que apresento aqui é o comando “fping”, um comando que faz [quase] a mesma coisa, mas ele permite testar vários hosts (computadores) com um só comando agilizando bastante alguns testes.
Basicão sobre o comando Ping
Para quem está apenas começando, de forma bem simplificada, o comando “ping” é comumente usado a partir da linha de comandos de um computador para testar se o mesmo está “conversando” em rede com um outro. Este comando se aproveita do protocolo ICMP enviando uma requisição para a máquina testada (ping) e aguarda a resposta daquela máquina (pong). Quem disse que nerds não possuem senso de humor 😉
Na verdade estes “ping” e “pong” corresponderiam aos pacotes ECHO_REQUEST e ECHO_RESPONSE e com um pouco de habilidade eles podem ser usados para se determinar a rota por onde os dados trafegam de uma máquina à outra e mesmo inferir sobre o sistema operacional que roda nela, mas isso é papo para outro dia.
Para quem nunca testou experimente abrir um terminal no seu computador (seja Windows, Linux ou Mac) e digitar o comando abaixo que é praticamente universal:
ping www.google.com.br
Neste caso estou enviando “pings” para o servidor “www” do Google e o resultado deverá ser algo como mostrado abaixo:
PING www.google.com (74.125.130.147) 56(84) bytes of data. 64 bytes from gh-in-f147.1e100.net (74.125.130.147): icmp_req=1 ttl=46 time=144 ms 64 bytes from gh-in-f147.1e100.net (74.125.130.147): icmp_req=2 ttl=46 time=143 ms 64 bytes from gh-in-f147.1e100.net (74.125.130.147): icmp_req=3 ttl=46 time=140 ms ^C --- www.google.com ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2003msrtt min/avg/max/mdev = 140.744/142.991/144.417/1.637 ms
De forma rápida e de cima para baixo temos um cabeçalho informando que o servidor www.google.com testado corresponde àquele com endereço IP 74.125.130.147; temos três linhas indicando os testes sequenciais de 1 a 3, seguido do número de saltos e o tempo necessário para receber as respostas (pongs); A indicação “^C” corresponde a ter teclado “CTRL+C” pois, como não informei o número de “pings” que eu gostaria de enviar e estou usando Linux meu sistema ficaria enviando pings infinitamente até que desligasse o computador, fechasse a janela de terminal ou … teclasse CTRL+C. Após isso temos as estatísticas que informando o número de pacotes transmitidos, recebidos de volta (pongs) a duração do teste e os tempos mínimo, médio e mais lento do teste.
O comando fping
Ao contrário do comando ping que existe em qualquer computador, com qualquer sistema operacional, o comando fping existe apenas para Linux – pelo menos esta versão que estou apresentando aqui – mas deve haver coisas similares para Windows e Mac disponíveis neste mundão que é a Internet.
Mas de toda forma você precisa instalar o pacote correspondente em seu sistema para poder usá-lo. No Ubuntu e demais “debian-likes” (Debian, Mint etc) basta o já tradicional comando apt-get install
sudo apt-get install fping
Uma vez instalado você terá como vantagem adicional a capacidade de testar várias máquinas de uma só vez, até mesmo toda a sua faixa de rede se isso for desejado.
O básico do comando fping
O básico do fping é bem similar ao ping tradicional, mas a forma como ele responde pode variar bastante de acordo com os parâmetros usados. Veja no exemplo abaixo como seria se usássemos o fping sem parâmetros, tal como fizemos com o ping.
fping www.google.com www.google.com is alive
Para muitas situações isso mais do que suficiente, visto que comumente usamos o ping para saber se determinada máquina está ativa na rede ou não, mas não é só isso. A grande vantagem do fping é que ele permite testar várias máquinas ao mesmo tempo.
fping www.google.com www.yahoo.com www.g1.com.br www.g1.com.br is alive www.google.com is alive www.yahoo.com is alive
A princípio o exemplo acima parece meio inútil – e é mesmo – mas suponhamos que você tem uma rede com alguns computadores e outros dispositivos no seu escritório ou em casa e você quer saber quais equipamentos estão online. Neste caso bastaria passar todos os endereços IP para o fping, ou então informar a faixa a de IPs ser varrida.
fping 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 192.168.0.1 is alive 192.168.0.2 is alive 192.168.0.4 is alive 192.168.0.5 is alive 192.168.0.3 is unreachable
Compare a linha de comandos usada acima com esta a seguir:
fping -g 192.168.0.1 192.168.0.5 192.168.0.1 is alive 192.168.0.2 is alive 192.168.0.4 is alive 192.168.0.5 is alive 192.168.0.3 is unreachable
Pelo exemplo acima temos que: Usando o parâmetro “-g” basta informar o primeiro e o último endereço IP de uma faixa de endereços a ser testada, o que economiza bastante os nossos dedos se quisermos testar todos os equipamentos de uma rede.
Este parâmetro também pode ser usado para informar um endereço de rede seguido da máscara tal como no exemplo abaixo.
fping -a -g 192.168.0.0/24 192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.5
Observe entretanto que neste caso eu usei também o parâmetro “-a” que embora não seja obrigatório ele informa que eu só quero a relação de máquinas “alive” (ou ativas). Isso é bem útil quando testamos um intervalo muito grande onde só é esperado que apenas um punhado esteja ativas na rede. Se eu não usasse o “-a” receberia uma relação com todos os 256 endereços IP testados onde apenas 4 estariam ativos.
… e já que estamos falando de mascarar informações irrelevantes é bem comum nos depararmos com uma entediante e repetitiva mensagem de erro informando que o host não é alcançável tal como estas abaixo que poluem a sua tela e dificultam a leitura do resultado.
ICMP Host Unreachable from 192.168.0.4 for ICMP Echo sent to 192.168.0.3 ICMP Host Unreachable from 192.168.0.4 for ICMP Echo sent to 192.168.0.6 ICMP Host Unreachable from 192.168.0.4 for ICMP Echo sent to 192.168.0.7 ICMP Host Unreachable from 192.168.0.4 for ICMP Echo sent to 192.168.0.8 ICMP Host Unreachable from 192.168.0.4 for ICMP Echo sent to 192.168.0.9 ICMP Host Unreachable from 192.168.0.4 for ICMP Echo sent to 192.168.0.10 ICMP Host Unreachable from 192.168.0.4 for ICMP Echo sent to 192.168.0.11
Quanto mais equipamentos estiverem offline maior será o volume destas mensagens. Como estas mensagens são exibidas na saída de erros do terminal, uma maneira de nos livrarmos delas é redirecionar a saída de erros para um lugar que não nos atrapalhe.
Se você viu estas mensagens em seus testes tente incluir no final da linha de comandos o redirecionamento “2>/dev/null”. O nosso último exemplo ficaria assim:
fping -a -g 192.168.0.0/24 2>/dev/null
Isso envia todas as mensagens do console de erros para o dispositivo “null” que é um verdadeiro buraco negro no seu sistema. Este é o local ideal para mandar mensagens, chefes e contatos chatos que rondam nossos terminais diariamente.
Estatísticas como no ping tradicional
O comando ping tradicional exibe o tempo médio das respostas, tamanho do pacote etc. Isso também é possível com o fping mas para tal você deve informar o número de “pings” que você deseja enviar para os hosts testados usando o parâmetro “-c”. Veja o exemplo abaixo:
fping -c3 -g 192.168.0.1 192.168.0.5 192.168.0.1 : [0], 84 bytes, 1.75 ms (1.75 avg, 0% loss) 192.168.0.2 : [0], 84 bytes, 2.30 ms (2.30 avg, 0% loss) 192.168.0.4 : [0], 84 bytes, 0.14 ms (0.14 avg, 0% loss) 192.168.0.1 : [1], 84 bytes, 1.71 ms (1.73 avg, 0% loss) 192.168.0.2 : [1], 84 bytes, 2.27 ms (2.28 avg, 0% loss) 192.168.0.4 : [1], 84 bytes, 0.14 ms (0.14 avg, 0% loss) 192.168.0.1 : [2], 84 bytes, 1.71 ms (1.72 avg, 0% loss) 192.168.0.2 : [2], 84 bytes, 2.38 ms (2.31 avg, 0% loss) 192.168.0.4 : [2], 84 bytes, 0.14 ms (0.14 avg, 0% loss) 192.168.0.1 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 1.71/1.72/1.75 192.168.0.2 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 2.27/2.31/2.38 192.168.0.3 : xmt/rcv/%loss = 3/0/100% 192.168.0.4 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0.14/0.14/0.14 192.168.0.5 : xmt/rcv/%loss = 3/0/100%
Usando “-c3” (como no exemplo) eu estou requisitando apenas 3 pings, mas poderia ter usado qualquer outro valor para o teste, lembre-se entretanto que 3 é o mínimo necessário para termos um valor mínimo, médio e máximo nas estatísticas finais. Vale lembrar que obviamente se aquelas mensagens sobre “host inalcançável” estiverem aborrecendo basta incluir o redirecionamento para null já apresentado.
Por fim, se você só quiser as estatísticas finais, sem os testes use o parâmetro “-q”, assim:
fping -q -c3 -g 192.168.0.1 192.168.0.5 192.168.0.1 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 1.64/1.68/1.78 192.168.0.2 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 2.30/3.31/5.04 192.168.0.3 : xmt/rcv/%loss = 3/0/100% 192.168.0.4 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0.14/0.14/0.14 192.168.0.5 : xmt/rcv/%loss = 3/0/100%
Só tem um porém no uso do “-q”. As estatísticas são exibidas na saída de erros do seu terminal, isso quer dizer que se você usar o redirecionamento para null na intenção de se livrar das mensagens de “host inalcançável” você não verá as estatísticas.
Uma solução para este problema poderia ser um redirecionamento para o comando grep removendo tudo que é indesejado. Particularmente eu uso assim:
fping -q -c3 -g 192.168.0.0/24 2>&1 |grep -vi "ICMP Host Unreachable" 192.168.0.0 : xmt/rcv/%loss = 0/0/0% 192.168.0.1 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 1.59/2.44/3.96 192.168.0.2 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 2.17/3.22/5.17 192.168.0.3 : xmt/rcv/%loss = 3/0/100% 192.168.0.4 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0.13/0.16/0.20 192.168.0.5 : xmt/rcv/%loss = 3/0/100% 192.168.0.6 : xmt/rcv/%loss = 3/0/100% 192.168.0.7 : xmt/rcv/%loss = 3/0/100% 192.168.0.8 : xmt/rcv/%loss = 3/0/100% [...]
Na verdade usei aqui dois redirecionamentos. o primeiro que redireciona a saída de erros para a saída padrão e então saída padrão para o comando grep com os parâmetros “-v” e “-i” descartando todas as linhas que façam menção aos hosts inalcançáveis.
Há muito mais a se falar sobre ping e fping mas por hora creio que isso atenda a várias necessidades. Em uma próxima oportunidade eu comento sobre outras possibilidades. Até lá.