O que é :: no endereço local da saída netstat?

30

Esta é a saída do netstat -tulpn que recebo:

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      2055/hpiod
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2077/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2138/sendmail: acce
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      2060/python
tcp        0      0 0.0.0.0:735                 0.0.0.0:*                   LISTEN      1825/rpc.statd
tcp        0      0 :::111                      :::*                        LISTEN      1781/rpcbind
tcp        0      0 :::80                       :::*                        LISTEN      2624/httpd
tcp        0      0 :::22                       :::*                        LISTEN      2096/sshd
udp        0      0 0.0.0.0:32768               0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1581/dhclient
udp        0      0 0.0.0.0:729                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:732                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               2077/cupsd
udp        0      0 :::32769                    :::*                                    2398/avahi-daemon:
udp        0      0 :::684                      :::*                                    1781/rpcbind
udp        0      0 :::5353                     :::*                                    2398/avahi-daemon:
udp        0      0 :::111                      :::*                                    1781/rpcbind

Estou curioso para saber: o que significa ::: no endereço local? E o que é 0.0.0.0:* e :::* no endereço externo?

    
por Pradipta 17.10.2013 / 15:33

6 respostas

20

Como muitas das outras respostas mencionam, :: representa todos os zeros e, em seguida, o netstat pode mostrar dois pontos após um endereço, então você obtém três pontos e vírgulas.

O que eu não vi em nenhuma dessas respostas é uma resposta à pergunta sobre o que isso realmente significa (neste caso).

No caso do netstat, :: (no IPv6) ou 0.0.0.0 (no IPv4) significa basicamente "qualquer". Então, o software está escutando na porta TCP 80 (a porta HTTP) em qualquer um dos endereços.

Se você tem várias interfaces de placa de rede (o que você faz, como explicarei em breve), é possível que você ouça apenas um endereço específico. Por exemplo, com alguns softwares, você poderia fazer algo como fazer seu servidor HTTP escutar em uma placa de rede que usa Ethernet com fio, mas não responder a uma placa de rede que usa rede sem fio. Se você fez isso, então seu computador pode fazer algo como escutar no IPv4 192.0.2.100:80 (ou IPv6 2001: db8: abcd :: 1234: 80).

Mas, como você está ouvindo "::: 80", o seu computador não está ouvindo o tráfego da porta 80 em apenas um endereço IP de entrada, você está ouvindo o tráfego da porta 80 em qualquer endereço IPv6.

Por que você sempre quis ser exigente sobre qual interface você está ouvindo? Bem, uma maneira que usei esse recurso, às vezes, é fazer com que um computador ouça a interface de loopback. (Lembre-se quando eu disse que você tem várias interfaces de placa de rede ... esta é uma das razões que eu disse isso. Eu estou supondo que você tem uma conexão de rede física real e que você também tem uma interface de loopback. Essa é a configuração mais típica para a maioria dos tipos de computadores nos dias de hoje.) Eu faço isso com tunelamento SSH. Então eu posso fazer algo como fazer um visualizador VNC local se conectar à extremidade local de um túnel SSH. Fazendo o túnel SSH escutar na interface de loopback, não preciso me preocupar que o túnel SSH possa escutar o tráfego que chega de uma das interfaces de rede físicas. Então, o túnel SSH só verá o tráfego de rede que vem do meu computador.

Em alguns casos, 0.0.0.0 ou :: basicamente significa o endereço "não especificado", conforme especificado por RFC 4291 seção 2.5.2 que diz "Indica a ausência de um endereço." Às vezes, vejo isso quando um software tenta se referir a um endereço "inválido" (como se um computador não tivesse um endereço atribuído, talvez), onde não há um endereço específico para exibir. No entanto, neste caso, o :: ou 0.0.0.0 refere-se a um endereço "desconhecido". É por isso que todas as portas LISTENING são "desconhecidas". Para uma conexão estabelecida, você sabe quem é o final remoto, porque você está se comunicando com eles. Para uma conexão "LISTENING", você está ouvindo novas conversas. Esse tráfego pode vir de, bem, possivelmente em qualquer lugar do mundo. O tráfego de entrada pode vir de qualquer endereço. E, a maneira que o nestat exibe é para especificar um endereço de todos os zeros. Como não há endereço específico para usar, o endereço "não especificado" parece bastante apropriado.

Vou encerrar observando que ter software escutando em todas as interfaces de rede é uma coisa muito comum. Alguns softwares podem ser configurados para escutar apenas um endereço de Internet específico ou talvez uma placa de rede específica. E isso pode ser um pouco mais seguro, porque o software não está escutando onde nenhum tráfego válido é esperado. Isso pode limitar a capacidade de ataque. No entanto, muitos softwares não possuem essa opção, ou essa opção é um pouco oculta / oculta. Então, ouvir em todas as placas de rede não é uma coisa super terrível. É bem comum E, se você quiser evitar que o software receba tráfego em uma porta de rede específica, há outras maneiras de fazer isso, incluindo o bloqueio de tráfego indesejado com um firewall. Se você fizer isso, o firewall poderá bloquear o tráfego, mas o servidor (da Web) ainda poderá ouvir o tráfego nessa interface de rede. Nesse caso, o servidor nunca obterá tráfego nessa interface, mas o netstat ainda informará que o servidor está escutando (para o tráfego que nunca chegará a esse servidor). Ver o relatório do netstat que o software do servidor está escutando em todas as interfaces é muito comum, e por isso não é algo para se estar particularmente alarmado.

Por fim, mencionarei que essa pergunta e essa resposta não são específicas do Linux. (Estou mencionando isso porque vejo a tag "Linux" nessa questão.) Os parâmetros da linha de comandos mostrados, e a saída de exemplo mostrada, podem ter vindo do Linux, e diferentes sistemas operacionais podem exibir coisas um pouco diferentes. No entanto, sobre o tópico de :: e 0.0.0.0, a maneira que o netstat trabalha a esse respeito é idêntica em uma máquina rodando BSD ou Microsoft Windows (e presumivelmente muitos outros sistemas).

    
por 31.01.2015 / 08:50
7

Como outros disseram, é a notação natural do IPv6 para este contexto.

Vamos citar e interpretar os padrões relevantes:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

link diz que o canônico (não apenas uma possível abreviação) Endereços IPv6 são:

  • escrito em hexadecimal com os caracteres a-f minúsculas.
  • agrupados a cada 2 bytes por :
  • os 0 DE MUST devem ser removidos. 0000 se torna 0 .
  • a sequência mais longa de :0:0:0: DEVE ser convertida em :: . Só pode ser feito uma vez ou levaria a ambigüidade.

Então :::* significa:

  • 0000:0000:0000:0000:0000:0000:0000 em qualquer porta ( :* )
  • == 0:0:0:0:0:0:0 (remoção de 0 à direita)
  • == :: (contração zero consecutiva)

0000.0000.0000.0000.0000.0000.0000.0000: * == endereço não especificado

link define o "endereço não especificado":

The address 0:0:0:0:0:0:0:0 is called the unspecified address. It must never be assigned to any node. It indicates the absence of an address. One example of its use is in the Source Address field of any IPv6 packets sent by an initializing host before it has learned its own address.

The unspecified address must not be used as the destination address of IPv6 packets or in IPv6 Routing headers. An IPv6 packet with a source address of unspecified must never be forwarded by an IPv6 router.

que faz com que seja uma boa escolha para uma coluna N / A, como neste caso.

Portanto, :: não é localhost , que o mesmo documento diz em ::1 .

Em netstat 1.60, os protocolos na saída leem tcp6 e udp6 para IPv6, o que mostra melhor o que está acontecendo, por exemplo:

tcp6       0      0 :::22                   :::*                    LISTEN      1201/sshd
udp6       0      0 :::5353                 :::*                                1449/avahi-daemon:

Veja também:

por 25.08.2014 / 19:55
3

Refere-se ao endereço IPv6. No IPv6, podemos condensar uma sequência de 0 usando o modificador ::

Por exemplo,

0:0:0:0:0:0:0:1

pode ser escrito como

::1

Mas há regras específicas a serem seguidas a esse respeito, que você pode procurar em qualquer tutorial do Ipv6

    
por 17.10.2013 / 15:48
2

:: 1 é o localhost para o IPv6, como o 127.0.0.1 para o IPv4.

::: * é a versão curta de 0: 0: 1: * (IPv6 0: 0: 0, porta *), é como o IPv4 0.0.0.0:*. Ambos na coluna de endereço externo significam que não há coluna de endereço externo. No caso dos soquetes de escuta, fica claro que não há (ainda) um endereço externo conectado. No caso dos sockets udp você normalmente não tem endereços estrangeiros conectados, então eles também são listados com 0.0.0.0: *.

    
por 17.10.2013 / 16:49
0

::: * Seria seu localhost / loop de volta no IPv6:)

Basicamente, você tem serviços ouvindo e conectando-se a serviços localmente.

    
por 17.10.2013 / 15:39
0

I'm curious to know: what does ::: in Local Address mean?

A versão linux do netstat usa uma notação de: onde o endereço IP é mostrado nu *.

So ::: 111 significa um IP de :: e uma porta de 111.

:: é um endereço IPv6 de forma condensada, usando a regra de que uma série de zeros pode ser substituída por:. Escrito na íntegra é equivalente a 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

Assim como no IPv4, o endereço de todos os zeros (conhecido como o endereço não especificado) é usado como um valor de espaço reservado. No caso de um endereço local, significa que o socket está escutando todas as interfaces IPv6 (e possivelmente todas as interfaces IPv4, dependendo das opções de socket que o netstat não mostra).

And what is 0.0.0.0:* and :::* in Foreign Address?

Isso significa que o soquete não está vinculado a um endereço externo específico. :: ou 0.0.0.0 indica um endereço IP não especificado (para IPv4 ou IPv6, respectivamente) e * indica uma porta não especificada.

Para TCP isso se aplica somente a soquetes que atendem conexões de entrada. Quando "accept" é chamado para aceitar uma conexão, um socket separado é criado com um IP e uma porta remotos definidos.

Para o UDP, não há conceito de aceitar conexões. Um aplicativo vinculado a um soquete UDP com um endereço externo de ::: * usa a chamada de API "recvfrom" para receber pacotes e determinar de onde eles vieram e a chamada da API "sendto" para enviar pacotes para um endereço específico.

* Esta notação é lamentável porque significa que uma string exibida significa coisas diferentes no netstat para outros lugares. Na maioria dos contextos 3FFE :: 1234: 5678 significaria o endereço IP 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678 mas na saída netstat do linux significa o endereço IP 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 e a porta 5678. A versão do windows do netstat por contraste envolve os endereços IPv6 entre colchetes para evitar ambigüidade.

    
por 20.05.2016 / 13:37