Opções Avançadas do ping e Aplicações Práticas
Agora que você entende os conceitos básicos do ping e como interpretar sua saída, vamos explorar algumas opções avançadas e cenários práticos onde o ping é útil para diagnósticos de rede.
Primeiro, vamos criar um script de shell simples que nos ajudará a monitorar um host continuamente e registrar os resultados:
nano ~/project/monitor_host.sh
Digite o seguinte script no editor:
#!/bin/bash
## Simple network monitoring script
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt
echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE
while true; do
ping -c 1 $HOST | grep "time=" >> $LOG_FILE
sleep $INTERVAL
echo "---" >> $LOG_FILE
done
Salve o arquivo pressionando Ctrl+O, depois Enter e saia com Ctrl+X.
Torne o script executável:
chmod +x ~/project/monitor_host.sh
Agora, vamos executar o script por alguns segundos para monitorar o servidor DNS do Google:
~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!
Isso fará o seguinte:
- Iniciar o script de monitoramento em segundo plano
- Aguardar 10 segundos
- Parar o script
Vamos examinar o log:
cat ~/project/ping_log.txt
Você deve ver vários resultados de ping com timestamps.
Agora, vamos explorar algumas opções de ping mais avançadas:
- Definindo o TTL (Time To Live):
ping -c 4 -t 64 8.8.8.8
A opção -t define o valor TTL, que define quantos saltos de rede um pacote pode percorrer antes de ser descartado.
- Flood ping (requer sudo):
sudo ping -c 10 -f 8.8.8.8
A opção -f envia pacotes o mais rápido possível. Isso é útil para testes de estresse, mas deve ser usado com cautela.
- Ping audível:
ping -c 4 -a 8.8.8.8
A opção -a produz um som de sino audível quando um host responde, o que é útil quando você está solucionando problemas e não está assistindo à tela.
- Tempo limite com deadline:
ping -c 4 -w 2 8.8.8.8
A opção -w define um prazo em segundos após o qual o ping será interrompido, independentemente de quantos pacotes foram enviados.
Vamos explorar um cenário prático de solução de problemas. Criaremos uma visualização simples do caminho da rede para um destino usando traceroute (que funciona de forma semelhante ao ping, mas mostra a rota que os pacotes seguem):
traceroute 8.8.8.8
Este comando mostra cada salto (roteador) que os pacotes percorrem para atingir o destino. Você verá algo como:
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 _gateway (10.0.2.2) 0.113 ms 0.087 ms 0.083 ms
2 * * *
3 * * *
4 8.8.8.8 14.080 ms 13.849 ms 14.399 ms
Os asteriscos (*) representam timeouts ou roteadores que não respondem às solicitações de traceroute.
Agora, vamos criar uma tabela simples para documentar nossos resultados de ping para diferentes hosts:
echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt
Vamos adicionar o DNS do Google à nossa tabela:
result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
E adicione o DNS do Cloudflare:
result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
Vamos visualizar nossa tabela de resultados:
cat ~/project/ping_results.txt
Você deve ver uma tabela formatada com estatísticas de ping para ambos os servidores DNS, que você pode usar para comparar seu desempenho.