Como verificar se um socket de rede específico está aberto no Linux

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se um socket de rede específico está aberto no Linux. Compreender como identificar e inspecionar sockets de rede ativos é uma habilidade fundamental para a solução de problemas e monitoramento de rede.

Através de exercícios práticos, você utilizará ferramentas de linha de comando poderosas como ss e netstat para listar e filtrar conexões de rede. Você também explorará o sistema de arquivos /proc/net para obter informações mais detalhadas sobre os sockets, fornecendo uma abordagem abrangente para verificar o status dos sockets de rede em seu sistema.

Verificar socket com ss -tuln

Nesta etapa, você aprenderá como usar o comando ss para inspecionar sockets de rede em seu sistema Linux. Sockets são pontos finais para enviar e receber dados através de uma rede. Compreender como visualizar sockets ativos é crucial para a solução de problemas e monitoramento de rede.

O comando ss é uma ferramenta poderosa para examinar sockets. Vamos usá-lo com as seguintes opções:

  • -t: Exibir sockets TCP.
  • -u: Exibir sockets UDP.
  • -l: Exibir sockets em escuta (sockets esperando por conexões).
  • -n: Não resolver nomes de serviço (exibir números de porta em vez disso).

Abra seu terminal se ele ainda não estiver aberto. Você pode encontrar o ícone do Xfce Terminal no lado esquerdo da sua área de trabalho.

Agora, digite o seguinte comando e pressione Enter:

ss -tuln

Você verá uma saída semelhante a esta:

Netid State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
tcp   LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:631                    0.0.0.0:*
tcp   LISTEN     0      128    0.0.0.0:5900                     0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:25                     0.0.0.0:*
tcp   LISTEN     0      128    [::]:22                          [::]:*
tcp   LISTEN     0      128    [::1]:631                        [::]:*
tcp   LISTEN     0      128    [::]:5900                        [::]:*
tcp   LISTEN     0      128    [::1]:25                         [::]:*
udp   UNCONN     0      0      127.0.0.1:323                    0.0.0.0:*
udp   UNCONN     0      0      0.0.0.0:631                      0.0.0.0:*
udp   UNCONN     0      0      [::1]:323                        [::]:*
udp   UNCONN     0      0      [::]:631                         [::]:*

Vamos analisar a saída:

  • Netid: O tipo de socket (por exemplo, tcp, udp).
  • State: O estado do socket (por exemplo, LISTEN significa que está esperando por uma conexão).
  • Recv-Q: O número de bytes recebidos na fila.
  • Send-Q: O número de bytes enviados na fila.
  • Local Address:Port: O endereço IP local e o número da porta ao qual o socket está vinculado. 0.0.0.0 e [::] indicam que o socket está ouvindo em todas as interfaces de rede disponíveis (IPv4 e IPv6, respectivamente).
  • Peer Address:Port: O endereço IP remoto e o número da porta ao qual o socket está conectado. * indica que o socket está ouvindo por conexões de qualquer endereço remoto.

Esta saída mostra quais serviços estão em execução e ouvindo por conexões em seu sistema. Por exemplo, você pode ver que SSH (porta 22), CUPS (porta 631), VNC (porta 5900) e o servidor de e-mail (porta 25) estão ouvindo.

Compreender esta saída é o primeiro passo para diagnosticar problemas de conectividade de rede ou identificar serviços potencialmente indesejados em execução em seu sistema.

Clique em Continuar para prosseguir para a próxima etapa.

Verificar socket com netstat -tuln

Nesta etapa, você usará outro comando, netstat, para verificar os sockets de rede. netstat é um comando mais antigo em comparação com ss, mas ainda é amplamente utilizado e fornece informações semelhantes sobre conexões de rede, tabelas de roteamento e estatísticas de interface.

Usaremos netstat com as mesmas opções que ss para ver os sockets TCP e UDP em escuta sem resolver nomes de serviço:

  • -t: Exibir sockets TCP.
  • -u: Exibir sockets UDP.
  • -l: Exibir sockets em escuta.
  • -n: Não resolver nomes de serviço.

Digite o seguinte comando em seu terminal e pressione Enter:

netstat -tuln

Você verá uma saída semelhante a esta:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:631             0.0.0.0:*
udp6       0      0 ::1:323                 :::*
udp6       0      0 :::631                  :::*

Observe que a saída de netstat -tuln é muito semelhante à saída de ss -tuln. Ambos os comandos fornecem informações sobre o protocolo (Proto), o endereço local e a porta (Local Address), o endereço estrangeiro e a porta (Foreign Address) e o estado da conexão (State).

Embora ss seja geralmente considerado mais rápido e mais informativo para cenários complexos, netstat ainda é uma ferramenta valiosa para ter em seu arsenal de comandos Linux. É uma boa prática estar familiarizado com ambos.

Você agora usou com sucesso ss e netstat para visualizar sockets em escuta. Esta é uma habilidade fundamental para entender a atividade da rede em seu sistema.

Clique em Continuar para passar para a próxima etapa.

Inspecionar detalhes do socket em /proc/net

Nesta etapa, você explorará o diretório /proc/net, que fornece informações detalhadas sobre a pilha de rede e os protocolos de rede no kernel Linux. É aqui que comandos como ss e netstat obtêm seus dados.

O sistema de arquivos /proc é um sistema de arquivos virtual que fornece informações sobre processos e outras informações do sistema. É uma maneira poderosa de inspecionar o estado interno do kernel.

Dentro de /proc/net, você encontrará arquivos que contêm dados brutos sobre conexões de rede. Por exemplo, tcp, udp, tcp6 e udp6 contêm informações sobre sockets TCP e UDP ativos (IPv4 e IPv6, respectivamente).

Vamos olhar o conteúdo do arquivo tcp. Digite o seguinte comando em seu terminal e pressione Enter:

cat /proc/net/tcp

Você verá uma saída que se parece com isto:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
   0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 12345 1 0000000000000000 0
   1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 67890 1 0000000000000000 0
   ... (mais linhas)

Esta saída é menos legível para humanos do que ss ou netstat porque são os dados brutos do kernel. Cada linha representa um socket TCP e contém vários campos, incluindo:

  • sl: O índice da lista de sockets.
  • local_address: O endereço IP local e a porta em formato hexadecimal. 0100007F é a representação hexadecimal de 127.0.0.1 (endereço de loopback) e 0019 é a representação hexadecimal da porta 25.
  • rem_address: O endereço IP remoto e a porta em formato hexadecimal.
  • st: O estado do socket (por exemplo, 0A representa LISTEN).
  • tx_queue: O tamanho da fila de transmissão.
  • rx_queue: O tamanho da fila de recebimento.
  • uid: O ID do usuário que possui o socket.
  • inode: O número do inode do socket.

Você também pode visualizar sockets UDP olhando para o arquivo /proc/net/udp:

cat /proc/net/udp

E para sockets IPv6, você pode verificar /proc/net/tcp6 e /proc/net/udp6.

Embora você normalmente não analise esses arquivos diretamente para uso diário, entender que é aqui que as informações da rede se originam fornece uma visão mais profunda de como o Linux gerencia as conexões de rede. Comandos como ss e netstat essencialmente leem e formatam os dados desses arquivos para facilitar a compreensão.

Você agora explorou as informações brutas do socket disponíveis no sistema de arquivos /proc/net.

Clique em Continuar para concluir o laboratório.

Resumo

Neste laboratório, você aprendeu como verificar se um socket de rede específico está aberto no Linux usando várias ferramentas de linha de comando. Você começou utilizando o comando ss com as opções -tuln para exibir os sockets TCP e UDP em escuta, compreendendo as colunas de saída como Netid, State, Local Address:Port e Peer Address:Port.

Após o uso de ss, você normalmente verificaria as informações do socket usando o comando netstat, que fornece estatísticas de rede semelhantes. Finalmente, você exploraria como inspecionar informações detalhadas do socket diretamente do sistema de arquivos /proc/net, que oferece uma visão de baixo nível da pilha de rede. Essas etapas fornecem uma abordagem abrangente para identificar e examinar sockets de rede abertos em um sistema Linux.