Introdução ao netstat
O comando netstat é uma ferramenta essencial no Linux para administradores de sistema e desenvolvedores, oferecendo uma visão detalhada do estado das conexões de rede ativas, tabelas de roteamenot, estatísticas de interface, e membros de multicast. Ele permite monitorar e diagnosticar problemas relacionados à rede, exibindo informações cruciais sobre o tráfego e as portas em uso.
Estrutura da Saída do netstat
Ao executar netstat, a saída é geralmente dividida em duas seções principais:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 9 [ ] DGRAM 5292 /dev/log
-
Conexões de Internet Ativas (Active Internet connections): Refere-se às conexões TCP e UDP.
-
Proto: Indica o protocolo (TCP, UDP). -
Recv-Q: Quantidade de bytes na fila de recebimento para esta conexão (ainda não lidos pelo programa). -
Send-Q: Quantidade de bytes na fila de envio para esta conexão (aguardando transmissão). Idealmente, ambos devem ser zero. -
Local Address: Endereço IP local e número da porta. -
Foreign Address: Endereço IP remoto e número da porta. -
State: Estado atual da conexão (ex: ESTABLISHED, LISTEN, TIME_WAIT). -
Sockets de Domínio UNIX Ativos (Active UNIX domain sockets): Sockets utilizados para comunicação entre processos no mesmo sistema.
-
Proto: Protocolo (geralmente unix). -
RefCnt: Número de processos anexados a este socket. -
Flags: Bandeiras de uso do socket. -
Type: Tipo de socket (ex: STREAM, DGRAM). -
State: Estado do socket. -
I-Node: Número do inodo associado ao socket. -
Path: Caminho do socket para outros processos.
Opções Comuns do Comando netstat
O netstat suporta diversas opções para filtrar e formatar sua saída:
-aou--all: Exibe todas as conexões e sockets, incluindo aqueles em estado de "escuta" (LISTEN).-tou--tcp: Lista apenas as conexões TCP.-uou--udp: Lista apenas as conexões UDP.-nou--numeric: Exibe endereços IP e números de porta em formato numérico, sem tentar resolver nomes de host, nomes de serviço ou nomes de usuário. Isso pode acelerar a saída.-lou--listening: Mostra apenas os sockets que estão em estado de escuta.-pou--programs: Exibe o PID (ID do Processo) e o nome do programa associado a cada conexão. Requer privilégios de root para ver todos os processos.-rou--route: Apresenta a tabela de roteamento do kernel.-eou--extend: Mostra informações estendidas, como UID e inodo.-sou--statistics: Exibe estatísticas por protocolo (TCP, UDP, ICMP, IP).-cou--continuous: Atualiza as informações de rede continuamente, a cada segundo.
Exemplos Práticos de Uso do netstat
1. Listar Todas as Conexões e Portas
Para visualizar todas as conexões, incluindo as portas que estão aguardando conexões (LISTEN) e as já estabelecidas:
# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 *:* LISTEN
udp 0 0 *:bootpc *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
Apenas conexões TCP:
# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
Apenas conexões UDP:
# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 *:bootpc *:*
udp 0 0 *:49119 *:*
udp 0 0 *:mdns *:*
2. Exibir Apenas Sockets em Estado de Escuta (LISTEN)
Para ver apenas as portas que estão escutando por novas conexões:
# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:ipp *:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
udp 0 0 *:49119 *:*
Sockets TCP em escuta:
# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
Sockets UDP em escuta:
# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 *:49119 *:*
udp 0 0 *:mdns *:*
Sockets de domínio UNIX em escuta:
# netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop
unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup
3. Obter Estatísticas por Protocolo
Para ver um resumo estatístico para todos os protocolos:
# netstat -s
Ip:
11150 total packets received
1 with invalid addresses
0 forwarded
0 incoming packets discarded
11149 incoming packets delivered
11635 requests sent out
Icmp:
0 ICMP messages received
0 input ICMP message failed.
Tcp:
582 active connections openings
2 failed connection attempts
25 connection resets received
Udp:
1183 packets received
4 packets to unknown port received.
Estatísticas específicas para TCP ou UDP:
# netstat -st
# netstat -su
4. Identificar Processos Associados (PID e Nome)
Útil para depuração, esta opção mostra qual processo está usando uma determinada conexão ou porta.
# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox
tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
5. Formato Numérico (Evitar Resolução de Nomes)
Para uma saída mais rápida e sem resolução de nomes, use a opção -n:
# netstat -an
Você pode ser mais específico se quiser evitar a resolução apenas para portas, hosts ou usuários:
# netstat -a --numeric-ports
# netstat -a --numeric-hosts
# netstat -a --numeric-users
6. Monitoramento Contínuo
Para observar as mudanças nas conexões de rede em tempo real, use a opção -c:
# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING
^C
7. Exibir Famílias de Endereço Não Suportadas
A opção --verbose pode mostrar informações detalhadas e avisos sobre famílias de endereços não suportadas pelo sistema:
netstat --verbose
No final da saída, você poderá ver mensagens como:
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
8. Visualizar Tabela de Roteamento do Kernel
Para insepcionar a tabela de roteamento do sistema:
# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth2
link-local * 255.255.0.0 U 0 0 0 eth2
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
Use -rn para exibir a tabela de roteamento com endereços numéricos, o que é mais rápido e útil para scripts.
9. Filtrar Conexões por Processo ou Porta
Combinando netstat com grep, é possível encontrar conexões específicas. Por exemplo, para encontrar conexões relacionadas ao SSH:
# netstat -ap | grep ssh
tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
Para encontrar processos que estão utilizando a porta 80:
# netstat -an | grep ':80'
10. Listar Interfaces de Rede
Para obter um resumo das interfaces de rede e suas estatísticas básicas:
# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 0 0 0 0 0 0 0 0 BMU
eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU
lo 16436 0 4 0 0 0 4 0 0 0 LRU
Para uma saída mais detalhada, similar ao ifconfig:
# netstat -ie
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Memory:f6ae0000-f6b00000
11. Análise de IP e Estados TCP
Para identificar os endereços IP que mais se conectam a uma porta específica (ex: porta 22 para SSH):
netstat -nat | grep "192.168.1.15:22" | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -20
18 221.136.168.36
3 154.74.45.242
2 78.173.31.236
Para listar e contar os diferentes estados das conexões TCP (ESTABLISHED, TIME_WAIT, LISTEN, etc.):
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn
143 ESTABLISHED
36 LISTEN
113 TIME_WAIT
6 SYN_SENT
Também é possível usar técnicas similares para analisar logs, por exemplo, para encontrar os 10 IPs mais ativos em um access.log de um servidor web:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10