Was ist ::: in der lokalen Adresse der netstat-Ausgabe?


37

Dies ist die Ausgabe von netstat -tulpn, die ich erhalte:

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

Ich bin gespannt: Was bedeutet die :::lokale Adresse? Und was ist 0.0.0.0:*und :::*in der Auslandsadresse?


3
Sie können führende Nullen in IPv6 weglassen, sodass nur der Doppelpunkt übrig bleibt.
Louis

Eigentlich habe ich zu früh gesprochen. Ich weiß nicht, warum es drei Doppelpunkte statt zwei gibt, +1. Ich schätze, der letzte zeigt den Hafen an.
Louis

Antworten:


22

Wie in vielen anderen Antworten erwähnt, steht :: für alle Nullen, und netstat zeigt möglicherweise nach einer Adresse einen Doppelpunkt an, sodass Sie drei Doppelpunkte erhalten.

Was ich in keiner dieser Antworten gesehen habe, ist eine Antwort auf die Frage, was das wirklich bedeutet (in diesem Fall).

Im Falle von netstat bedeutet :: (in IPv6) oder 0.0.0.0 (in IPv4) grundsätzlich "any".
Daher überwacht die Software den TCP-Port 80 (den HTTP-Port) auf einer der Adressen.

Wenn Sie über mehrere Netzwerkkartenschnittstellen verfügen (wie ich gleich erläutere), können Sie möglicherweise nur eine bestimmte Adresse abhören. Bei einigen Softwareprogrammen können Sie Ihren HTTP-Server beispielsweise dazu bringen, eine Netzwerkkarte abzuhören, die kabelgebundenes Ethernet verwendet, aber nicht auf eine Netzwerkkarte mit kabellosem Netzwerk reagiert. Wenn Sie dies getan haben, kann Ihr Computer beispielsweise IPv4 192.0.2.100:80 (oder IPv6 2001: db8: abcd :: 1234: 80) überwachen.

Da Sie jedoch "::: 80" hören, wartet Ihr Computer nicht nur mit einer eingehenden IP-Adresse auf Port 80-Datenverkehr, sondern mit einer beliebigen IPv6-Adresse auf Port 80-Datenverkehr .

Warum sollten Sie jemals wählerisch sein, welches Interface Sie hören? Nun, eine Möglichkeit, wie ich diese Funktion manchmal genutzt habe, besteht darin, einen Computer die Loopback-Schnittstelle abhören zu lassen. (Denken Sie daran, als ich sagte, dass Sie mehrere Netzwerkkartenschnittstellen haben ... dies ist ein Grund, warum ich das gesagt habe. Ich vermute, Sie haben eine echte physische Netzwerkverbindung und Sie haben auch eine Loopback-Schnittstelle. Dies ist das typischste Setup für Die meisten Computertypen heutzutage.) Ich mache das mit SSH-Tunneling. Dann kann ich so etwas wie einen lokalen VNC-Viewer mit dem lokalen Ende eines SSH-Tunnels verbinden. Da der SSH-Tunnel die Loopback-Schnittstelle überwacht, muss ich mir keine Sorgen machen, dass der SSH-Tunnel möglicherweise den Datenverkehr überwacht, der von einer der physischen Netzwerkschnittstellen eingeht. So,

In einigen Fällen bedeutet 0.0.0.0 oder :: im Grunde genommen die "nicht angegebene" Adresse, wie in RFC 4291, Abschnitt 2.5.2 angegebendie sagt "Es zeigt das Fehlen einer Adresse." Ich habe dies manchmal gesehen, wenn Software versucht, auf eine "ungültige" Adresse zu verweisen (z. B. wenn einem Computer möglicherweise keine Adresse zugewiesen ist), an der keine bestimmte Adresse angezeigt werden kann. In diesem Fall bezieht sich :: oder 0.0.0.0 jedoch auf eine "unbekannte" Adresse. Aus diesem Grund werden alle LISTENING-Ports als "unbekannt" angezeigt. Bei einer bestehenden Verbindung wissen Sie, wer die Gegenstelle ist, weil Sie mit ihnen kommunizieren. Bei einer "LISTENING" -Verbindung warten Sie auf brandneue Gespräche. Dieser Verkehr könnte von irgendwo auf der Welt kommen. Der eingehende Verkehr kann von jeder Adresse kommen. Und die Art und Weise, wie nestat anzeigt, besteht darin, eine Adresse mit allen Nullen anzugeben. Da keine bestimmte Adresse zu verwenden ist,

Abschließend möchte ich darauf hinweisen, dass es sehr häufig vorkommt, dass Software alle Netzwerkschnittstellen überwacht. Manche Software kann so konfiguriert werden, dass nur eine bestimmte Internetadresse oder möglicherweise eine bestimmte Netzwerkkarte abgehört wird. Und das kann ein bisschen sicherer sein, weil die Software dann nicht lauscht, wenn kein gültiger Datenverkehr erwartet wird. Das könnte die Angriffsfähigkeit einschränken. Eine Menge Software hat jedoch keine solche Option, oder eine solche Option ist etwas versteckt. Das Abhören aller Netzwerkkarten ist also keine schreckliche Sache. Es ist ziemlich verbreitet. Wenn Sie verhindern möchten, dass Software Datenverkehr über einen bestimmten Netzwerkport empfängt, gibt es andere Möglichkeiten, um dies zu erreichen, z. B. das Blockieren von unerwünschtem Datenverkehr mit einer Firewall. In diesem Fall blockiert die Firewall möglicherweise den Datenverkehr. Möglicherweise wartet der (Web-) Server jedoch weiterhin auf Datenverkehr auf dieser Netzwerkschnittstelle. In diesem Fall erhält der Server niemals Datenverkehr über diese Schnittstelle, aber netstat meldet weiterhin, dass der Server empfangsbereit ist (für den Datenverkehr, der diesen Server niemals erreicht). Es ist sehr verbreitet, den netstat-Bericht zu sehen, dass die Serversoftware alle Schnittstellen überwacht, und es ist daher nicht besonders alarmierend.

Abschließend möchte ich erwähnen, dass diese Frage und diese Antwort nicht Linux-spezifisch sind. (Ich erwähne dies, weil ich das "Linux" -Tag in dieser Frage sehe.) Die angezeigten Befehlszeilenparameter und die gezeigte Beispielausgabe stammen möglicherweise von Linux, und verschiedene Betriebssysteme zeigen möglicherweise etwas andere Dinge an. Bezüglich des Themas :: und 0.0.0.0 ist die Funktionsweise von netstat in dieser Hinsicht jedoch auf einem Computer mit BSD oder Microsoft Windows (und vermutlich vielen anderen Systemen) identisch.


8

Wie andere gesagt haben, ist dies die natürliche IPv6-Notation für diesen Kontext.

Zitieren und interpretieren wir die relevanten Standards:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

Laut http://tools.ietf.org/html/rfc5952#section-4 lauten die kanonischen (nicht nur möglichen) IPv6-Adressen:

  • hexadezimal mit a-fKleinbuchstaben geschrieben.
  • alle 2 Bytes gruppiert von :
  • führende Nullen MÜSSEN entfernt werden. 0000wird 0.
  • Die längste Sequenz von :0:0:0: MUSS in konvertiert werden ::. Kann nur einmal durchgeführt werden oder würde zu Mehrdeutigkeiten führen.

Also :::*heißt:

  • 0000:0000:0000:0000:0000:0000:0000an jedem Port ( :*)
  • == 0:0:0:0:0:0:0(Entfernung nach 0)
  • == ::(aufeinanderfolgende Nullkontraktion)

0000.0000.0000.0000.0000.0000.0000.0000: * == nicht angegebene Adresse

http://tools.ietf.org/html/rfc4291#section-2.5.2 definiert die "nicht angegebene Adresse":

Die Adresse 0: 0: 0: 0: 0: 0: 0: 0 wird als nicht spezifizierte Adresse bezeichnet. Es darf keinem Knoten zugewiesen werden. Es zeigt das Fehlen einer Adresse an. Ein Beispiel für seine Verwendung ist das Feld Quelladresse aller IPv6-Pakete, die von einem initialisierenden Host gesendet werden, bevor er seine eigene Adresse gelernt hat.

Die nicht angegebene Adresse darf nicht als Zieladresse von IPv6-Paketen oder in IPv6-Routing-Headern verwendet werden. Ein IPv6-Paket mit einer nicht angegebenen Quelladresse darf niemals von einem IPv6-Router weitergeleitet werden.

Das macht es zu einer guten Wahl für eine N / A-Spalte wie in diesem Fall.

So ::ist nicht localhost , was das gleiche Dokument sagt ist ::1.

Auf netstat1,60 lesen die Protokolle über die Ausgabe tcp6und udp6für IPv6, das besser zeigen , was vor sich geht, zum Beispiel:

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

Siehe auch:


3

Es bezieht sich auf die IPv6-Adresse. In IPv6 können wir eine Sequenz von 0's mit dem ::Modifikator komprimieren

Beispielsweise,

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

kann geschrieben werden als

:: 1

In diesem Zusammenhang sind jedoch bestimmte Regeln zu beachten, die Sie in jedem Ipv6-Tutorial nachschlagen können


2

:: 1 ist der Localhost für IPv6, wie 127.0.0.1 für IPv4.

::: * ist die Kurzversion von 0: 0: 1: * (IPv6 0: 0: 0, Port *), sie ähnelt IPv4 0.0.0.0:*. Beides in der Fremdadressenspalte bedeutet, dass keine Fremdadressenspalte vorhanden ist. Bei den Listening-Buchsen ist klar, dass (noch) keine Fremdadresse angeschlossen ist. Bei den udp-Sockets haben Sie normalerweise keine Fremdadressen angeschlossen, daher werden diese auch mit 0.0.0.0:* aufgelistet.


An die Downvoter: Kannst du bitte einen Kommentar abgeben?
Werner Henze

0

::: * Wäre dein localhost / loop zurück in IPv6 :)

Grundsätzlich haben Sie Dienste zu hören und eine Verbindung zu Diensten vor Ort.


1
Wenn ich tools.ietf.org/html/rfc4291#section-2.5.2 richtig interpretiere , ::handelt es sich nicht um ein Loopback: Es handelt sich um die nicht angegebene Adresse, und das Loopback befindet sich auf ::1.
Ciro Santilli

Ich stimme Ciro zu: Die :: 1 ist Loopback, nicht ::: *.
TOOGAM

0

Ich bin gespannt: Was bedeutet ::: in der lokalen Adresse?

Die Linux-Version von netstat verwendet die Notation: wobei die IP-Adresse ohne * angezeigt wird.

Also ::: 111 bedeutet eine IP von :: und einen Port von 111.

:: ist eine IPv6-Adresse in komprimierter Form mit der Regel, dass ein Lauf von Nullen durch :: ersetzt werden kann. Vollständig ausgeschrieben entspricht es 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

Wie bei IPv4 wird die Adresse mit allen Nullen (als nicht angegebene Adresse bezeichnet) als Platzhalterwert verwendet. Bei einer lokalen Adresse bedeutet dies, dass der Socket alle IPv6-Schnittstellen überwacht (und möglicherweise auch alle IPv4-Schnittstellen, abhängig von den Socket-Optionen, die netstat nicht anzeigt).

Und was ist 0.0.0.0:* und ::: * in der fremden Adresse?

Dies bedeutet, dass der Socket nicht an eine bestimmte Fremdadresse gebunden ist. :: oder 0.0.0.0 geben eine nicht spezifizierte IP-Adresse an (für IPv4 bzw. IPv6) und * gibt einen nicht spezifizierten Port an.

Für TCP gilt dies nur für Sockets, die auf eingehende Verbindungen warten. Wenn "accept" aufgerufen wird, um eine Verbindung zu akzeptieren, wird ein separater Socket mit einer definierten Remote-IP und einem definierten Remote-Port erstellt.

Für UDP gibt es kein Konzept zum Akzeptieren von Verbindungen. Eine Anwendung, die an einen UDP-Socket mit der Fremdadresse ::: * gebunden ist, verwendet den API-Aufruf "recvfrom", um Pakete zu empfangen und deren Herkunft zu ermitteln, und den API-Aufruf "sendto", um Pakete an eine bestimmte Adresse zu senden.

* Diese Notation ist unglücklich, da sie bedeutet, dass eine angezeigte Zeichenfolge in netstat andere Bedeutungen hat als anderswo. In den meisten Kontexten würde 3FFE :: 1234: 5678 die IP-Adresse 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678 bedeuten, aber in der Linux-Netstat-Ausgabe die IP-Adresse 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 und der Port 5678. Die Windows-Version von netstat dagegen umgibt IPv6-Adressen in eckigen Klammern, um Mehrdeutigkeiten zu vermeiden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.