Como usar o netstat no Linux
O Linux netstat
O comando fornece 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 o protocolo de controle de transporte (TCP) ou o protocolo de datagrama de usuário UDP. Eles usam endereços de protocolo da Internet e portas de rede para estabelecer conexões.
A palavra tomadas pode evocar imagens de um ponto de conexão física para um condutor ou cabo, mas, neste contexto, um soquete é uma construção de software usada para controlar uma extremidade de uma conexão de dados de rede.
Os soquetes têm dois estados principais: Eles são conectado e facilitando uma comunicação de rede contínua, ou eles estão espera para 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 costuma ser chamado ouvindo).
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 netstat
comando permite descobrir 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 de netstat
foi replicado 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, porque ele está disponível em todos os sistemas operacionais Linux e Unix, e até mesmo no Windows e Mac.
Veja como usá-lo, completo com comandos de exemplo.
Listando todos os soquetes
O -uma
(todas) a opção faz netstat
mostrar todos os soquetes conectados e em espera. Este comando é capaz de produzir uma longa lista, por isso a canalizamos para menos
.
netstat -a | menos
A lista inclui soquetes TCP (IP), TCP6 (IPv6) e UDP.
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) Proto Recv-Q Send-Q Endereço local Endereço estrangeiro Estado tcp 0 0 localhost: domínio 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost : ipp 0.0.0.0:* ESCUTE tcp 0 0 localhost: smtp 0.0.0.0:* ESCUTE tcp6 0 0 [::]: ssh [::]: * ESCUTE tcp6 0 0 ip6-localhost: ipp [::]: * OUÇO . . . Soquetes de domínio UNIX ativos (servidores e estabelecidos) Sinalizadores de Proto RefCnt Tipo Estado Nó I Caminho 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 estabelecidas no computador entre diferentes aplicativos, processos e elementos do sistema operacional.
As colunas “Internet ativa” são:
- Proto: O protocolo usado por este soquete (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 é para
netstat
para 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 o Estado tabela, abaixo.
Para conexões TCP, o Estado o valor pode ser um dos seguintes:
- OUÇO: Apenas no lado do servidor. O soquete está aguardando uma solicitação de conexão.
- SYN-SENT: Apenas do lado do cliente. Este socket fez um pedido de conexão e está esperando para ver se ele será aceito.
- SYN-RECEIVED: Apenas no 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 que os dados sejam transferidos entre os dois.
- FIN-WAIT-1: Servidor e clientes. Este soquete está esperando por uma solicitação de encerramento de conexão do soquete remoto ou por uma confirmação de uma solicitação de encerramento 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 soquete está aguardando uma solicitação de encerramento de conexão do usuário local.
- ENCERRAMENTO: Servidor e clientes. Este soquete está aguardando 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 término de conexão enviada ao soquete remoto.
- TEMPO DE ESPERA: 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.
- FECHADO: Não há conexão, então o soquete foi encerrado.
As colunas “domínio Unix” são:
- Proto: O protocolo usado por este soquete. Será “unix”.
- RefCnt: Contagem de referência. O número de processos anexados conectados a este soquete.
- Bandeiras: Isso geralmente é definido como
ACC
, que representaSO_ACCEPTON
, significando que o soquete está esperando por uma solicitação de conexão.SO_WAITDATA
, mostrado comoC
, significa que há dados esperando para serem lidos.SO_NOSPACE
, mostrado comoN
, significa que não há espaço para gravar dados no soquete (ou seja, o buffer de envio está cheio). - Modelo: O tipo de soquete. Veja o modelo tabela abaixo.
- Estado: O estado do soquete. Veja o Estado tabela abaixo.
- Nó I: O inode do sistema de arquivos associado a este soquete.
- Caminho: O caminho do sistema de arquivos para o soquete.
O soquete de domínio Unix modelo 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 de conexão de soquete “normal”. Esses soquetes são projetados para fornecer entrega sequenciada confiável (em ordem) de pacotes.
- CRU: Este soquete está sendo usado como um soquete bruto. Soquetes brutos operam no nível da rede do modelo OSI e não fazem referência aos cabeçalhos TCP e UDP do nível de transporte.
- RDM: Esse soquete está localizado em uma extremidade de uma conexão de mensagens entregues de forma confiável.
- SEQPACKET: Esse 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 soquete de domínio Unix Estado pode ser um dos seguintes:
- GRATUITAMENTE: Este soquete não está alocado.
- OUVINDO: Este soquete está ouvindo solicitações de conexão de entrada.
- CONECTANDO: Este soquete está em processo de conexão.
- CONECTADO: Uma conexão foi estabelecida e o soquete pode receber e transmitir dados.
- DESCONECTANDO: A conexão está sendo encerrada.
Uau, isso é muita informação! Muitos dos netstat
As opções refinam os resultados de uma forma ou de outra, mas não alteram muito o conteúdo. Vamos dar uma olhada.
Listando Sockets por Tipo
O netstat -a
comando pode fornecer mais informações do que você precisa ver. Se você deseja ou precisa apenas ver os soquetes TCP, você pode usar o -t
(TCP) opção para restringir a exibição para mostrar apenas soquetes TCP.
netstat -at | menos
O display out é bastante reduzido. Os poucos soquetes listados são todos soquetes TCP.
O -você
(UDP) e -x
As opções (UNIX) se comportam de maneira semelhante, restringindo os resultados ao tipo de soquete especificado na linha de comando. Aqui está a opção -u (UDP) em uso:
netstat -au | menos
Somente soquetes UDP são listados.
Listagem de soquetes por estado
Para ver os soquetes que estão no estado de escuta ou espera, use o -eu
(escuta) opção.
netstat -l | menos
Os soquetes listados são aqueles que estão no estado de escuta.
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
Agora, vemos apenas soquetes de escuta TCP.
Estatísticas de rede por protocolo
Para ver as estatísticas de um protocolo, use o -s
(estatísticas) opção e passar na -t
(TCP), -você
(UDP), ou -x
(UNIX) opções. Se você apenas usar o -s
(estatísticas) por conta própria, você verá as estatísticas de todos os protocolos. Vamos verificar as estatísticas do protocolo TCP.
netstat -st | menos
Uma coleção de estatísticas para as conexões TCP é exibida em menos
.
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. O -p
(programa) opção faz exatamente isso. Vamos ver quais são os PIDs e nomes de processo para os processos que usam um soquete TCP que está no estado de escuta. Nós usamos sudo
para garantir que recebamos todas as informações disponíveis, incluindo quaisquer informações que normalmente exigiriam permissões de root.
sudo netstat -p -at
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 soquetes.
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 o-n
(numérico), os endereços IPv4 são mostrados no formato decimal com pontos:
sudo netstat -an | menos
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.
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. 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 protocolo 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).
RELACIONADO:Qual é a diferença entre 127.0.0.1 e 0.0.0.0?
Exibindo a Tabela de Roteamento
O -r
A opção (rota) exibe a tabela de roteamento do kernel.
sudo netstat -r
Aqui está o resultado em uma tabela organizada:
Tabela de roteamento IP do Kernel Gateway de Destino Genmask Sinalizadores Janela MSS irtt Iface default Vigor.router 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 o dispositivo host de destino (se o destino não for uma rede).
- Porta de entrada: O endereço do gateway. Um asterisco “
*
”Aparece aqui se um endereço de gateway não estiver definido. - Genmask: A máscara de sub-rede da rota.
- Bandeiras: Veja o bandeiras tabela, 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 da qual os pacotes enviados por esta rota são transmitidos.
O bandeiras o valor pode ser um dos seguintes:
- VOCÊ: A rota está subida.
- 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).
- UMA: 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 netstat
Através dos grep
, podemos pesquisar um processo pelo nome e identificar a porta que ele está usando. Nós usamos o -uma
(tudo), -n
(numérico) e -p
(programa) opções usadas anteriormente e pesquise “sshd.”
sudo netstat -anp | grep "sshd"
grep
encontra a string de destino, e vemos que o sshd
daemon 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"
Desta vez grep
encontra a string de destino “: 22” e vemos que o processo que usa esta porta é o sshd
daemon, ID de processo 751.
Liste as interfaces de rede
O -eu
(interfaces) irá exibir uma tabela das interfaces de rede que netstat
pode descobrir.
sudo netstat -i
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. O
enp0s3
interface é a interface de rede para o fora mundo, e olo
interface é a interface de loopback. A interface de loopback permite que os processos se intercomuniquem dentro de o 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 o 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 seja zero.
- RX-DRP: O número de pacotes perdidos durante a transmissão. Idealmente, 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 havia mais dados prontos para serem transmitidos e precisavam ser descartados.
- Flg: Bandeiras. Veja o bandeiras tabela abaixo.
O bandeiras representam o seguinte:
- B: Um endereço de broadcast está em uso.
- EU: Essa interface é um dispositivo de loopback.
- M: Todos os pacotes estão sendo recebidos (ou seja, em modo promíscuo). Nada é filtrado ou descartado.
- O: 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.
- VOCÊ: 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 muito a eficiência do ponto de vista do remetente.
O -g
(grupos) opção faz netstat
lista os membros do grupo multicast de sockets em cada interface.
sudo netstat -g
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 em netstat
porque está universalmente disponível, independentemente do sistema operacional Unix em que você está trabalhando, mesmo os obscuros.