¿Qué es ::: en la dirección local de salida de netstat?

37

Esta es la salida de netstat -tulpn que obtengo:

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

Tengo curiosidad por saber: ¿qué significa :::en dirección local? ¿Y qué es 0.0.0.0:*y :::*en dirección extranjera?

Pradipta
fuente
3
Puede omitir los ceros a la izquierda en IPv6, de modo que simplemente salga del colon.
Louis
En realidad hablé demasiado pronto. No sé por qué hay tres puntos en lugar de dos, +1. Supongo que el último indica el puerto.
Louis

Respuestas:

22

Como muchas de las otras respuestas mencionan, :: representa todos los ceros, y luego netstat puede mostrar dos puntos después de una dirección, entonces obtienes tres puntos.

Lo que no vi en ninguna de estas respuestas es una respuesta a la pregunta sobre lo que realmente significa (en este caso).

En el caso de netstat, :: (en IPv6) o 0.0.0.0 (en IPv4) básicamente significa "cualquiera".
Entonces, el software está escuchando en el puerto TCP 80 (el puerto HTTP) en cualquiera de las direcciones.

Si tiene varias interfaces de tarjeta de red (lo cual tiene, como explicaré en un momento), es posible que escuche solo en una dirección específica. Por ejemplo, con algún software, podría hacer algo como hacer que su servidor HTTP escuche en una tarjeta de red que utiliza Ethernet con cable, pero no responder a una tarjeta de red que utiliza redes inalámbricas. Si hizo eso, entonces su computadora podría hacer algo como escuchar en IPv4 192.0.2.100:80 (o IPv6 2001: db8: abcd :: 1234: 80).

Pero, como está escuchando "::: 80", su computadora no está escuchando el tráfico del puerto 80 en una sola dirección IP entrante, está escuchando el tráfico del puerto 80 en cualquier dirección IPv6.

¿Por qué querrías ser quisquilloso sobre qué interfaz estás escuchando? Bueno, una forma en que he usado esta capacidad, a veces, es hacer que una computadora escuche la interfaz loopback. (Recuerde que cuando dije que tenía múltiples interfaces de tarjeta de red ... esta es una razón por la que dije eso. Supongo que tiene una conexión de red física real y que también tiene una interfaz de bucle invertido. Esa es la configuración más típica para la mayoría de los tipos de computadoras en estos días.) Lo hago con el túnel SSH. Entonces puedo hacer algo como hacer que un visor local de VNC se conecte al extremo local de un túnel SSH. Al hacer que el túnel SSH escuche en la interfaz de bucle invertido, no necesito preocuparme de que el túnel SSH pueda escuchar el tráfico que ingresa desde una de las interfaces de red físicas. Asi que,

En algunos casos, 0.0.0.0 o :: básicamente significa la dirección "no especificada", como se especifica en RFC 4291 sección 2.5.2que dice "Indica la ausencia de una dirección". A veces he visto esto cuando el software intenta referirse a una dirección "no válida" (como si una computadora no tiene una dirección asignada, tal vez), donde no hay una dirección específica para mostrar. Sin embargo, en este caso, el :: o 0.0.0.0 se refiere a una dirección "desconocida". Es por eso que todos los puertos de ESCUCHA se muestran como "desconocidos". Para una conexión establecida, usted sabe quién es el extremo remoto, porque se está comunicando con ellos. Para una conexión "ESCUCHANDO", estás escuchando conversaciones nuevas. Ese tráfico podría provenir, bueno, posiblemente de cualquier parte del mundo. El tráfico entrante podría provenir de cualquier dirección. Y, la forma en que se muestra nestat es especificar una dirección de todos los ceros. Como no hay una dirección específica para usar,

Terminaré señalando que hacer que el software escuche en todas las interfaces de red es algo muy común. Algunos software se pueden configurar para escuchar solo una dirección de Internet específica, o tal vez una tarjeta de red específica. Y eso puede ser un poco más seguro, porque entonces el software no está escuchando donde no se espera tráfico válido. Eso podría limitar la capacidad de ataque. Sin embargo, una gran cantidad de software no tiene esa opción, o tal opción está algo oculta / oculta. Por lo tanto, escuchar en todas las tarjetas de red no es algo súper terrible. Es bastante común. Y, si desea evitar que el software reciba tráfico en un puerto de red específico, hay otras formas de lograrlo, incluido el bloqueo del tráfico no deseado con un firewall. Si haces eso, el firewall puede bloquear el tráfico, pero el servidor (web) aún podría escuchar el tráfico en esa interfaz de red. En ese caso, el servidor nunca obtendrá tráfico en esa interfaz, pero netstat aún informará que el servidor está escuchando (para ese tráfico que nunca llegará a ese servidor). Ver netstat informa que el software del servidor está escuchando en todas las interfaces es muy común, por lo que no es algo de lo que deba alarmarse particularmente.

Por último, mencionaré que esta pregunta y esta respuesta no son específicas de Linux. (Menciono esto porque veo la etiqueta "Linux" en esta pregunta). Los parámetros de la línea de comandos que se muestran y el resultado de ejemplo que se muestra pueden provenir de Linux, y diferentes sistemas operativos pueden mostrar cosas ligeramente diferentes. Sin embargo, sobre el tema de :: y 0.0.0.0, la forma en que funciona netstat a este respecto es idéntica en una máquina que ejecuta BSD o Microsoft Windows (y presumiblemente muchos otros sistemas).

TOOGAM
fuente
8

Como otros dijeron, es la notación IPv6 natural para este contexto.

Citemos e interpretemos los estándares relevantes:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

http://tools.ietf.org/html/rfc5952#section-4 dice que las direcciones IPv6 canónicas (no solo una posible abreviatura) son:

  • escrito en hexadecimal con los caracteres en a-fminúscula.
  • agrupado cada 2 bytes por :
  • los 0 iniciales DEBEN eliminarse. 0000se convierte 0.
  • la secuencia más larga de :0:0:0: DEBE convertirse ::. Solo se puede hacer una vez o generaría ambigüedad.

Entonces :::*significa:

  • 0000:0000:0000:0000:0000:0000:0000en cualquier puerto ( :*)
  • == 0:0:0:0:0:0:0(eliminación final 0)
  • == ::(contracción cero consecutiva)

0000.0000.0000.0000.0000.0000.0000.0000: * == dirección no especificada

http://tools.ietf.org/html/rfc4291#section-2.5.2 define la "dirección no especificada":

La dirección 0: 0: 0: 0: 0: 0: 0: 0 se denomina dirección no especificada. Nunca debe asignarse a ningún nodo. Indica la ausencia de una dirección. Un ejemplo de su uso se encuentra en el campo Dirección de origen de cualquier paquete IPv6 enviado por un host inicializador antes de conocer su propia dirección.

La dirección no especificada no debe usarse como la dirección de destino de los paquetes IPv6 o en los encabezados de enrutamiento IPv6. Un enrutador IPv6 nunca debe reenviar un paquete IPv6 con una dirección de origen no especificada.

lo que lo convierte en una buena opción para una columna N / A como en este caso.

Así ::que no lo es localhost, lo que dice el mismo documento ::1.

En netstat1.60, los protocolos en la salida leen tcp6y udp6para IPv6, que muestran mejor lo que está sucediendo, por ejemplo:

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

Ver también:

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
3

Se refiere a la dirección IPv6. En IPv6 podemos condensar una secuencia de 0's usando el ::modificador

Por ejemplo,

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

Se puede escribir como

:: 1

Pero hay reglas específicas a seguir a este respecto que puede consultar en cualquier tutorial de Ipv6

anakin
fuente
2

:: 1 es el host local para IPv6, como 127.0.0.1 para IPv4.

::: * es la versión corta de 0: 0: 1: * (IPv6 0: 0: 0, puerto *), es como IPv4 0.0.0.0:*. Ambos en la columna de dirección extranjera significan que no hay una columna de dirección extranjera. En el caso de las tomas de escucha, está claro que no hay (todavía) una dirección extranjera conectada. En el caso de los sockets udp, normalmente no tiene direcciones externas conectadas, por lo que también se enumeran con 0.0.0.0:*.

Werner Henze
fuente
A los votantes negativos: ¿pueden comentar?
Werner Henze
0

::: * Sería tu localhost / loop en IPv6 :)

Básicamente, tiene servicios que escuchan y se conectan a servicios localmente.

Jason
fuente
1
Si interpreto correctamente tools.ietf.org/html/rfc4291#section-2.5.2 , no:: es loopback: es la dirección no especificada, y loopback está en . ::1
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Estoy de acuerdo con Ciro: el :: 1 es loopback, no ::: *.
TOOGAM
0

Tengo curiosidad por saber: ¿qué significa ::: en dirección local?

La versión de linux de netstat utiliza una notación de: donde la dirección IP se muestra desnuda *.

Entonces ::: 111 significa una IP de :: y un puerto de 111.

:: es una dirección IPv6 en forma condensada que usa la regla de que una serie de ceros se puede reemplazar con ::. Escrito en su totalidad, es equivalente a 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

Al igual que con IPv4, la dirección de todos ceros (conocida como la dirección no especificada) se utiliza como un valor de marcador de posición. En el caso de una dirección local, significa que el socket está escuchando en todas las interfaces IPv6 (y posiblemente también todas las interfaces IPv4, dependiendo de las opciones de socket que netstat no muestra).

¿Y qué es 0.0.0.0:* y ::: * en dirección extranjera?

Significa que el socket no está vinculado a una dirección extranjera específica. :: o 0.0.0.0 indica una dirección IP no especificada (para IPv4 o IPv6 respectivamente) y * indica un puerto no especificado.

Para TCP, esto solo se aplica a los sockets que escuchan las conexiones entrantes. Cuando se llama "aceptar" para aceptar una conexión, se crea un zócalo separado con una IP remota y un puerto definidos.

Para UDP no existe el concepto de aceptar conexiones. Una aplicación vinculada a un socket UDP con una dirección extranjera de ::: * utiliza la llamada API "recvfrom" para recibir paquetes y determinar de dónde provienen y la llamada API "sendto" para enviar paquetes a una dirección específica.

* Esta notación es desafortunada porque significa que una cadena mostrada significa cosas diferentes en netstat a otras partes. En la mayoría de los contextos 3FFE :: 1234: 5678 significaría la dirección IP 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678 pero en la salida de Linux Netstat significa la dirección IP 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 y el puerto 5678. La versión de Windows de netstat, por el contrario, rodea las direcciones IPv6 entre corchetes para evitar la ambigüedad.

lavado
fuente