Como usar o netstat no Linux

Um prompt de terminal na área de trabalho de um computador Linux.
Fatmawati Achmad Zaenuri / Shutterstock

O netstatcomando Linux oferece um tesouro de informações sobre suas conexões de rede, as portas que estão em uso e os processos que as utilizam. Aprenda como usá-lo.

Portas, processos e protocolos

Os soquetes de rede podem ser conectados ou aguardando uma conexão. As conexões usam protocolos de rede como protocolo de  controle de transporte (TCP) ou protocolo de datagrama de usuário UDP. Eles usam endereços de protocolo de Internet e portas de rede para estabelecer conexões.

A palavra soquetes   pode evocar imagens de um ponto de conexão física para um chumbo ou cabo, mas, neste contexto, um soquete é uma construção de software usada para lidar com uma extremidade de uma conexão de dados de rede.

Os soquetes têm dois estados principais: Eles estão conectados e facilitando uma comunicação de rede contínua ou estão aguardando uma conexão de entrada para se conectar a eles. Existem outros estados, como o estado em que um soquete está no meio do caminho para estabelecer uma conexão em um dispositivo remoto, mas, deixando de lado os estados transitórios, você pode pensar em um soquete como estando conectado ou esperando (o que geralmente é chamado de escuta ).

O soquete de escuta é chamado de servidor , e o soquete que solicita uma conexão com o soquete de escuta é chamado de cliente . Esses nomes não têm nada a ver com funções de hardware ou computador. Eles simplesmente definem a função de cada soquete em cada extremidade da conexão.

O netstatcomando permite que você descubra quais soquetes estão conectados e quais soquetes estão escutando. Ou seja, ele informa quais portas estão em uso e quais processos as estão usando. Ele pode mostrar tabelas de roteamento e estatísticas sobre suas interfaces de rede e conexões multicast .

A funcionalidade do netstatfoi replicada ao longo do tempo em diferentes utilitários do Linux, como ip e ss . Ainda vale a pena conhecer este avô de todos os comandos de análise de rede, pois está disponível em todos os sistemas operacionais Linux e Unix, e até no Windows e Mac.

Veja como usá-lo, completo com comandos de exemplo.

Listando todos os soquetes

A -aopção (todos) netstatmostra todos os soquetes conectados e em espera. Esse comando pode produzir uma longa lista, então a colocamos em less.

netstat -a | Menos

netstat -a |  menos em uma janela de terminal

A lista inclui soquetes TCP (IP), TCP6 (IPv6) e UDP.

Saída de netstat -a |  menos em uma janela de terminal

O contorno da janela do terminal torna um pouco difícil ver o que está acontecendo. Aqui estão algumas seções dessa lista:

Conexões de Internet ativas (servidores e estabelecidas)
Endereço local Proto Recv-Q Send-Q Estado de endereço estrangeiro 
tcp 0 0 localhost: domínio 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* ESCUTE 
tcp 0 0 localhost: ipp 0.0.0.0:* LISTEN 
tcp 0 0 localhost: smtp 0.0.0.0:* OUVIR 
tcp6 0 0 [::]: ssh [::]: * ESCUTE 
tcp6 0 0 ip6-localhost: ipp [::]: * LISTEN 
.
.
.
Soquetes de domínio UNIX ativos (servidores e estabelecidos)
Sinalizadores Proto RefCnt Tipo Estado Caminho do Nó I
unix 24 [] DGRAM 12831 / run / systemd / journal / dev-log
unix 2 [ACC] STREAM LISTENING 24747 @ / tmp / dbus-zH6clYmvw8
unix 2 [] DGRAM 26372 / run / user / 1000 / systemd / notificar
unix 2 [] DGRAM 23382 / run / user / 121 / systemd / notificar
unix 2 [ACC] SEQPACKET LISTENING 12839 / run / udev / control

A seção “Internet ativa” lista as conexões externas conectadas e os soquetes locais que escutam as solicitações de conexão remota. Ou seja, ele lista as conexões de rede que são (ou serão) estabelecidas com dispositivos externos.

A seção “Domínio UNIX” lista as conexões internas conectadas e de escuta. Em outras palavras, ele lista as conexões que foram estabelecidas em seu computador entre diferentes aplicativos, processos e elementos do sistema operacional.

As colunas “Internet ativa” são:

  • Proto: O protocolo usado por este socket (por exemplo, TCP ou UDP).
  • Recv-Q: A fila de recebimento. Esses são bytes de entrada que foram recebidos e são armazenados em buffer, aguardando que o processo local que está usando essa conexão os leia e os consuma.
  • Send-Q:  a fila de envio. Mostra os bytes que estão prontos para serem enviados da fila de envio.
  • Endereço local: os detalhes do endereço do final local da conexão. O padrão é netstat mostrar o nome do host local para o endereço e o nome do serviço para a porta.
  • Endereço estrangeiro:  o endereço e o número da porta da extremidade remota da conexão.
  • Estado: o estado do soquete local. Para soquetes UDP, geralmente fica em branco. Veja a tabela de estados abaixo.
Recomendado:  Como adicionar legendas ocultas a uma gravação de voz em um pixel

Para conexões TCP, o valor do estado pode ser um dos seguintes:

  • ESCUTAR: Apenas do lado do servidor. O soquete está aguardando uma solicitação de conexão.
  • SYN-SENT: apenas do lado do cliente. Este socket fez uma solicitação de conexão e está esperando para ver se ela será aceita.
  • SYN-RECEIVED: Apenas do lado do servidor. Este socket está esperando por uma confirmação de conexão após aceitar um pedido de conexão.
  • ESTABELECIDO: Servidor e clientes. Uma conexão funcional foi estabelecida entre o servidor e o cliente, permitindo a transferência de dados entre os dois.
  • FIN-WAIT-1: Servidor e clientes. Este soquete está esperando por uma solicitação de término de conexão do soquete remoto ou por uma confirmação de uma solicitação de término de conexão que foi enviada anteriormente deste soquete.
  • FIN-WAIT-2: Servidor e clientes. Este soquete está aguardando uma solicitação de encerramento de conexão do soquete remoto.
  • CLOSE-WAIT: Servidor e cliente. Este socket está esperando por uma solicitação de encerramento de conexão do usuário local.
  • ENCERRAMENTO: Servidor e clientes. Este soquete está esperando por uma confirmação de solicitação de término de conexão do soquete remoto.
  • ÚLTIMO ACK: Servidor e cliente. Este soquete está aguardando uma confirmação da solicitação de encerramento de conexão enviada ao soquete remoto.
  • TIME-WAIT: Servidor e clientes. Este soquete enviou uma confirmação ao soquete remoto para informá-lo de que recebeu a solicitação de encerramento do soquete remoto. Agora ele está esperando para ter certeza de que a confirmação foi recebida.
  • CLOSED: Não há conexão, então o socket foi encerrado.

As colunas “domínio Unix” são:

  • Proto: O protocolo usado por este socket. Será “unix”.
  • RefCnt: Contagem de referência. O número de processos anexados conectados a este soquete.
  • Sinalizadores: Isso geralmente é definido como ACC , o que representa SO_ACCEPTON, o que significa que o soquete está esperando por uma solicitação de conexão. SO_WAITDATA, mostrado como W, significa que há dados esperando para serem lidos. SO_NOSPACE, mostrado como N, significa que não há espaço para gravar dados no soquete (ou seja, o buffer de envio está cheio).
  • Tipo: o tipo de soquete. Veja a tabela de tipos abaixo.
  • Estado: o estado do soquete. Veja a tabela de estados abaixo.
  • I-Node: O inode do sistema de arquivos associado a este soquete.
  • Caminho : o caminho do sistema de arquivos para o soquete.

O tipo de soquete de domínio Unix pode ser um dos seguintes:

  • DGRAM: O socket está sendo usado no modo datagrama, usando mensagens de comprimento fixo. Os datagramas não são confiáveis, sequenciados ou não duplicados.
  • STREAM: Este soquete é um soquete de fluxo. Este é o tipo comum “normal” de conexão de soquete. Esses soquetes são projetados para fornecer entrega sequenciada confiável (em ordem) de pacotes.
  • RAW: Este soquete está sendo usado como um soquete bruto. Soquetes brutos operam no nível de rede do Modelo OSI  e não fazem referência aos cabeçalhos TCP e UDP no nível de transporte.
  • RDM: este soquete está localizado em uma extremidade de uma conexão de mensagens entregues de forma confiável.
  • SEQPACKET: Este soquete está operando como um soquete de pacote sequencial, que é outro meio de fornecer entrega de pacotes confiável, sequenciada e não duplicada.
  • PACOTE: Soquete de acesso à interface bruta. Os soquetes de pacotes são usados ​​para receber ou enviar pacotes brutos no nível do driver de dispositivo (ou seja, camada de enlace de dados) do modelo OSI.

O estado do soquete do domínio Unix pode ser um dos seguintes:

  • LIVRE: este soquete não está alocado.
  • LISTENING: Este socket está ouvindo as solicitações de conexão de entrada.
  • CONECTANDO: Este soquete está em processo de conexão.
  • CONNECTED: Uma conexão foi estabelecida, e o soquete é capaz de receber e transmitir dados.
  • DESCONECTANDO: A conexão está sendo encerrada.

Nossa, isso é muita informação! Muitas das netstatopções refinam os resultados de uma forma ou de outra, mas não alteram muito o conteúdo. Vamos dar uma olhada.

Listando soquetes por tipo

O netstat -acomando pode fornecer mais informações do que você precisa ver. Se você deseja ou precisa ver apenas os soquetes TCP, pode usar a -topção (TCP) para restringir a exibição para mostrar apenas os soquetes TCP.

netstat -at | Menos

netstat -at |  menos em uma janela de terminal

O display out é bastante reduzido. Os poucos soquetes listados são todos soquetes TCP.

Recomendado:  Como arquivar seus impostos de 2021 on-line gratuitamente em 2022

Saída de netstat -at |  menos em uma janela de terminal

As opções -u(UDP) e -x(UNIX) se comportam de maneira semelhante, restringindo os resultados ao tipo de soquete especificado na linha de comando. Esta é a opção -u (UDP) em uso:

netstat -au | Menos

netstat -au |  menos em uma janela de terminal

Somente soquetes UDP são listados.

Saída de netstat -au |  menos em uma janela de terminal

Listagem de soquetes por estado

Para ver os soquetes que estão no estado de escuta ou espera, use a -lopção (escuta).

netstat -l | Menos

netstat -l |  menos em uma janela de terminal

Os soquetes listados são aqueles que estão no estado de escuta.

Saída de netstat -l |  menos em uma janela de terminal

Isso pode ser combinado com as opções -t (TCP, -u (UDP) e -x (UNIX) para identificar ainda mais os soquetes de interesse. Vamos procurar os soquetes TCP de escuta:

netstat -lt | Menos

netstat -lt |  menos em uma janela de terminal

Agora, vemos apenas soquetes de escuta TCP.

saída de netstat -lt |  menos em uma janela de terminal

Estatísticas de rede por protocolo

Para ver as estatísticas de um protocolo, use a -sopção (estatísticas) e passe as opções -t(TCP), -u(UDP) ou -x(UNIX). Se você usar apenas a -sopção (estatísticas) sozinha, verá as estatísticas de todos os protocolos. Vamos verificar as estatísticas do protocolo TCP.

netstat -st | Menos

netstat -st |  menos em uma janela de terminal

Uma coleção de estatísticas para as conexões TCP é exibida em less.

Saída de netstat -st |  menos em uma janela de terminal

Mostrando nomes de processos e PIDs

Pode ser útil ver o ID do processo (PID) do processo usando um soquete, junto com o nome desse processo. A -popção (programa) faz exatamente isso. Vamos ver quais são os PIDs e nomes de processo para os processos usando um soquete TCP que está no estado de escuta. Usamos sudopara garantir que recebemos todas as informações disponíveis, incluindo quaisquer informações que normalmente exigiriam permissões de root.

sudo netstat -p -at

sudo netstat -p -at em uma janela de terminal

Esta é a saída em uma tabela formatada:

Conexões de Internet ativas (servidores e estabelecidas)
Proto Recv-Q Send-Q Endereço Local Endereço Estrangeiro Estado PID / Nome do Programa 
tcp 0 0 localhost: domínio 0.0.0.0:* LISTEN 6927 / systemd-resolv 
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 751 / sshd 
tcp 0 0 localhost: ipp 0.0.0.0:* LISTEN 7687 / cupsd 
tcp 0 0 localhost: smtp 0.0.0.0:* LISTEN 1176 / master 
tcp6 0 0 [::]: ssh [::]: * LISTEN 751 / sshd 
tcp6 0 0 ip6-localhost: ipp [::]: * LISTEN 7687 / cupsd 
tcp6 0 0 ip6-localhost: smtp [::]: * LISTEN 1176 / master

Temos uma coluna extra chamada “PID / nome do programa”. Esta coluna lista o PID e o nome do processo usando cada um dos sockets.

Listagem de endereços numéricos

Outra etapa que podemos realizar para remover alguma ambigüidade é exibir os endereços local e remoto como endereços IP em vez de seus domínios e nomes de host resolvidos. Se usarmos a  -nopção (numérica), os endereços IPv4 são mostrados no formato decimal com pontos:

sudo netstat -an | Menos

sudo netstat -an |  menos em uma janela de terminal

Os endereços IP são mostrados como valores numéricos. Os números das portas também são mostrados, separados por dois pontos ” :” do endereço IP.

Saída de sudo netstat -an |  menos em uma janela de terminal

Um endereço IP de 127.0.0.1 mostra que o soquete está vinculado ao endereço de loopback do computador local . Você pode pensar em um endereço IP de 0.0.0.0 como significando a “rota padrão” para endereços locais e “qualquer endereço IP” para endereços estrangeiros. Os endereços IPv6 mostrados como “ ::” também são endereços zero.

As portas listadas podem ser facilmente verificadas para ver qual é sua finalidade usual :

  • 22:  Esta é a porta de escuta Secure Shell (SSH).
  • 25: Esta é a  porta de escuta do Simple Mail Transfer Protocol (SMTP).
  • 53: Esta é a porta de escuta do Sistema de Nomes de Domínio (DNS).
  • 68: Esta é a  porta de escuta do protocolo de configuração dinâmica de hosts (DHCP).
  • 631: Esta é a porta de escuta do Common UNIX Printing System (CUPS).

Exibindo a Tabela de Roteamento

A -ropção (rota) exibe a tabela de roteamento do kernel.

sudo netstat -r

sudo netstat -r em uma janela de terminal

Esta é a saída em uma tabela organizada:

Tabela de roteamento IP do kernel
Gateway de Destino Genmask Sinaliza janela MSS irtt Iface
Vigor.router padrão 0.0.0.0 UG 0 0 0 enp0s3
link-local 0.0.0.0 255.255.0.0 U 0 0 0 enp0s3
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3

E, aqui está o que as colunas significam:

  • Destino: a rede de destino ou dispositivo host de destino (se o destino não for uma rede).
  • Gateway: o endereço do gateway. Um asterisco “ *” aparecerá aqui se um endereço de gateway não for definido.
  • Genmask: a máscara de sub-rede da rota.
  • Sinalizadores: Veja a tabela de sinalizadores , abaixo.
  • MSS: Tamanho máximo do segmento padrão para conexões TCP nesta rota – esta é a maior quantidade de dados que pode ser recebida em um segmento TCP.
  • Janela: O tamanho da janela padrão para conexões TCP nesta rota, indicando o número de pacotes que podem ser transferidos e recebidos antes que o buffer de recebimento esteja cheio. Na prática, os pacotes são consumidos pelo aplicativo receptor.
  • irtt: o tempo inicial de ida e volta . Esse valor é referenciado pelo kernel para fazer ajustes dinâmicos nos parâmetros TCP para conexões remotas que demoram para responder.
  • Iface: A interface de rede a partir da qual os pacotes enviados por esta rota são transmitidos.
Recomendado:  Todos os melhores atalhos de teclado do Microsoft Word

O valor dos sinalizadores pode ser um dos seguintes:

  • U: A rota está acima.
  • H: O destino é um host e o único destino possível nesta rota.
  • G: Use o gateway.
  • R: Restabeleça a rota para roteamento dinâmico.
  • D: Instalado dinamicamente pelo daemon de roteamento.
  • M: Modificado pelo daemon de roteamento ao receber um pacote ICMP ( Internet Control Message Protocol ).
  • R: Instalado por addrconf, o gerador de arquivo de configuração de DNS e DHCP automatizado.
  • C: entrada de cache.
  • !: Rejeitar rota.

Encontrar a porta usada por um processo

Se canalizarmos a saída de netstatthrough grep, podemos pesquisar um processo por nome e identificar a porta que ele está usando. Usamos as opções -a(tudo), -n(numérico) e -p(programa) usadas anteriormente e pesquisamos por “sshd”.

sudo netstat -anp | grep "sshd"

sudo netstat -anp |  grep "sshd" em uma janela de terminal

grepencontra a string de destino e vemos que o sshddaemon está usando a porta 22.

Claro, também podemos fazer isso ao contrário. Se pesquisarmos por “: 22”, podemos descobrir qual processo está usando essa porta, se houver.

sudo netstat -anp | grep ": 22"

sudo netstat -anp |  grep ": 22" em uma janela de terminal

Desta vez, grepencontra a string de destino “: 22” e vemos que o processo que usa essa porta é o sshddaemon, ID de processo 751.

Liste as interfaces de rede

A -iopção (interfaces) exibirá uma tabela das interfaces de rede que netstatpodem ser descobertas.

sudo netstat -i

Tabela de interface de kernel em uma janela de terminal

Aqui está o resultado de uma forma mais legível:

Tabela de interface do kernel
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp0s3 1500 4520671 0 0 0 4779773 0 0 0 BMRU
lo 65536 30175 0 0 0 30175 0 0 0 LRU

Isso é o que as colunas significam:

  • Iface: o nome da interface. A enp0s3 interface é a interface de rede para o mundo externo e a lointerface é a interface de loopback. A interface de loopback permite que os processos se intercomuniquem dentro do computador usando protocolos de rede, mesmo se o computador não estiver conectado a uma rede.
  • MTU: A unidade máxima de transmissão (MTU). Este é o maior “pacote” que pode ser enviado. Ele consiste em um cabeçalho contendo sinalizadores de roteamento e protocolo e outros metadados, além dos dados que estão realmente sendo transportados.
  • RX-OK: O número de pacotes recebidos, sem erros.
  • RX-ERR: O número de pacotes recebidos, com erros. Queremos que seja o mais baixo possível.
  • RX-DRP: O número de pacotes descartados (ou seja, perdidos). Também queremos que isso seja o mais baixo possível.
  • RX-OVR: Número de pacotes perdidos devido a overflows ao receber. Isso geralmente significa que o buffer de recebimento estava cheio e não podia aceitar mais dados, mas mais dados foram recebidos e tiveram que ser descartados. Quanto menor for este valor, melhor, e o zero é perfeito.
  • TX-OK: O número de pacotes transmitidos, sem erros.
  • RX-ERR: O número de pacotes transmitidos, com erros. Queremos que isso seja zero.
  • RX-DRP: O número de pacotes descartados durante a transmissão. Idealmente, isso deve ser zero.
  • RX-OVR: O número de pacotes perdidos devido a overflows durante a transmissão. Isso geralmente significa que o buffer de envio estava cheio e não podia aceitar mais dados, mas mais dados estavam prontos para serem transmitidos e tiveram que ser descartados.
  • Flg: Sinalizadores. Veja a tabela de sinalizadores abaixo.

As bandeiras representam o seguinte:

  • B: Um endereço de broadcast está em uso.
  • L: Esta interface é um dispositivo de loopback.
  • M: Todos os pacotes estão sendo recebidos (ou seja, em modo promíscuo). Nada é filtrado ou descartado.
  • O: Protocolo de resolução de endereço (ARP) está desativado para esta interface.
  • P: Esta é uma conexão ponto a ponto (PPP).
  • R: A interface está funcionando.
  • U: A interface está ativa.

Listar membros de grupos multicast

Simplificando, uma transmissão multicast permite que um pacote seja enviado apenas uma vez, independentemente do número de destinatários. Para serviços como streaming de vídeo, por exemplo, isso aumenta enormemente a eficiência do ponto de vista do remetente.

A -gopção (grupos) netstatlista os membros do grupo multicast de soquetes em cada interface.

sudo netstat -g

sudo netstat -g em uma janela de terminal

As colunas são bastante simples:

  • Interface: o nome da interface pela qual o soquete está transmitindo.
  • RefCnt: a contagem de referência, que é o número de processos anexados ao soquete.
  • Grupo: O nome ou identificador do grupo multicast.

Os novos garotos do quarteirão

Os comandos route , ip , ifconfig e ss podem fornecer muito do que netstaté capaz de mostrar a você. Eles são todos ótimos comandos e vale a pena conferir.

Nós nos concentramos netstatporque ele está universalmente disponível, independentemente de qual sistema operacional tipo Unix você está trabalhando, mesmo os obscuros.