Netcat - Comment écouter sur un port TCP en utilisant une adresse IPv6?

13

J'utilise la dernière version de netcat ( v1.10-41.1) qui ne semble pas avoir d'option pour les adresses IPv6 (comme -6c'était le cas dans les anciennes versions de nc).

Si je tape nc -lvnp 2222et vérifie les ports d'écoute avec netstat -punta, le serveur semble écouter 2222uniquement sur le port les adresses IPv4:

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

tcp6 n'est pas actif comme, par exemple, mon serveur apache2:

tcp6       0      0 :::80                   :::*                    LISTEN      -
bashbin
la source

Réponses:

17

Il y a au moins 3 ou 4 implémentations différentes de netcat comme vu sur Debian:

  • netcat-traditional 1.10-41 l'original qui ne prend pas en charge IPv6: probablement ce que vous avez installé.
  • netcat6 qui a été conçu pour offrir IPv6 (oldstable, remplacé).
  • netcat-openbsd 1.130-3. Prend en charge IPv6.
  • ncat 7.70 + dfsg1-3 probablement un peu plus récent car non stable dans Debian, fourni par nmap , prend en charge IPv6.

J'irais pour l'openbsd. Chaque version peut avoir une syntaxe subtilement différente, alors faites attention.

Soit dit en passant: socat est un bien meilleur outil capable de faire vraiment bien plus que netcat. Tu devrais l'essayer!

UN B
la source
2
Impressionnant. Merci d'avoir suggéré l' socatoutil. Il a apparemment beaucoup plus d'options, et ce qui suit: a socat tcp6-listen:2222fait le travail.
bashbin le
2
@bashbin mais un peu plus verbeux dans sa syntaxe. ce serait socat tcp6-listen:2222,reuseaddr -(ou probablement à la reuseportplace) si vous souhaitez l'utiliser deux fois de suite lorsque le serveur (la commande socat) se déconnecte en premier.
AB
4

Je crois que la fonctionnalité d'ipv4 et d'ipv6 est en fait le résultat d'une confusion autour de l'existence de plusieurs implémentations (fourches) ou de versions complètement différentes. Si vous recherchez, vous tomberez sur des mentions de nc6. Cette implémentation semble être dans les distributions basées sur BSD.

J'essaierais d'installer nc6sur votre distribution particulière et de l'exécuter au lieu de la ncprise en charge ipv6.

De plus amples recherches

J'ai pu trouver ce commit daté du 11-01-2018 - ajouter un correctif IPv6 qui ajoute clairement la fonctionnalité IPv6 dans ce que vous appelez la nouvelle version de netcat.

REMARQUE: je n'ai accès qu'à nc 7.50 sur mes systèmes et, comme vous le décrivez, prend en charge les deux -4et -6.

Je soupçonne que ce que vous pensez être une version plus récente de netcat est en fait une version beaucoup plus ancienne: http://nc110.sourceforge.net/ .

Si vous souhaitez une liste exhaustive des différentes implémentations, celle-ci est disponible dans la question Wikipedia sur Netcat .

La version originale de netcat était un programme Unix. La dernière version (1.10) a été publiée en mars 1996. 1

Sur la plupart des distributions Linux, GNU netcat ou la version NMAP semblent être ce que la plupart utilisent:

Il existe plusieurs implémentations sur les systèmes POSIX , y compris des réécritures à partir de zéro comme GNU netcat [5] ou OpenBSD netcat, 6 ce dernier prenant en charge IPv6 et TLS . La version d'OpenBSD a été portée sur FreeBSD base 7 et Windows / Cygwin. 8 Mac OS X est livré avec Netcat installé à partir d'OSX 10.13 ou les utilisateurs peuvent utiliser MacPorts pour installer une variante. [9] Il existe également une version Microsoft Windows de netcat. [10]

Par exemple, sur 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
la source