Netcat - ¿Cómo escuchar en un puerto TCP usando la dirección IPv6?

13

Estoy usando la versión más reciente de netcat ( v1.10-41.1) que no parece tener una opción para las direcciones IPv6 (como -6estaba en las versiones anteriores de nc).

Si escribo nc -lvnp 2222y compruebo los puertos de escucha con netstat -punta, el servidor parece estar escuchando en el puerto solo 2222para direcciones IPv4:

tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN      2839/nc  

tcp6 no está activo como, por ejemplo, mi servidor apache2:

tcp6       0      0 :::80                   :::*                    LISTEN      -
bashbin
fuente

Respuestas:

17

Hay al menos 3 o 4 implementaciones diferentes de netcat como se ve en Debian:

Yo iría por el OpenBSD. Cada versión puede tener una sintaxis sutilmente diferente, así que tenga cuidado.

Por cierto: socat es una herramienta mucho mejor capaz de hacer mucho más que netcat. ¡Deberías probarlo!

AB
fuente
2
Increíble. Gracias por sugerir la socatherramienta. Aparentemente tiene muchas más opciones, y lo siguiente: socat tcp6-listen:2222hizo el trabajo.
bashbin
2
@bashbin pero un poco más detallado en su sintaxis. eso sería socat tcp6-listen:2222,reuseaddr -(o probablemente en su reuseportlugar) si desea usarlo dos veces seguidas cuando el servidor (el comando socat) se desconecta primero.
AB
4

Creo que la funcionalidad de ipv4 e ipv6 es, de hecho, el resultado de la confusión en torno a la existencia de múltiples implementaciones (forks) o versiones completamente diferentes. Si busca, tropezará con menciones de nc6. Esta implementación parece estar en las distribuciones basadas en BSD.

Intentaría instalar nc6en su distribución particular y ejecutarla en lugar de ncsoporte para ipv6.

Más investigación

Pude encontrar esta confirmación con fecha del 01-01-2018: agregue el parche IPv6 que claramente está agregando la funcionalidad IPv6 de nuevo a lo que llama la versión más nueva de netcat.

NOTA: Solo tengo acceso a nc 7.50 en mis sistemas y, como usted describe, es compatible con ambos -4y -6.

Sospecho que lo que crees que es una versión más nueva de netcat es, de hecho, una versión mucho más antigua: http://nc110.sourceforge.net/ .

Si desea una lista exhaustiva de las diversas implementaciones, está disponible en la pregunta de Wikipedia sobre Netcat .

La versión original de netcat era un programa Unix. La última versión (1.10) se lanzó en marzo de 1996. 1

En la mayoría de las distribuciones de Linux, GNU netcat o la versión NMAP parecen ser lo que la mayoría usa:

Existen varias implementaciones en los sistemas POSIX , incluidas las reescrituras desde cero como GNU netcat [5] u OpenBSD netcat, 6 la última de las cuales es compatible con IPv6 y TLS . La versión de OpenBSD ha sido portada a la base 7 de FreeBSD y Windows / Cygwin. 8 Mac OS X viene con netcat instalado a partir de OSX 10.13 o los usuarios pueden usar MacPorts para instalar una variante. [9] También hay una versión de netcat para Microsoft Windows disponible. [10]

Por ejemplo, en CentOS 7.x:

$ nc --version
Ncat: Version 7.50 ( https://nmap.org/ncat )

$ rpm -qf /bin/nc
nmap-ncat-6.40-13.el7.x86_64
slm
fuente