Exemplos Práticos do Comando Ping no Linux

Uma ferramenta indispensável para a administração de redes é o comando Ping no Linux. Talvez você já tenha usado `ping` antes para solução básica de problemas, 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 falta de resposta pode indicar um problema com a conexão ou os próprios hosts.

Continue lendo e explore as formas práticas de usar o comando ping no Linux!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você quiser acompanhar, certifique-se de ter um computador Linux com conexão à internet. Este tutorial utiliza um computador com Ubuntu 20.04.

Além disso, certifique-se de que já abriu uma sessão no terminal do seu computador Linux.

Verificação da Conectividade da Rede Local

Imagine que você está 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 solucionando problemas na 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 abaixo seguido do endereço de loopback no terminal. Este comando demonstra o uso mais básico do comando ping no Linux.

ping 127.0.0.1

E se o loopback estiver funcionando corretamente, você deverá ver uma saída semelhante à captura de tela abaixo.

Pinging the loopback address (127.0.0.1)

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

Pinging the loopback address (localhost)

Para encerrar o comando ping, pressione CTRL+C no terminal. Caso contrário, o comando ping continuará sendo executado.

Nota: Não pressione CTRL+Z para interromper o comando ping. Fazê-lo irá parar o comando, mas o processo continuará em execução em segundo plano.

Terminating the ping command in Linux

Compreendendo 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 explicação dos valores que se segue.

Ping command output
  • A (bytes) – Shows the ICMP echo request (packet) size in bytes.
  • B (from) – Shows the target host’s IP address from where the ping 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 shows icmp_seq=N, where N 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 the time values are less than 0.1 milliseconds in this example since the target is the same machine. The time value increases naturally when the ping destinations are remote or have an internet address.
  • F (statistics) – Shows the summary and statistics of the ping 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 usa o IPv4 por padrão. Mas e se você estiver testando a compatibilidade do seu aplicativo com o IPv6? Para forçar o comando ping a usar o IPv6, você deve especificar a opção -6 para o seu comando ping no Linux, como você pode ver no código abaixo.

ping -6 localhost

Como você pode ver abaixo, a resposta mostra que veio do endereço de loopback IPv6 (::1).

Pinging the IPv6 loopback address

Em vez da opção -6, a opção -4 força o ping a usar o IPv4. Mas como o ping tem o IPv4 como padrão, geralmente você não precisa especificar a opção -4.

Limitando o Número de Respostas

Nos exemplos anteriores, você teve que pressionar CTRL+C para encerrar o comando ping porque ele continuaria rodando continuamente de outra forma.

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 o 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 receber antes de parar.

ping -c 5 localhost

Como você pode ver abaixo, o comando ping parou após o quinto pedido (icmd_seq=5), e você não precisou pressionar CTRL+C para terminá-lo.

Ping with a limited request count

Ajustando o Intervalo de Solicitação

Suponha que você queira testar a conexão de rede entre dois dispositivos, e um deles tem baixa largura de banda. 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 requisição ICMP subsequente um segundo após a conclusão da anterior, por padrão. Para ajustar o atraso, você deve especificar a opção -i seguida do valor do atraso em segundos.

Por exemplo, execute o comando ping abaixo para enviar cinco requisições ICMP com um intervalo de dois segundos entre elas.

ping -c 5 -i 2 localhost

Outro exemplo, execute o comando ping abaixo para enviar cinco requisições ICMP com um intervalo de meio segundo entre cada uma.

ping -c 5 -i 0.5 localhost

Comparar os resultados de ambos os comandos com intervalos diferentes mostra a diferença entre os valores totais de time.

Comparing ping results with different intervals

Simulando um Ataque de Sobrecarga

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 sobrecarga para testar como seu sistema responde a um ataque. Não se preocupe, a simulação de inundação de ping é controlada, e você pode interrompê-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 ping rapidamente e sem limite arbitrário.

Substitua “localhost” pelo endereço IP ou nome do host do aplicativo que você deseja testar. Este exemplo simula a inundação de ping apenas no host local. Deixe o comando ping ser executado por cerca de cinco segundos e, em seguida, pressione CTRL+C para encerrar.

O comando ping -f requer que você seja o usuário root ou tenha privilégios de sudo.

ping -f localhost

Como você pode ver abaixo, o comando ping conseguiu enviar e receber 124,685 pacotes ICMP em 4276 milissegundos, sem perda de pacotes (0%). Bastante bom, não é mesmo? Mas, em um caso de uso da vida real, é possível observar alguma perda de pacotes. A perda de pacotes é inevitável, pois a rede não é perfeita.

Simulating a ping flood attack

Verificando a Conectividade com a Internet

Todos utilizam 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. Esse sintoma indicaria que a resolução DNS está funcionando, mas algo afeta a velocidade da rede.

Diagnosticar o problema sem ferramentas de terceiros incluiria o uso do 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 endereço web.

Execute o comando abaixo para fazer ping em um site público externo. Substitua adamtheautomator.com por outro endereço web, se desejar.

ping -c 5 adamtheautomator.com

Imediatamente, você notará que o valor do tempo é relativamente maior do que quando você faz ping no localhost. Esse aumento no tempo gasto ocorre porque o endereço de destino adamtheautomator.com não está no mesmo host e nem na mesma rede.

Nas etapas anteriores, o comando ping foi bem-sucedido, mas no uso do mundo real, há momentos em que o comando ping falhará por várias razões possíveis.

A seguir, alguns erros comuns e como resolvê-los.

  • Destino host inacessível – Este 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 – Este erro significa que a solicitação para o host de destino levou muito tempo (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 – Este erro significa que o DNS não consegue resolver o nome do host para um endereço IP. Verifique se você digitou o nome do host correto. Se você suspeitar que seu roteador pode não estar funcionando corretamente, tente reiniciar seu roteador.
  • TTL Expirado em Trânsito – Este erro significa que o pedido 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 tabela de roteamento pode causar esse erro. Considere verificar sua tabela de rotas para ver se há algum problema.

No caso de você não saber: Os jogadores se referem ao ping como sua conexão com o servidor do jogo na comunidade de jogos. Um ping baixo significa uma conexão mais responsiva, especialmente em jogos acelerados. Um ping alto indica uma conexão menos responsiva e pode fazer o jogo parecer lento.

Alguns Provedores de Serviço de Internet (ISPs) retornam uma página de pesquisa 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 a 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 embutidos 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 manter registros 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.

ping -c 10 localhost > log.txt

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.

# Abrir em um editor de texto
nano log.txt
# OU
# Exibir o conteúdo na tela
cat log.txt
Opening the ping output file in a text editor
Displaying the ping output file contents on the screen

Conclusão

Neste tutorial, você aprendeu como usar o comando ping no 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 mais tarde.

Neste ponto, você deve ter uma boa compreensão de como o comando ping funciona e como ele pode ser útil. Mas antes de sair por aí e começar a dar ping em tudo o que vê, há algumas regras que você deve habilitar nos seus grupos de segurança para permitir o tráfego ICMP.

Obrigado por ler e feliz aprendizado!

Source:
https://adamtheautomator.com/ping-command-in-linux/