Nesta aula, vamos explorar os comandos de rede básicos que todo administrador de sistemas e desenvolvedor deve conhecer no ambiente Linux/Bash. Dominar essas ferramentas é fundamental para diagnosticar problemas de conectividade, verificar serviços, transferir arquivos e entender o estado da rede do sistema. Começaremos com o clássico ping, passaremos pelos utilitários de transferência curl e wget, depois veremos as modernas ferramentas ip e ss, e finalizaremos com técnicas de diagnóstico combinadas.

Esses comandos são a base para tarefas do dia a dia, desde verificar se um host está acessível até inspecionar portas abertas e rotas. Ao longo da aula, você verá exemplos práticos e opções úteis que podem ser aplicadas imediatamente. Vamos começar!

ping

O comando ping é uma das ferramentas mais antigas e utilizadas para testar a conectividade de rede. Ele envia pacotes ICMP (Internet Control Message Protocol) do tipo Echo Request para um host de destino e aguarda respostas Echo Reply. Se o host estiver ativo e a rede funcionando, ele responde, permitindo medir o tempo de ida e volta (RTT) e a perda de pacotes.

O ping é útil para verificar se um servidor está online, se a rede local está funcionando, e para avaliar a latência. No entanto, muitos servidores bloqueiam pacotes ICMP por segurança, então a ausência de resposta não significa necessariamente que o host está inacessível. Vamos ver os usos mais comuns:

# Ping básico (envia pacotes continuamente até Ctrl+C)
ping google.com

# Enviar um número específico de pacotes
ping -c 4 8.8.8.8

# Definir o intervalo entre pacotes (em segundos)
ping -i 2 google.com

# Verificar a interface de rede usada (opção -I)
ping -I eth0 google.com

# Exibir apenas o resultado final (estatísticas) com -q
ping -c 4 -q google.com

No exemplo acima, -c define a contagem, -i o intervalo, -I a interface de origem e -q modo silencioso. A saída típica mostra o número de pacotes transmitidos/recebidos, a perda e o tempo mínimo/médio/máximo.

curl e wget

Quando precisamos transferir dados de ou para servidores, curl e wget são as ferramentas padrão. O curl é mais versátil, suporta diversos protocolos (HTTP, HTTPS, FTP, etc.) e é frequentemente usado para testar APIs, baixar arquivos e enviar dados. O wget é mais focado em download, especialmente de páginas inteiras e downloads recursivos, sendo mais simples em alguns aspectos.

Vamos explorar exemplos práticos de ambos:

# curl: baixar o conteúdo de uma URL para a saída padrão
curl https://example.com

# curl: salvar em um arquivo (-o)
curl -o pagina.html https://example.com

# curl: seguir redirecionamentos (-L) e mostrar cabeçalhos (-I)
curl -L -I https://example.com

# curl: enviar dados via POST (com -d)
curl -X POST -d "nome=Joao" https://httpbin.org/post

# wget: baixar um arquivo
wget https://example.com/arquivo.zip

# wget: baixar recursivamente um site (cuidado!)
wget -r -l 2 https://example.com

O curl é preferido em scripts por sua flexibilidade e por suportar saída silenciosa (-s), que é útil para automação. O wget é mais amigável para downloads simples e oferece opções como -c para continuar transferências interrompidas.

ip e ss (visão geral)

Os comandos ip e ss fazem parte do pacote iproute2, que substitui as antigas ferramentas ifconfig, route e netstat. O ip é usado para gerenciar interfaces de rede, endereços IP, rotas e túneis. O ss (socket statistics) é usado para inspecionar sockets e conexões de rede, sendo mais rápido e detalhado que o antigo netstat.

Vamos ver alguns comandos essenciais:

# ip: mostrar todas as interfaces de rede
ip addr show

# ip: mostrar apenas interfaces ativas
ip link show

# ip: mostrar a tabela de rotas
ip route show

# ip: adicionar um endereço IP a uma interface (requer root)
sudo ip addr add 192.168.1.100/24 dev eth0

# ss: listar todas as conexões TCP
ss -t

# ss: listar todas as portas em escuta (listening)
ss -tlnp

# ss: mostrar estatísticas de rede
ss -s

O ip é essencial para configurar redes de forma dinâmica, enquanto o ss ajuda a verificar quais serviços estão rodando e em quais portas. A opção -p mostra o processo associado à conexão, e -l filtra por sockets em escuta.

Diagnóstico

Quando algo dá errado na rede, é importante ter uma abordagem sistemática para diagnosticar. Combinando os comandos anteriores, podemos identificar onde está o problema: na interface, na rota, no DNS, no firewall ou no servidor remoto. Vamos ver um fluxo comum de diagnóstico.

Primeiro, verificamos a conectividade básica com ping. Se falhar, testamos a interface com ip addr. Em seguida, verificamos a rota com ip route. Se a rota estiver correta, testamos o DNS com nslookup ou dig. Por fim, testamos a porta específica com curl ou nc. Vamos a um exemplo prático:

# 1. Testar conectividade com um host
ping -c 3 google.com

# 2. Verificar interfaces e IPs
ip addr show

# 3. Verificar rota padrão
ip route show default

# 4. Testar resolução DNS
nslookup google.com

# 5. Testar porta HTTP (80) com curl
curl -I http://google.com

# 6. Verificar conexões estabelecidas
ss -tnp | grep :80

Essa sequência permite isolar o problema: se o ping falhar, o problema pode estar na rede física ou na configuração de IP. Se o ping funcionar, mas o curl falhar, o problema pode ser firewall ou serviço. O ss ajuda a confirmar se a conexão está sendo estabelecida.

Boas práticas e observações finais

Ao usar esses comandos, lembre-se de que alguns exigem privilégios de root (como adicionar IPs). Prefira sempre as opções que fornecem saída legível e evite loops infinitos com ping em scripts, use -c para limitar. Para diagnóstico, combine ping, ip, ss e curl para obter uma visão completa. Essas ferramentas são extremamente poderosas e essenciais no dia a dia.

Referências

Exercícios

  1. Explique o que o comando ping -c 5 8.8.8.8 faz e qual é a importância do parâmetro -c.
  2. ✓ Resposta: O comando envia 5 pacotes ICMP Echo Request para o endereço 8.8.8.8 (um DNS público do Google) e aguarda as respostas. O parâmetro -c define o número de pacotes a serem enviados, evitando que o comando fique em execução indefinidamente, o que é importante em scripts e testes automatizados.
  3. Qual é a diferença principal entre curl e wget? Dê um exemplo de uso de cada um.
  4. ✓ Resposta: O curl é mais versátil, suporta muitos protocolos e é frequentemente usado para transferir dados, testar APIs e enviar requisições. O wget é mais focado em download de arquivos e pode baixar sites recursivamente. Exemplo: curl -O https://example.com/arquivo.txt e wget https://example.com/arquivo.txt.
  5. Como você usaria o comando ip para exibir todas as interfaces de rede e seus endereços IP? Escreva o comando.
  6. ✓ Resposta: Basta executar ip addr show ou ip a. Isso exibe todas as interfaces, incluindo seus endereços IPv4 e IPv6, estado (UP/DOWN), entre outras informações.
  7. Qual comando você usaria para listar todas as portas TCP em escuta no sistema? Como você incluiria o processo responsável?
  8. ✓ Resposta: O comando ss -tlnp lista todas as portas TCP em escuta (-l), mostrando o processo (-p). A opção -t filtra por TCP e -n evita a resolução de nomes, tornando a saída mais rápida.
  9. Descreva um fluxo de diagnóstico passo a passo para verificar se um servidor web em http://meuservidor.com está acessível. Inclua os comandos que você usaria.
  10. ✓ Resposta: Fluxo sugerido:
    1. ping meuservidor.com para verificar conectividade básica.
    2. ip addr show para verificar se a interface local está ativa.
    3. ip route show para confirmar a rota padrão.
    4. nslookup meuservidor.com para testar a resolução DNS.
    5. curl -I http://meuservidor.com para testar a porta 80 e ver os cabeçalhos HTTP.
    6. Se falhar, ss -tlnp | grep :80 para ver se o servidor está escutando na porta 80.