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


37

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 Endereço Local? E o que é 0.0.0.0:*e :::*em Endereço estrangeiro?


3
Você pode omitir zeros à esquerda no IPv6, deixando apenas os dois pontos.
Louis

Na verdade, eu falei cedo demais. Não sei por que existem três dois pontos em vez de dois, +1. Eu acho que o último está indicando a porta.
Louis

Respostas:


22

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

O que 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) basicamente significa "qualquer".
Portanto, o software está escutando na porta TCP 80 (a porta HTTP) em qualquer um dos endereços.

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

Mas, como você está ouvindo "::: 80", 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ê gostaria de ser exigente com a interface em que está ouvindo? Bem, uma maneira de usar esse recurso, às vezes, é fazer com que um computador ouça a interface de loopback. (Lembre-se de quando eu disse que você tinha várias interfaces de placa de rede ... essa é uma das razões pelas quais eu disse isso. Suponho que você tenha uma conexão de rede física real e que também tenha uma interface de loopback. Essa é a configuração mais comum para hoje em dia.) Faço isso com o tunelamento SSH. Então, posso fazer algo como conectar um visualizador VNC local à extremidade local de um túnel SSH. Fazendo com que o túnel SSH escute 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 físicas da rede. Tão,

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

Vou terminar observando que ouvir o software em todas as interfaces de rede é uma coisa muito comum. Alguns softwares podem ser configurados para escutar apenas um endereço específico da Internet ou talvez uma placa de rede específica. E isso pode ser um pouco mais seguro, porque o software não está escutando onde não é esperado tráfego válido. Isso pode limitar a capacidade de atacar. No entanto, muitos softwares não possuem essa opção, ou essa opção está um pouco oculta / oculta. Portanto, ouvir todas as placas de rede não é uma coisa super terrível. Isso é bastante comum. E, se você deseja impedir que o software receba tráfego em uma porta de rede específica, há outras maneiras de conseguir 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 (web) ainda pode receber tráfego nessa interface de rede. Nesse caso, o servidor nunca terá tráfego nessa interface, mas o netstat ainda relatará que o servidor está escutando (para o tráfego que nunca chegará a esse servidor). Ver o netstat relatar que o software do servidor está escutando em todas as interfaces é muito comum e, portanto, não é algo para se preocupar particularmente.

Por fim, mencionarei que esta pergunta e esta resposta não são específicas do Linux. (Estou mencionando isso porque vejo a tag "Linux" nesta pergunta.) Os parâmetros da linha de comando mostrados e a saída de exemplo mostrada podem ter vindo do Linux, e diferentes sistemas operacionais podem exibir coisas ligeiramente diferentes. No entanto, sobre o tópico :: e 0.0.0.0, a maneira como o netstat funciona nesse sentido é idêntica em uma máquina executando BSD ou Microsoft Windows (e presumivelmente em muitos outros sistemas).


8

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

Vamos citar e interpretar os padrões relevantes:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

http://tools.ietf.org/html/rfc5952#section-4 diz que os endereços IPv6 canônicos (e não apenas um possível atalho) são:

  • escrito em hexadecimal com os caracteres em a-fminúsculas.
  • agrupados a cada 2 bytes por :
  • 0 principais devem ser removidos. 0000torna-se 0.
  • a sequência mais longa de :0:0:0: DEVE ser convertida para ::. Só pode ser feito uma vez ou levaria à ambiguidade.

Então :::*significa:

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

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

http://tools.ietf.org/html/rfc4291#section-2.5.2 define o "endereço não especificado":

O endereço 0: 0: 0: 0: 0: 0: 0: 0 é chamado de endereço não especificado. Ele nunca deve ser atribuído a nenhum nó. Indica a ausência de um endereço. Um exemplo de seu uso está no campo Endereço de origem de qualquer pacote IPv6 enviado por um host de inicialização antes que ele aprenda seu próprio endereço.

O endereço não especificado não deve ser usado como o endereço de destino dos pacotes IPv6 ou nos cabeçalhos de roteamento IPv6. Um pacote IPv6 com um endereço de origem não especificado nunca deve ser encaminhado por um roteador IPv6.

o que a torna uma boa escolha para uma coluna N / A, como neste caso.

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

Na netstat1.60, os protocolos na saída lêem tcp6e udp6para o IPv6, que mostram melhor o que está acontecendo, por exemplo:

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

Veja também:


3

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

Por exemplo,

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

pode ser escrito como

:: 1

Mas existem regras específicas a serem seguidas nesse sentido que você pode consultar em qualquer tutorial sobre Ipv6


2

:: 1 é o host local para IPv6, como 127.0.0.1 para IPv4.

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


Para os que rejeitam: você pode comentar?
Werner Henze 23/05


0

Estou curioso para saber: o que significa ::: em Endereço Local?

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

Então ::: 111 significa um IP de :: e uma porta de 111.

:: é um endereço IPv6 em formato condensado usando a regra de que uma sequência de zeros pode ser substituída por ::. Escrito na íntegra, é equivalente a 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

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

E o que é 0.0.0.0:* e ::: * em Endereço estrangeiro?

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 o TCP, isso se aplica apenas aos soquetes que atendem às conexões de entrada. Quando "accept" é chamado para aceitar uma conexão, um soquete separado é criado com um IP remoto e uma porta definidos.

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

* Essa notação é lamentável porque significa que uma sequência exibida significa coisas diferentes no netstat para outro lugar. Na maioria dos contextos, 3FFE :: 1234: 5678 significaria o endereço IP 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678 mas na saída linst netstat significa o endereço IP 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 e a porta 5678. A versão do netstat para Windows, por contraste, envolve os endereços IPv6 entre colchetes para evitar ambiguidade.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.