0.0.0.0.0 e *: * representam a mesma coisa?

23

Usei o netstat (no Windows) para exibir as portas ouvidas para TCP e UDP:

insira a descrição da imagem aqui

Notei que, na coluna Endereço externo , o UDP é exibido em *:*vez de 0.0.0.0:0, esses dois valores representam a mesma coisa? Se sim, por que o UDP é exibido em *:*vez de 0.0.0.0:0?

user612473
fonte
Eu acredito que *:*é IPv6 enquanto 0.0.0.0:0é IPv4.
LPChip 01/07/19
Também notei o seguinte UDP 0.0.0.0:5355 *:*:, isso significa que os dados podem ser enviados entre IPv4 e IPv6?
user612473
veja aqui: security.stackexchange.com/questions/13724/...
pântano-de manobra
4
o equivalente de IPv6 0.0.0.0 é [::]
pântano-meneio
2
@LPChip Você está enganado. *:*não diz nada sobre a versão IP. No entanto, como o endereço local desse soquete é apenas IPv4, o endereço remoto também deve ser IPv4.
kasperd

Respostas:

12

Foi apontado que minha resposta estava errada. Como não posso excluí-lo, fornecerei o correto.

A expressão *:*significa "Qualquer endereço, qualquer porta". Todos os ouvintes UDP exibirão esta assinatura. Isso ocorre devido à natureza sem conexão do UDP.


Resposta original (incorreta). Sim e não. *:*refere-se a QUALQUER endereço IPv6. A distinção entre um endereço desconhecido / não especificado é vaga no IPv4; portanto, usamos 0.0.0.0/0 para representar qualquer host na rede, mas no IPv6 há uma diferença sutil.

Na maioria das vezes, no entanto, as pessoas costumam ::representar uma sequência contígua de 0s.

Em um endereço IPv6, qualquer sequência de zeros contíguos pode ser substituída :: por:

  • 0.0.0.0/0=> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 => ::=>*:*
  • fe80:0000:0000:0000:2000:0aff:fea7:0f7c => fe80::2000:0aff:fea7:0f7c

A representação usando caracteres curinga, no entanto, permite um controle mais preciso dos padrões de endereço. Por exemplo, ::não corresponderia fe80::2000:0aff:fea7:0f7c, mas *:*corresponderia.

Essa diferença não é realmente significativa para qualquer dispositivo que não esteja executando o roteamento, mas quando chega a hora de selecionar rotas ideais para espaços de endereço agregados, a notação curinga permite uma seleção mais flexível das redes de destino.

Frank Thomas
fonte
5
Mas você escreveu em sua resposta que *:* refers to ANY IPv6 address Aqui você diz, any..addressou seja, presumivelmente IPv4 ou IPv6. Então qual é? Está se *:*limitando ao IPv6 ou também permite o IPv4?
#
2
Os dois soquetes mencionados na pergunta são apenas para IPv4. Você pode ver isso no endereço local atribuído a cada soquete. Como tal, mencionar o IPv6 não é relevante para a questão.
kasperd
7
O IPv6 não é relevante para esta questão.
Hbbs
8
Esta resposta está totalmente errada para a pergunta.
Brad
3
Como observa o comentário de kasperd (e também o comentário de hobbs ), o IPv6 não está relacionado à questão. A pergunta é sobre o que vemos na coluna Endereço externo, que corresponde ao que está na mesma linha na coluna Endereço local, que é IPv4. (Embora, com alguns sistemas operacionais, escutando em uma família de endereços / IP-versão pode tipicamente auto-escutar em outra família de endereços.)
TOOGAM
15

O /refere-se à máscara de sub-rede, que faz parte da camada IP.

A :refere-se a uma porta que é parte da camada de transporte.

Para o TCP, faz sentido que exista um fim remoto para uma conexão.

O UDP, por não ter conexão, não faz sentido mostrar um endereço externo.

Meu pressentimento é que ele sempre mostraria o curinga para o UDP e que existe potencialmente para tornar a análise da saída um pouco mais amigável ou para mostrar se você estiver usando o IPv4 / 6:

IPV4 "*:*" vs IPV6 "[::]:*"

Luke Exton
fonte
Eu só estava dizendo isso para alguns amigos. Você pode exibir PORTS de escuta, mas exibir sessões remotas reais quando não houver uma provavelmente é a razão pela qual ela é exibida como *:*para sessões UDP remotas inexistentes. Estou de acordo com você aqui.
NotAdmin Dave
6

Nos dois casos, a informação é basicamente sem sentido, mas indica mais ou menos a mesma coisa.

Sua primeira linha é um soquete de escuta TCP. A coluna de endereço local indica o endereço e a porta em que está aceitando conexões, e a coluna de endereço remoto não significa nada porque um soquete de escuta ainda não possui uma extremidade remota da conexão. Um soquete TCP conectado mostraria o endereço da outra extremidade da conexão nessa coluna, mas para um soquete de escuta, ele decide exibir um endereço e uma porta totalmente zero.

Sua segunda linha é um soquete UDP. UDP é um protocolo sem conexão, o que significa que ele envia e recebe pacotes sem a noção de quem está conectado a quem, se o pacote faz parte de uma conversa existente ou se os dados chegaram do nada. A coluna de endereço local tem o mesmo significado que para o TCP, e a coluna de endereço remoto não faz sentido porque um soquete UDP pode ter um ponto, muitos pontos ou nenhum ponto a qualquer momento. (Na verdade, o POSIX tem a noção de um "soquete UDP conectado", mas isso está indo um pouco longe).

Agora a pergunta: por que eles são exibidos de maneira diferente? Parece ser nada mais que uma peculiaridade do código netstat do Windows. O netstat do Linux (net-tools) é exibido 0.0.0.0:*na extremidade remota dos soquetes de escuta TCP e UDP (para IPv4; é exibido :::*para IPv6), que é diferente de qualquer exemplo no Windows, mas pelo menos é consistente no mesmo programa. Talvez o Windows esteja buscando uma distinção semântica entre "a ser preenchido mais tarde" no caso do TCP e "aberto a qualquer coisa" no caso do UDP, mas, com a mesma probabilidade, os dois bits de código foram escritos por duas pessoas diferentes sem preocupação particular com a consistência.

hobbs
fonte
+1 para o início do quarto parágrafo. 0.0.0.0 possui alguma documentação: Um endereço de todos os zeros é o endereço "não especificado" (de acordo com o IPv6 Addressing RFC 4291 sec 2.5.2 ), geralmente aplicado a endereços desconhecidos. A página 4 da RFC 1700 menciona "Só pode ser usado como endereço de origem" e a seção "a" da RFC 1122 # página-29 "descreve" o uso adicional. ( minha resposta sobre ::: menciona 0.0.0.0)
TOOGAM
O 0.0.0.0:0valor na coluna Endereço externo significa que qualquer endereço IP e número de porta podem enviar dados para esse soquete? e se esse valor fosse, por exemplo 127.0.0.0:12345, isso significa que apenas o endereço IP 127.0.0.0com o número da porta 12345pode enviar dados para esse soquete e mais ninguém?
Tom
6

A diferença é simplesmente notacional.

O Netstat no Windows usa 0.0.0.0:0para representar uma idéia abstrata de "qualquer endereço e porta remotos" para um ouvinte local IPv4 TCP e *:*para um ouvinte UDP. Para IPv6, o endereço remoto é indicado por [::]:0para TCP e *:*UDP.

No OS X, *.*é usado para TCP e UDP, seja IPv4 ou IPv6 (observe que o OS X usa pontos para separar endereço e porta). O Linux usa 0.0.0.0:*para IPv4 e :::*IPv6, com os dois primeiros dois pontos representando a abreviação de todos os endereços IPv6 e os terceiros dois pontos o separador entre o endereço e a porta.

Segundo o IIRC de algo que ouvi ou li há muito tempo, acho que os emparelhamentos UDP podem aparecer, mas geralmente não aparecem porque são destruídos após a conclusão e as conexões UDP geralmente são muito curtas, com duração de milissegundos ou menos. Eu nunca vi isso, no entanto, para que pudesse estar incorreto.

NetworkLlama
fonte