Uma ferramenta indispensável para administração de rede é o comando Ping no Linux. Você pode ter usado o ping
anteriormente para solução de problemas básicos, mas o que exatamente esse comando faz?
O comando ping
envia solicitações do Protocolo de Mensagem de Controle da Internet (ICMP) para hosts remotos ou locais e aguarda uma resposta. A ausência de resposta pode indicar um problema com a conexão ou os próprios hosts.
Continue lendo e explore as maneiras práticas de usar o comando ping no Linux!
Pré-requisitos
Este tutorial será uma demonstração prática. Se deseja seguir, certifique-se de ter um computador Linux com conexão à internet. Este tutorial utiliza um computador Ubuntu 20.04.
Além disso, certifique-se de já ter aberto uma sessão no terminal do seu computador Linux.
Verificando a Conectividade da Rede Local
Imagine que você esteja desenvolvendo uma aplicação web. O teste falha quando você tenta acessar a aplicação através do endereço de loopback do host (127.0.0.1). Antes de arrancar os cabelos ao solucionar o problema da aplicação, certifique-se de que o protocolo TCP/IP funciona internamente usando o comando ping
.
Os endereços de loopback padrão são 127.0.0.1 e 0:0:0:0:0:0:0:1 (ou ::1) para IPv4 e IPv6, respectivamente.
Para verificar a conectividade do endereço de loopback, execute o comando ping
seguido do endereço de loopback no terminal. Este comando demonstra o uso mais básico do comando ping
no Linux.
E se o loopback funcionar corretamente, você deverá ver uma saída semelhante à captura de tela abaixo.

Alternativamente, ao fazer ping no nome de host localhost
, você deverá obter o mesmo resultado, pois ele resolve para o endereço de loopback por padrão.

Para encerrar o comando ping
, pressione CTRL+C
no terminal. Caso contrário, o comando ping continuará em execução continuamente.
Nota: Não pressione CTRL+Z para interromper o comando ping. Fazê-lo irá parar o comando, mas o processo permanecerá em execução em segundo plano.

Entendendo a Saída do Comando Ping no Linux
Antes de prosseguir, você se beneficiaria ao entender explicitamente a saída, em vez de apenas interpretá-la como “funciona”. Consulte a imagem abaixo e a descrição dos valores que seguem.

- A (
bytes
) – Shows the ICMP echo request (packet) size in bytes. - B (
from
) – Shows the target host’s IP addressfrom
where theping
command receives the response. - C (
icmp_seq
) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value showsicmp_seq=N
, whereN
is the order number. - D (
TTL
) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255. - E (
time
) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that thetime
values are less than 0.1 milliseconds in this example since the target is the same machine. Thetime
value increases naturally when theping
destinations are remote or have an internet address. - F (
statistics
) – Shows the summary and statistics of theping
command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.
Forçando a Versão do Protocolo de Internet
O comando ping utiliza o IPv4 por padrão. Mas e se você estiver testando a compatibilidade de sua aplicação com o IPv6? Para forçar o comando ping a usar o IPv6, você deve especificar a opção -6 no seu comando ping no Linux, como você pode ver no código abaixo.
Como pode ser visto abaixo, a resposta indica que veio do endereço de loopback IPv6 (::1).

Em vez da opção -6, a opção -4 força o ping a usar o IPv4. No entanto, como o ping já é padrão para o IPv4, geralmente não é necessário especificar a opção -4.
Limitando o Número de Respostas
Nos exemplos anteriores, você precisava pressionar CTRL+C para encerrar o comando ping, pois ele continuaria sendo executado indefinidamente.
A opção -c permite que você especifique o número de respostas que o comando ping recebe antes de parar. Por que usar essa opção? Em alguns casos, você pode querer testar como seu sistema responde a 10, 100, 1000 pacotes ICMP, e assim por diante.
Execute o seguinte comando para enviar cinco pacotes ICMP para o host de destino. Substitua 5 pelo número de respostas ICMP a serem recebidas antes de parar.
Como pode ser visto abaixo, o comando ping parou após o quinto pedido (icmd_seq=5), e você não precisou pressionar CTRL+C para encerrá-lo.

Ajustando o Intervalo de Solicitação
Suponha que você queira testar a conexão de rede entre dois dispositivos, e um deles tem largura de banda baixa. Nesse caso, você pode aumentar o intervalo entre cada solicitação para que o segundo dispositivo tenha tempo suficiente para processar o pacote ICMP atual.
O comando ping
envia a solicitação ICMP subsequente um segundo após completar a anterior por padrão. Para ajustar o atraso, você deve especificar a opção -i
seguida pelo valor do atraso em segundos.
Por exemplo, execute o seguinte comando ping
para enviar cinco solicitações ICMP com um intervalo de dois segundos entre elas.
Outro exemplo, execute o seguinte comando ping
para enviar cinco solicitações ICMP com um intervalo de meio segundo entre cada uma.
Comparar os resultados de ambos os comandos com intervalos diferentes mostra a diferença entre os valores totais de tempo
.

Simulando um Ataque de Flood
A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.
Você pode simular um ataque de flood para testar como seu sistema responde a um ataque. Não se preocupe, no entanto. A simulação de flood de ping é controlada e você pode pará-la a qualquer momento pressionando CTRL+C.
Execute o seguinte comando em sua máquina local para ver quantas solicitações seu dispositivo pode lidar por segundo. A opção -f
significa enviar vários pacotes de ping rapidamente e sem limite arbitrário.
Substitua localhost pelo endereço IP ou nome de host do aplicativo que deseja testar. Este exemplo simula o ping flood apenas no host local. Deixe o comando ping rodar por cerca de cinco segundos e, em seguida, pressione CTRL+C
para terminar.
O comando ping -f requer que você seja o usuário root ou tenha privilégios de sudo.
Como você pode ver abaixo, o comando ping conseguiu enviar e receber 124.685
pacotes ICMP em 4276
milissegundos, sem perda de pacotes. Bastante bom, não é? Mas, em um caso de uso da vida real, você verá alguma perda de pacotes. A perda de pacotes é inevitável porque a rede não é perfeita.

Verificando a Conectividade com a Internet
Todo mundo usa a internet de alguma forma, certo? Suponha que você tente carregar um site usando seu navegador, mas o tempo de carregamento da página parece lento. O sintoma indicaria que a resolução de DNS está funcionando, mas algo afeta a velocidade da rede.
Diagnosticar o problema sem ferramentas de terceiros incluiria o comando ping
. O uso do comando é o mesmo que quando você testa a conectividade da rede local. Mas, em vez de direcionar para o endereço de loopback, você especificaria um IP público ou um endereço web.
Execute o comando abaixo para pingar um site público externo. Substitua adamtheautomator.com por outro endereço web, conforme desejar.
Logo de cara, você notará que o valor do tempo é relativamente maior do que quando você faz ping no localhost. Esse aumento no tempo gasto é devido ao fato de o endereço de destino adamtheautomator.com não estar no mesmo host e nem na mesma rede.
Nos passos anteriores, seu comando ping foi bem-sucedido, mas no uso do mundo real, há momentos em que o comando ping falhará por muitas razões possíveis.
A seguir estão alguns erros comuns e como resolvê-los.
- Host de destino inalcançável – Esse erro significa que não há rota para o host de destino. Esse erro pode ocorrer se o host ou domínio estiverem inativos.
- Solicitação expirada – Esse erro significa que a solicitação ao host de destino demorou muito (mais de 4 segundos ou 4000 milissegundos), e a conexão expirou. Esse erro pode ocorrer se o host de destino estiver muito ocupado para responder, um firewall bloqueando a conexão, ou hardware de rede defeituoso (cabo, roteador, etc.).
- Host desconhecido – Esse erro significa que o DNS não pode resolver o nome do host para um endereço IP. Verifique se você digitou o nome do host corretamente. Se você suspeitar que seu roteador pode não estar funcionando corretamente, tente reiniciá-lo.
- TTL Expirado em Trânsito – Esse erro significa que a solicitação ICMP expirou antes de chegar ao seu destino. Seu pacote de ping se reduz a zero (0) antes de atingir o host de destino. Na maioria dos casos, uma configuração incorreta na sua tabela de roteamento pode causar esse erro. Considere verificar sua tabela de roteamento para ver se há algum problema.
Em Caso de Você Não Saber: Jogadores se referem ao ping como sua conexão com o servidor de jogo na comunidade de jogos. Um baixo ping significa uma conexão mais responsiva, especialmente em jogos de ritmo acelerado. Um alto ping indica uma conexão menos responsiva e pode fazer com que o jogo pareça lento.
Alguns Provedores de Serviço de Internet (ISPs) retornam uma página de busca em vez de uma mensagem de erro quando você tenta se conectar a um site que não existe. Você pode obter um resultado falso-positivo porque está recebendo uma resposta em vez de um erro.
Salvando Saída do Ping em um Arquivo
A maioria dos comandos, se não todos, apenas exibe os resultados na tela, e o comando ping
no Linux não é diferente. O terminal Linux possui operadores integrados de redirecionamento de saída que permitem redirecionar a saída para um arquivo.
Esses operadores de redirecionamento são os seguintes:
o caractere (>
), que sobrescreverá o conteúdo do arquivo, e o;
o caractere (>>
), que anexará a saída ao conteúdo existente.
Mas por que você gostaria de salvar os resultados do ping em um arquivo? Principalmente para registro e posterior análise usando um editor de texto ou um analisador de log.
Você também pode usar um programa de planilha para criar um gráfico que mostra como o tempo de ping muda ao longo do tempo.
Execute o seguinte comando para salvar a saída do ping em um arquivo. Este comando escreve toda a saída padrão do comando ping
em um arquivo chamado log.txt no disco.
Enquanto o comando ping
está em execução, você notará que não há saída na tela.
Agora, abra o arquivo log.txt em um editor de texto, como o nano
. Ou exiba o conteúdo do arquivo executando o comando cat
.


Conclusão
Neste tutorial, você aprendeu como usar o comando ping Linux com vários exemplos práticos. Você também aprendeu como salvar a saída do ping em um arquivo no disco para que você possa analisá-lo posteriormente.
Neste ponto, você deveria ter um bom entendimento de como o comando ping funciona e como ele pode ser útil. Mas antes de sair por aí e começar a pingar tudo o que vê, há algumas regras que você deve ativar em seus grupos de segurança para permitir o tráfego ICMP.
Obrigado por ler e feliz aprendizado!