Qu'est-ce que ::: dans l'adresse locale de la sortie netstat?

37

Voici la sortie de netstat -tulpn que j'obtiens:

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

Je suis curieux de savoir: que signifie :::dans l'adresse locale? Et qu'est-ce que 0.0.0.0:*et :::*à l'étranger?

Pradipta
la source
3
Vous pouvez omettre les zéros non significatifs dans IPv6, de sorte qu'il ne reste que les deux-points.
Louis
En fait, j'ai parlé trop tôt. Je ne sais pas pourquoi il y a trois deux points au lieu de deux, +1. Je suppose que le dernier indique le port.
Louis

Réponses:

22

Comme la plupart des autres réponses le mentionnent, :: représente tous les zéros, puis netstat peut afficher deux points après une adresse, vous obtenez donc trois deux points.

Ce que je n'ai vu dans aucune de ces réponses est une réponse à la question de ce que cela signifie vraiment (dans ce cas).

Dans le cas de netstat, :: (en IPv6) ou 0.0.0.0 (en IPv4) signifie fondamentalement "tout".
Ainsi, le logiciel écoute sur le port TCP 80 (le port HTTP) sur l'une des adresses.

Si vous avez plusieurs interfaces de carte réseau (ce que vous faites, comme je l'expliquerai dans un instant), il vous est possible d'écouter uniquement sur une adresse spécifique. Par exemple, avec certains logiciels, vous pourriez faire quelque chose comme faire écouter votre serveur HTTP sur une carte réseau qui utilise Ethernet câblé, mais ne pas répondre à une carte réseau qui utilise un réseau sans fil. Si vous avez fait cela, alors votre ordinateur pourrait faire quelque chose comme écouter sur IPv4 192.0.2.100:80 (ou IPv6 2001: db8: abcd :: 1234: 80).

Mais, puisque vous écoutez "::: 80", votre ordinateur n'écoute pas le trafic du port 80 sur une seule adresse IP entrante, vous écoutez le trafic du port 80 sur n'importe quelle adresse IPv6.

Pourquoi voudriez-vous jamais être pointilleux sur quelle interface vous écoutez? Eh bien, une façon dont j'ai utilisé cette capacité, parfois, est d'avoir un ordinateur pour écouter l'interface de bouclage. (N'oubliez pas que lorsque j'ai dit que vous disposiez de plusieurs interfaces de carte réseau ... c'est une des raisons pour lesquelles j'ai dit cela. Je suppose que vous disposez d'une véritable connexion réseau physique et que vous avez également une interface de bouclage. C'est la configuration la plus courante pour la plupart des types d'ordinateurs de nos jours.) Je le fais avec le tunneling SSH. Ensuite, je peux faire quelque chose comme connecter un visualiseur VNC local à l'extrémité locale d'un tunnel SSH. En faisant écouter le tunnel SSH sur l'interface de bouclage, je n'ai pas à m'inquiéter que le tunnel SSH puisse écouter le trafic provenant de l'une des interfaces réseau physiques. Alors,

Dans certains cas, 0.0.0.0 ou :: signifie fondamentalement l'adresse "non spécifiée", comme spécifié par la RFC 4291 section 2.5.2qui dit "Cela indique l'absence d'adresse". J'ai parfois vu cela quand un logiciel essaie de se référer à une adresse "invalide" (comme si un ordinateur n'a pas d'adresse attribuée, peut-être), où il n'y a pas d'adresse spécifique à afficher. Cependant, dans ce cas, :: ou 0.0.0.0 fait référence à une adresse "inconnue". C'est pourquoi tous les ports LISTENING apparaissent comme "inconnus". Pour une connexion établie, vous savez qui est l'extrémité distante, car vous communiquez avec eux. Pour une connexion "À L'ÉCOUTE", vous écoutez de nouvelles conversations. Ce trafic pourrait provenir de n'importe où dans le monde. Le trafic entrant peut provenir de n'importe quelle adresse. Et, la façon dont nestat affiche c'est de spécifier une adresse de tous les zéros. Puisqu'il n'y a pas d'adresse spécifique à utiliser,

Je terminerai en notant que l'écoute de logiciels sur toutes les interfaces réseau est une chose très courante. Certains logiciels peuvent être configurés pour écouter uniquement une adresse Internet spécifique, ou peut-être une carte réseau spécifique. Et cela peut être un peu plus sécurisé, car le logiciel n'écoute pas là où aucun trafic valide n'est attendu. Cela pourrait limiter une capacité d'attaque. Cependant, beaucoup de logiciels n'ont pas une telle option, ou une telle option est quelque peu enterrée / cachée. Ainsi, écouter sur toutes les cartes réseau n'est pas une chose super terrible. C'est assez courant. Et, si vous souhaitez empêcher les logiciels de recevoir du trafic sur un port réseau spécifique, il existe d'autres moyens d'y parvenir, notamment le blocage du trafic indésirable avec un pare-feu. Si vous faites cela, le pare-feu peut bloquer le trafic, mais le serveur (Web) peut toujours écouter le trafic sur cette interface réseau. Dans ce cas, le serveur n'obtiendra jamais de trafic sur cette interface, mais netstat signalera toujours que le serveur écoute (pour ce trafic qui n'atteindra jamais ce serveur). Voir netstat rapporter que le logiciel serveur écoute sur toutes les interfaces est très courant, et donc ce n'est pas quelque chose de particulièrement alarmant.

Enfin, je mentionnerai que cette question et cette réponse ne sont pas spécifiques à Linux. (Je mentionne cela parce que je vois la balise "Linux" sur cette question.) Les paramètres de ligne de commande affichés et l'exemple de sortie illustré peuvent provenir de Linux et différents systèmes d'exploitation peuvent afficher des choses légèrement différentes. Cependant, sur le sujet de :: et 0.0.0.0, la façon dont netstat fonctionne à cet égard est identique sur une machine exécutant BSD ou Microsoft Windows (et probablement de nombreux autres systèmes).

TOOGAM
la source
8

Comme d'autres l'ont dit, c'est la notation IPv6 naturelle pour ce contexte.

Citons et interprétons les normes pertinentes:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

http://tools.ietf.org/html/rfc5952#section-4 indique que les adresses IPv6 canoniques (et pas seulement un raccourci possible) sont:

  • écrit en hexadécimal avec les caractères en a-fminuscules.
  • regroupés tous les 2 octets par :
  • les premiers 0 DOIVENT être supprimés. 0000devient 0.
  • la séquence la plus longue de :0:0:0: DOIT être convertie en ::. Ne peut être fait qu'une seule fois ou entraînerait une ambiguïté.

Cela :::*signifie donc :

  • 0000:0000:0000:0000:0000:0000:0000sur n'importe quel port ( :*)
  • == 0:0:0:0:0:0:0(suppression à la fin de 0)
  • == ::(contraction zéro consécutive)

0000.0000.0000.0000.0000.0000.0000.0000: * == adresse non spécifiée

http://tools.ietf.org/html/rfc4291#section-2.5.2 définit "l'adresse non spécifiée":

L'adresse 0: 0: 0: 0: 0: 0: 0: 0 est appelée l'adresse non spécifiée. Il ne doit jamais être affecté à aucun nœud. Il indique l'absence d'adresse. Un exemple de son utilisation se trouve dans le champ Adresse source de tout paquet IPv6 envoyé par un hôte d'initialisation avant qu'il n'ait appris sa propre adresse.

L'adresse non spécifiée ne doit pas être utilisée comme adresse de destination des paquets IPv6 ou dans les en-têtes de routage IPv6. Un paquet IPv6 avec une adresse source non spécifiée ne doit jamais être transmis par un routeur IPv6.

ce qui en fait un bon choix pour une colonne N / A comme dans ce cas.

Ce ::n'est pas le cas localhost , ce que dit le même document ::1.

Sur netstat1.60, les protocoles en sortie lisent tcp6et udp6pour IPv6, qui montrent mieux ce qui se passe, par exemple:

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

Voir également:

Ciro Santilli 改造 中心 六四 事件
la source
3

Il fait référence à l'adresse IPv6. En IPv6, nous pouvons condenser une séquence de en 0utilisant le ::modificateur

Par exemple,

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

peut être écrit comme

::1

Mais il y a des règles spécifiques à suivre à cet égard que vous pouvez consulter sur n'importe quel tutoriel Ipv6

anakin
la source
2

:: 1 est l'hôte local pour IPv6, comme 127.0.0.1 pour IPv4.

::: * est la version courte de 0: 0: 1: * (IPv6 0: 0: 0, port *), c'est comme IPv4 0.0.0.0:*. Les deux dans la colonne d'adresse étrangère signifient qu'il n'y a pas de colonne d'adresse étrangère. Dans le cas des prises d'écoute, il est clair qu'il n'y a pas (encore) d'adresse étrangère connectée. Dans le cas des sockets udp, vous n'avez normalement pas d'adresses étrangères connectées, elles sont donc également répertoriées avec 0.0.0.0:*.

Werner Henze
la source
Aux votants: pouvez-vous commenter?
Werner Henze
0

::: * Serait votre hôte local / boucle en IPv6 :)

Fondamentalement, vous disposez de services d'écoute et de connexion aux services localement.

Jason
la source
1
Si j'interprète correctement tools.ietf.org/html/rfc4291#section-2.5.2 , ce ::n'est pas du bouclage: c'est l'adresse non spécifiée, et le bouclage est à ::1.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Je suis d'accord avec Ciro: le :: 1 est en boucle, pas ::: *.
TOOGAM
0

Je suis curieux de savoir: que signifie ::: dans l'adresse locale?

La version linux de netstat utilise une notation de: où l'adresse IP est affichée nue *.

So ::: 111 signifie une IP de :: et un port de 111.

:: est une adresse IPv6 sous forme condensée utilisant la règle selon laquelle une série de zéros peut être remplacée par ::. Écrite en entier, elle équivaut à 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

Comme avec IPv4, l'adresse tous les zéros (connue sous le nom d'adresse non spécifiée) est utilisée comme valeur d'espace réservé. Dans le cas d'une adresse locale, cela signifie que le socket écoute sur toutes les interfaces IPv6 (et éventuellement toutes les interfaces IPv4 également en fonction des options de socket que netstat n'affiche pas).

Et qu'est-ce que 0.0.0.0:* et ::: * dans une adresse étrangère?

Cela signifie que le socket n'est pas lié à une adresse étrangère spécifique. :: ou 0.0.0.0 indique une adresse IP non spécifiée (pour IPv4 ou IPv6 respectivement) et * indique un port non spécifié.

Pour TCP, cela s'applique uniquement aux sockets écoutant les connexions entrantes. Lorsque "accepter" est appelé pour accepter une connexion, un socket séparé est créé avec une adresse IP distante et un port définis.

Pour UDP, il n'y a pas de concept d'acceptation de connexions. Une application liée à un socket UDP avec une adresse étrangère de ::: * utilise l'appel d'API "recvfrom" pour recevoir les paquets et déterminer d'où ils viennent et l'appel d'API "sendto" pour envoyer les paquets à une adresse spécifique.

* Cette notation est regrettable car elle signifie qu'une chaîne affichée signifie différentes choses dans netstat qu'ailleurs. Dans la plupart des contextes, 3FFE :: 1234: 5678 signifierait l'adresse IP 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678 mais dans la sortie linux netstat, cela signifie l'adresse IP 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 et le port 5678. La version Windows de netstat en revanche entoure les adresses IPv6 entre crochets pour éviter toute ambiguïté.

plugwash
la source