Cosa è ::: nell'indirizzo locale dell'output di netstat?


37

Questo è l'output di netstat -tulpn che ottengo:

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

Sono curioso di sapere: cosa significa :::in Local Address? E cos'è 0.0.0.0:*e :::*in indirizzo estero?


3
È possibile omettere gli zeri iniziali in IPv6, in modo da lasciare solo i due punti.
Louis,

In realtà ho parlato troppo presto. Non so perché ci siano tre due punti anziché due, +1. Immagino che l'ultimo stia indicando la porta.
Louis,

Risposte:


22

Come molte altre risposte menzionano, :: rappresenta tutti gli zeri e quindi netstat può mostrare i due punti dopo un indirizzo, quindi ottieni tre punti.

Ciò che non ho visto in nessuna di queste risposte è una risposta alla domanda su cosa significhi davvero (in questo caso).

Nel caso di netstat, :: (in IPv6) o 0.0.0.0 (in IPv4) significa sostanzialmente "qualsiasi".
Quindi, il software è in ascolto sulla porta TCP 80 (la porta HTTP) su uno qualsiasi degli indirizzi.

Se hai più interfacce per schede di rete (cosa che fai, come spiegherò tra poco), è possibile che tu ascolti solo un indirizzo specifico. Ad esempio, con alcuni software, potresti fare qualcosa come far ascoltare il tuo server HTTP su una scheda di rete che utilizza Ethernet cablata, ma non rispondere a una scheda di rete che utilizza reti wireless. Se lo facessi, il tuo computer potrebbe fare qualcosa di simile ad ascoltare su IPv4 192.0.2.100:80 (o IPv6 2001: db8: abcd :: 1234: 80).

Ma, poiché stai ascoltando "::: 80", il tuo computer non sta ascoltando il traffico della porta 80 su un solo indirizzo IP in entrata, stai ascoltando il traffico della porta 80 su qualsiasi indirizzo IPv6.

Perché mai vorresti essere pignolo su quale interfaccia stai ascoltando? Bene, un modo in cui ho usato questa capacità, a volte, è di avere un computer che ascolta l'interfaccia di loopback. (Ricorda quando ho detto che hai più interfacce per schede di rete ... questo è uno dei motivi per cui l'ho detto. Immagino che tu abbia una vera connessione di rete fisica e che tu abbia anche un'interfaccia loopback. Questa è la configurazione più tipica per la maggior parte dei tipi di computer in questi giorni.) Lo faccio con il tunneling SSH. Quindi posso fare qualcosa come collegare un visualizzatore VNC locale all'estremità locale di un tunnel SSH. Avendo il tunnel SSH in ascolto sull'interfaccia di loopback, non ho bisogno di preoccuparmi che il tunnel SSH possa ascoltare il traffico proveniente da una delle interfacce di rete fisiche. Così,

In alcuni casi, 0.0.0.0 o :: significa sostanzialmente l'indirizzo "non specificato", come specificato dalla RFC 4291 sezione 2.5.2che dice "Indica l'assenza di un indirizzo". A volte l'ho visto quando il software tenta di riferirsi a un indirizzo "non valido" (come se ad un computer non sia assegnato un indirizzo, forse), dove non c'è un indirizzo specifico da visualizzare. Tuttavia, in questo caso, il :: o 0.0.0.0 fa riferimento a un indirizzo "sconosciuto". Ecco perché tutte le porte LISTENING vengono visualizzate come "sconosciute". Per una connessione stabilita, sai chi è la parte remota, perché stai comunicando con loro. Per una connessione "ASCOLTO", stai ascoltando nuove conversazioni. Quel traffico potrebbe provenire, beh, forse in qualsiasi parte del mondo. Il traffico in entrata potrebbe provenire da qualsiasi indirizzo. E, il modo in cui viene visualizzato Nestat è quello di specificare un indirizzo di tutti gli zeri. Poiché non esiste un indirizzo specifico da utilizzare,

Mi limiterò a notare che avere software in ascolto su tutte le interfacce di rete è una cosa molto comune. Alcuni software possono essere configurati per ascoltare solo un indirizzo Internet specifico o forse una scheda di rete specifica. E questo può essere un po 'più sicuro, perché quindi il software non è in ascolto dove non è previsto alcun traffico valido. Ciò potrebbe limitare la capacità di attaccare. Tuttavia, molti software non dispongono di tale opzione o tale opzione è in qualche modo sepolta / nascosta. Quindi, ascoltare su tutte le schede di rete non è una cosa terribile. È abbastanza comune E, se si desidera impedire al software di ricevere traffico su una porta di rete specifica, esistono altri modi per farlo, incluso il blocco del traffico indesiderato con un firewall. In tal caso, il firewall potrebbe bloccare il traffico, ma il server (web) potrebbe ancora ascoltare il traffico su quell'interfaccia di rete. In tal caso, il server non riceverà mai traffico su quell'interfaccia, ma netstat segnalerà comunque che il server è in ascolto (per quel traffico che non raggiungerà mai quel server). Vedere netstat segnalare che il software server è in ascolto su tutte le interfacce è molto comune, e quindi non è qualcosa di cui essere particolarmente allarmati.

Infine, menzionerò che questa domanda e questa risposta non sono specifiche di Linux. (Sto citando questo perché vedo il tag "Linux" su questa domanda.) I parametri della riga di comando mostrati, e l'output di esempio mostrato, potrebbero provenire da Linux e diversi sistemi operativi potrebbero mostrare cose leggermente diverse. Tuttavia, riguardo all'argomento di :: e 0.0.0.0, il modo in cui netstat funziona in questo senso è identico su una macchina che esegue BSD o Microsoft Windows (e presumibilmente molti altri sistemi).


8

Come altri hanno detto, è la notazione IPv6 naturale per questo contesto.

Citiamo e interpretiamo le norme pertinenti:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

http://tools.ietf.org/html/rfc5952#section-4 afferma che gli indirizzi IPv6 canonici (non solo una possibile stenografia) sono:

  • scritto in esadecimale con i caratteri a-fminuscoli.
  • raggruppati ogni 2 byte per :
  • gli 0 iniziali DEVONO essere rimossi. 0000diventa 0.
  • la sequenza più lunga di :0:0:0: DEVE essere convertita in ::. Può essere fatto solo una volta o porterebbe ad ambiguità.

Quindi :::*significa:

  • 0000:0000:0000:0000:0000:0000:0000su qualsiasi porta ( :*)
  • == 0:0:0:0:0:0:0(rimozione 0 finale)
  • == ::(contrazione zero consecutiva)

0000.0000.0000.0000.0000.0000.0000.0000: * == indirizzo non specificato

http://tools.ietf.org/html/rfc4291#section-2.5.2 definisce "indirizzo non specificato":

L'indirizzo 0: 0: 0: 0: 0: 0: 0: 0 è chiamato indirizzo non specificato. Non deve mai essere assegnato a nessun nodo. Indica l'assenza di un indirizzo. Un esempio del suo utilizzo è nel campo Indirizzo sorgente di tutti i pacchetti IPv6 inviati da un host di inizializzazione prima che abbia appreso il proprio indirizzo.

L'indirizzo non specificato non deve essere utilizzato come indirizzo di destinazione dei pacchetti IPv6 o nelle intestazioni di routing IPv6. Un pacchetto IPv6 con un indirizzo di origine non specificato non deve mai essere inoltrato da un router IPv6.

che lo rende una buona scelta per una colonna N / A come in questo caso.

Quindi non lo:: è , come afferma lo stesso documento . localhost::1

Su netstat1.60, i protocolli sull'output leggono tcp6e udp6per IPv6, che mostrano meglio cosa sta succedendo, ad esempio:

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

Guarda anche:


3

Si riferisce all'indirizzo IPv6. In IPv6 possiamo condensare una sequenza di 0usando il ::modificatore

Per esempio,

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

può essere scritto come

:: 1

Ma ci sono regole specifiche da seguire a questo proposito che puoi cercare in qualsiasi tutorial Ipv6


2

:: 1 è l'host locale per IPv6, come 127.0.0.1 per IPv4.

::: * è la versione breve di 0: 0: 1: * (IPv6 0: 0: 0, porta *), è come IPv4 0.0.0.0:*. Entrambi nella colonna dell'indirizzo esterno indicano che non esiste una colonna dell'indirizzo esterno. Nel caso delle prese di ascolto è chiaro che non esiste (ancora) un indirizzo straniero collegato. Nel caso delle prese udp normalmente non si hanno indirizzi esterni collegati, quindi anche questi sono elencati con 0.0.0.0:*.


Ai downvoter: puoi per favore commentare?
Werner Henze,


0

Sono curioso di sapere: cosa significa ::: in Local Address?

La versione linux di netstat usa una notazione di: dove l'indirizzo IP è visualizzato nudo *.

Quindi ::: 111 indica un IP di :: e una porta di 111.

:: è un indirizzo IPv6 in forma condensata che utilizza la regola che una serie di zeri può essere sostituita con ::. Scritto per intero, è equivalente a 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

Come per IPv4, l'indirizzo di tutti zeri (noto come indirizzo non specificato) viene utilizzato come valore segnaposto. Nel caso di un indirizzo locale significa che il socket è in ascolto su tutte le interfacce IPv6 (e possibilmente su tutte le interfacce IPv4, a seconda delle opzioni socket che netstat non mostra).

E cosa è 0.0.0.0:* e ::: * in indirizzo estero?

Significa che il socket non è associato a un indirizzo esterno specifico. :: o 0.0.0.0 indica un indirizzo IP non specificato (rispettivamente per IPv4 o IPv6) e * indica una porta non specificata.

Per TCP questo vale solo per i socket in ascolto delle connessioni in entrata. Quando viene chiamato "accetta" per accettare una connessione, viene creato un socket separato con un IP e una porta remoti definiti.

Per UDP non esiste il concetto di accettare connessioni. Un'applicazione associata a un socket UDP con un indirizzo esterno di ::: * utilizza la chiamata API "recvfrom" per ricevere i pacchetti e determinare da dove provengono e la chiamata API "sendto" per inviare i pacchetti a un indirizzo specifico.

* Questa notazione è sfortunata perché significa che una stringa visualizzata significa cose diverse in netstat che altrove. Nella maggior parte dei contesti 3FFE :: 1234: 5678 significherebbe l'indirizzo IP 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678 ma nell'output di netstat Linux significa che l'indirizzo IP 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 e la porta 5678. La versione windows di netstat al contrario circonda gli indirizzi IPv6 tra parentesi quadre per evitare ambiguità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.