Nesta aula, vamos explorar os comandos de rede básicos que todo administrador de sistemas e desenvolvedor precisa dominar no Linux. Essas ferramentas são essenciais para verificar conectividade, transferir dados e diagnosticar problemas de rede. Começaremos com o clássico ping, depois avançaremos para ferramentas de transferência como curl e wget, e finalizaremos com utilitários modernos de inspeção de interfaces e portas: ip e ss.

Dominar esses comandos não só ajuda no dia a dia, mas também é fundamental para automatizar tarefas de monitoramento e diagnóstico em scripts. Ao longo da aula, você verá exemplos práticos e dicas de boas práticas para usar essas ferramentas de forma eficiente e segura.

ping

O comando ping é uma das ferramentas mais antigas e utilizadas para testar a conectividade entre seu computador e outro host na rede. Ele envia pacotes ICMP (Internet Control Message Protocol) Echo Request para o destino e aguarda respostas Echo Reply. Se o destino estiver acessível, ele responde; caso contrário, o comando indica perda de pacotes ou timeout.

A sintaxe básica é ping [opções] destino. Por padrão, o comando continua enviando pacotes indefinidamente até você interromper com Ctrl+C. Para testes rápidos, é comum limitar o número de pacotes com a opção -c. Além disso, a opção -i define o intervalo entre pacotes, e -W define o tempo máximo de espera pela resposta.

Exemplo de uso:

# Envia 4 pacotes para o google.com
ping -c 4 google.com

# Envia pacotes a cada 2 segundos, com timeout de 1 segundo
ping -i 2 -W 1 8.8.8.8

# Verifica se um host está acessível na rede local
ping 192.168.1.1

No output, você verá o tempo de ida e volta (RTT) de cada pacote e estatísticas finais. Um RTT alto pode indicar congestionamento ou rota longa. Perda de pacotes sugere problemas de conectividade ou firewall bloqueando ICMP. Lembre-se de que muitos servidores bloqueiam ICMP por segurança, então ausência de resposta não significa necessariamente que o host está fora do ar.

curl e wget

Quando precisamos transferir dados de ou para servidores, curl e wget são as ferramentas mais versáteis. Ambos suportam HTTP, HTTPS, FTP e outros protocolos, mas têm diferenças importantes.

curl é mais orientado a transferência de dados e é amplamente usado para testar APIs, baixar arquivos, enviar dados via POST, e muito mais. Ele exibe o conteúdo na saída padrão por padrão, o que o torna ideal para inspecionar respostas HTTP. Já wget é mais focado em download de arquivos, especialmente downloads recursivos e retomáveis. Ele salva o conteúdo em arquivos por padrão.

Exemplos com curl:

# Baixa o conteúdo de uma página e exibe no terminal
curl https://example.com

# Salva o conteúdo em um arquivo
curl -o pagina.html https://example.com

# Envia uma requisição POST com dados JSON
curl -X POST -H "Content-Type: application/json" -d '{"nome":"João"}' https://api.exemplo.com/usuarios

# Segue redirecionamentos e mostra cabeçalhos HTTP
curl -L -I https://example.com

Exemplos com wget:

# Baixa um arquivo e salva com o nome original
wget https://example.com/arquivo.zip

# Download recursivo de um site (com limitação de profundidade)
wget -r -l 2 https://example.com

# Retoma um download interrompido
wget -c https://example.com/arquivo.zip

# Baixa múltiplos arquivos a partir de uma lista
wget -i lista.txt

Uma boa prática é usar curl para testes de API e wget para downloads simples ou em lote. Ambos têm inúmeras opções; consulte as páginas de manual (man curl, man wget) para aprofundar.

ip e ss (visão geral)

Os comandos ip e ss são as ferramentas modernas para inspecionar interfaces de rede e conexões. Eles substituem os antigos ifconfig e netstat, que ainda existem, mas são considerados obsoletos em muitas distribuições.

O comando ip permite visualizar e configurar interfaces, endereços IP, rotas e muito mais. Por exemplo, ip addr mostra todas as interfaces e seus endereços; ip route exibe a tabela de roteamento; e ip link mostra o estado das interfaces (up/down).

Já o ss é utilizado para inspecionar sockets e conexões de rede. Ele é mais rápido e legível que o netstat. Com ss, você pode ver portas em escuta, conexões estabelecidas, estatísticas de TCP, entre outros.

Exemplos:

# Mostra todas as interfaces de rede e endereços IP
ip addr

# Mostra a tabela de roteamento
ip route

# Ativa ou desativa uma interface (requer root)
sudo ip link set eth0 up
sudo ip link set eth0 down

# Lista todas as portas em escuta (TCP e UDP)
ss -tulpn

# Mostra todas as conexões TCP estabelecidas
ss -tn

# Filtra por porta específica (ex.: 80)
ss -tulpn | grep :80

Esses comandos são essenciais para diagnosticar problemas de conectividade, verificar se um serviço está escutando na porta correta e entender o roteamento da máquina. Dominá-los é fundamental para qualquer pessoa que trabalhe com redes no Linux.

Diagnóstico

Quando algo dá errado na rede, uma abordagem sistemática ajuda a identificar o problema rapidamente. Comece verificando a configuração de rede local com ip addr e ip route para garantir que há um IP válido e uma rota padrão. Em seguida, teste a conectividade com o gateway usando ping. Se o gateway responder, o problema pode estar além da rede local.

Ferramentas como traceroute (ou tracepath) mostram o caminho que os pacotes percorrem até o destino, ajudando a identificar onde os pacotes são perdidos. O comando dig ou nslookup verifica a resolução de DNS. E o curl pode testar se um serviço HTTP está acessível e exibir códigos de status.

Exemplo de sequência de diagnóstico:

# 1. Verificar interfaces e IPs
ip addr

# 2. Verificar rota padrão
ip route

# 3. Testar gateway
ping -c 3 192.168.1.1

# 4. Testar DNS
nslookup google.com

# 5. Testar HTTP
curl -I https://google.com

# 6. Rastrear rota (se necessário)
traceroute -n google.com

Essa abordagem permite isolar o problema: se o ping ao gateway funciona, mas o ping a um host externo falha, o problema pode estar no roteamento ou no firewall. Se o DNS não resolve, o problema está na configuração do resolvedor. Se o curl retorna um código de erro, você pode investigar a porta ou o serviço específico.

Boas práticas e observações finais

Ao usar esses comandos em scripts, lembre-se de tratar saídas e códigos de retorno. Por exemplo, ping retorna 0 se pelo menos um pacote for recebido, e 1 se falhar. O curl retorna 0 em sucesso, e códigos diferentes para erros. Use essas informações para tomar decisões no script.

Além disso, cuidado com o uso de ping em loops infinitos; sempre limite com -c ou use timeout. Prefira curl a wget para testes de API, pois ele oferece mais controle sobre cabeçalhos e métodos. E sempre consulte as páginas de manual para explorar opções avançadas.

Referências

Exercícios

  1. Explique o que o comando ping -c 5 8.8.8.8 faz e qual é o significado do tempo de resposta (RTT) exibido.
  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 RTT (Round-Trip Time) é o tempo que um pacote leva para ir e voltar, medido em milissegundos. Um RTT baixo indica boa latência; RTT alto pode indicar congestionamento ou longo caminho.
  3. Qual é a diferença principal entre curl e wget? Dê um exemplo de uso para cada um.
  4. ✓ Resposta: curl é mais flexível para transferências de dados, exibindo o conteúdo na tela por padrão e suportando muitos protocolos e métodos HTTP. wget é focado em download de arquivos, com suporte a downloads recursivos e retomáveis. Exemplo: curl -X POST -d '{"id":1}' https://api.exemplo.com/item para testar uma API; wget -r -l 2 https://site.com para baixar um site inteiro.
  5. Como você verificaria qual porta um serviço está escutando em sua máquina? Cite dois comandos possíveis.
  6. ✓ Resposta: Usando ss -tulpn para listar todas as portas em escuta, ou netstat -tulpn (embora ss seja preferível). Por exemplo: ss -tulpn | grep :80 mostra se há um serviço na porta 80.
  7. Descreva uma sequência de comandos para diagnosticar um problema em que você não consegue acessar um site externo, mas consegue acessar a internet (por exemplo, o ping para o gateway funciona).
  8. ✓ Resposta: Primeiro, verifique a resolução de DNS com nslookup site.com ou dig site.com. Se o DNS falhar, verifique o arquivo /etc/resolv.conf. Em seguida, teste a conectividade com o site usando ping site.com. Se o ping falhar, tente traceroute site.com para ver onde os pacotes são perdidos. Também teste a porta HTTP com curl -I https://site.com para ver se o serviço responde.
  9. Explique o que o comando ip route show exibe e por que é útil.
  10. ✓ Resposta: ip route show exibe a tabela de roteamento do sistema, mostrando como os pacotes são encaminhados para diferentes redes. É útil para verificar se existe uma rota padrão (default) e se as rotas para redes específicas estão corretas, ajudando a diagnosticar problemas de conectividade.