web-dev-qa-db-fra.com

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

Voici le résultat de netstat -tulpn que je reçois:

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 Adresse locale? Et que sont 0.0.0.0:* et :::* dans Adresse étrangère?

33
Pradipta

Comme le mentionnent de nombreuses autres réponses, :: représente tous les zéros, puis Netstat peut afficher un 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 savoir 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".
Le logiciel écoute donc sur TCP le port 80 (le port HTTP) de n’importe quelle adresse.

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 une adresse spécifique. Par exemple, avec certains logiciels, vous pouvez, par exemple, faire écouter votre serveur HTTP sur une carte réseau utilisant un réseau Ethernet câblé, mais ne pas répondre à une carte réseau utilisant un réseau sans fil. Si vous agissiez ainsi, votre ordinateur ferait peut-être quelque chose comme listen 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 surtoute adresseIPv6.

Pourquoi voudriez-vous être sélectif quant à l'interface sur laquelle vous écoutez? Eh bien, une des manières que j’ai utilisée cette capacité, parfois, est d’avoir un ordinateur écoutant l’interface de bouclage. (Rappelez-vous quand j'ai dit que vous avez plusieurs interfaces de carte réseau ... c'est l'une des raisons pour lesquelles j'ai dit cela. Je suppose que vous avez une vraie connexion réseau physique et que vous avez également une interface de bouclage. C'est la configuration la plus typique pour la plupart des types d’ordinateurs de nos jours.) Je le fais avec le tunneling SSH. Ensuite, je peux faire quelque chose comme établir une connexion entre un visualiseur VNC local et l'extrémité locale d'un tunnel SSH. En faisant écouter le tunnel SSH sur l'interface de bouclage, je n'ai pas à craindre que le tunnel SSH puisse écouter le trafic provenant de l'une des interfaces réseau physiques. Ainsi, le tunnel SSH ne verra que le trafic réseau provenant de mon ordinateur.

Dans certains cas, 0.0.0.0 ou :: signifie fondamentalement l'adresse "non spécifiée", comme spécifié par RFC 4291 section 2.5.2 qui indique "Cela indique l'absence d'adresse. " J'ai parfois vu cela quand un logiciel tente de faire référence à une adresse "non valide" (comme si un ordinateur n'a pas d'adresse assignée, peut-être), où il n'y a pas d'adresse spécifique à afficher. Cependant, dans ce cas, le :: ou 0.0.0.0 fait référence à une adresse "inconnue". C’est pourquoi tous les ports LISTENING s’affichent comme "inconnus". Pour une connexion établie, vous savez qui est l'extrémité distante, car vous communiquez avec eux. Pour une connexion "LISTENING", vous êtes à l’écoute de toutes nouvelles conversations. Ce trafic pourrait provenir de, peut-être n'importe où dans le monde. Le trafic entrant peut provenir de n’importe quelle adresse. Et la façon dont nestat l'affiche consiste à spécifier une adresse de tous les zéros. Comme il n'y a pas d'adresse spécifique à utiliser, l'adresse "non spécifiée" semble tout à fait appropriée.

Je terminerai en notant qu’avoir des logiciels à écouter 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, voire une carte réseau spécifique. Et cela peut être un peu plus sécurisé, car le logiciel n’écoute pas alors aucun trafic valide n’est prévu. Cela pourrait limiter la capacité d'attaquer. Cependant, de nombreux logiciels ne disposent pas d'une telle option, ou une telle option est quelque peu enterrée/cachée. Donc, écouter sur toutes les cartes réseau n’est pas une chose terrible. C'est assez commun. Et si vous souhaitez empêcher les logiciels de recevoir du trafic sur un port réseau spécifique, vous pouvez le faire de différentes manières, notamment en bloquant le trafic indésirable à l'aide d'un pare-feu. Si vous procédez ainsi, le pare-feu risque de 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 tout de même que le serveur est à l'écoute (pour ce trafic qui ne parviendra jamais à ce serveur). Voir netstat signaler que le logiciel serveur écoute sur toutes les interfaces est très courant et ne doit donc pas être alarmé.

Enfin, je mentionnerai que cette question et cette réponse ne sont pas spécifiques à Linux. (Je mentionne cela parce que la balise "Linux" apparaît sur cette question.) Les paramètres de ligne de commande affichés, ainsi que l'exemple de sortie illustré, peuvent provenir de Linux et des systèmes d'exploitation différents peuvent afficher des éléments légèrement différents. Toutefois, en ce qui concerne :: et 0.0.0.0, le fonctionnement de netstat à cet égard est identique sur un ordinateur exécutant BSD ou Microsoft Windows (et probablement de nombreux autres systèmes).

21
TOOGAM

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

Citons et interprétons les normes pertinentes:

::: * == 0000.0000.00000000000000000000000000: *

http://tools.ietf.org/html/rfc5952#section-4 indique que le canonique ( les adresses IPv6 sont les suivantes:

  • écrit en hexadécimal avec les caractères a-f minuscule.
  • groupé tous les 2 octets par :
  • les 0 premiers DOIVENT être supprimés. 0000 devient 0.
  • la plus longue séquence de :0:0:0:DOIT être convertie en ::. Cela ne peut être fait qu'une fois, ou créerait une ambiguïté.

Donc, :::* signifie:

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

0000.0000.00000000000000000000000000: * == 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: 0 est appelée adresse non spécifiée. Il ne doit jamais être attribué à un nœud. Il indique l'absence d'adresse. Un exemple de son utilisation est dans le champ Adresse source de tous les paquets IPv6 envoyés par un hôte en cours d'initialisation avant qu'il ait appris sa propre adresse.

L'adresse non spécifiée ne doit pas être utilisée comme adresse de destination des paquets IPv6 ni 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.

Donc, :: est et non localhost, ce que le même document dit est à ::1.

Sur netstat 1.60, les protocoles de la sortie lisent tcp6 et udp6 pour IPv6, ce qui montre mieux ce qui se passe, par exemple:

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

Voir également:

Il fait référence à l'adresse IPv6. En IPv6, nous pouvons condenser une séquence de 0 en utilisant 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.

3
anakin

:: 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:*. Ces deux éléments dans la colonne d'adresse étrangère signifient qu'il n'y a pas de colonne d'adresse étrangère. Dans le cas des sockets d’écoute, il est clair qu’il n’ya 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:*.

2
Werner Henze

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

En gros, vous avez des services qui écoutent et se connectent aux services localement.

0
Jason

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

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

So ::: 111 signifie une adresse 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 ::. Ecrit en entier, il est équivalent à 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

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

Et que sont 0.0.0.0:* et ::: * dans Foreign Address?

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 qui écoutent les connexions entrantes. Lorsque "accept" est appelé pour accepter une connexion, une socket distincte est créée avec une adresse IP et un port distants 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 :: :: * utilise l'appel d'API "recvfrom" pour recevoir les paquets et déterminer d'où ils viennent, ainsi que l'appel d'API "sendto" pour envoyer des paquets à une adresse spécifique.

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

0
plugwash