netstat - um comando listando informações como ::: 30179, ::: www

-1

O comando netstat -a lista informações como esta:

tcp        0      0 :::30179                :::*           LISTEN      
tcp        0      0 :::www                  :::*           LISTEN      
tcp        0      0 :::10001                :::*           LISTEN      
tcp        0      0 :::telnet               :::*           LISTEN   

O que isso significa? Eu tento descobrir, mas não consegui.

    
por Vijay Kalyanam 09.08.2016 / 10:08

1 resposta

0

Esses sockets estão escutando no endereço não especificado do IPv6, que é :: . Esta é a abreviação de 0000:0000:0000:0000:0000:0000:0000:0000 (vários blocos de 0 podem ser compactados em :: , consulte RFC 5952 ). Isso é semelhante ao endereço não especificado do IPv4 0.0.0.0 . Isso significa que o serviço está escutando em todos os endereços do host.

Normalmente, escutar em um soquete IPv6 significa que o soquete aceita apenas conexões de entrada de clientes IPv6, e o software precisaria abrir um segundo soquete para escutar os clientes IPv4.

Há um caso especial: escutar o endereço não especificado do IPv6 e ter o sinalizador IPV6_V6ONLY definido como 0 (falso). Em muitos sistemas, incluindo o Linux, esse é o padrão. Nesse caso, o soquete aceitará os clientes IPv4 e IPv6 em um único soquete. Esse recurso facilita para os desenvolvedores de software dar suporte ao IPv6: eles podem criar softwares que apenas atendem a ambos os protocolos usando um único soquete.

A desvantagem disso é que não é fácil ver quais soquetes escutam os dois protocolos e quais sockets só escutam no IPv6. Também é confuso que : seja usado no endereço IPv6 e também como o separador entre o endereço e a porta. Dessa forma, você obtém o confuso ::: bit.

Sistemas baseados em BSD tendem a mostrar as mesmas informações de uma maneira diferente. Lá, seu exemplo seria exibido como, por exemplo:

tcp46      0      0  *.30179              *.*               LISTEN
tcp46      0      0  *.www                *.*               LISTEN
tcp46      0      0  *.10001              *.*               LISTEN
tcp46      0      0  *.telnet             *.*               LISTEN

Um servidor que usa dois sockets separados para IPv4 e IPv6 aparece como:

tcp4       0      0  *.ssh                *.*               LISTEN
tcp6       0      0  *.ssh                *.*               LISTEN

e

udp4       0      0  *.ntp                *.*
udp6       0      0  *.ntp                *.*

Pessoalmente, gosto que mostre explicitamente quais protocolos estão sendo ouvidos (por exemplo, tcp4 / tcp6 / tcp46 ) e usando o caractere * para o endereço não especificado.

Acabei de notar que as versões recentes do Ubuntu usam essa notação:

tcp        0      0 *:ssh                 *:*               LISTEN
tcp6       0      0 [::]:ssh              [::]:*            LISTEN
tcp6       0      0 [::]:https            [::]:*            LISTEN

O que já é muito mais claro. Infelizmente, ele não mostra a diferença entre um soquete que ouve apenas no IPv6 (como o ssh socket) e um soquete que escuta tanto no IPv4 quanto no IPv6 (como o https socket).

    
por Sander Steffann 09.08.2016 / 10:57