Telnet est un protocole réseau utilisé pour accéder à distance à un ordinateur et permet une communication textuelle bidirectionnelle. Vous avez donc besoin d’un serveur et d’un client Telnet pour communiquer entre eux.

Telnet est l’un des utilitaires Linux/Windows les plus populaires qui a longtemps rempli sa fonction.

L’un des principaux problèmes de telnet sur les systèmes modernes est qu’il n’est pas sécurisé. Toutes les communications dans telnet se font en texte clair et tout le trafic réseau n’est pas crypté. En fait, toute personne disposant d’un accès et d’outils adéquats peut espionner le trafic réseau et le lire. C’est pourquoi la plupart des systèmes d’exploitation Linux modernes ne sont pas livrés avec telnet préinstallé, et d’autres recommandent de ne pas l’utiliser.

Avec l’avènement du protocole SSH ou Secure Shell, qui est plus qu’un remplacement crypté de telnet, l’utilisation de telnet dans le but pour lequel il a été conçu est depuis longtemps dépassée. Mais il existe une autre utilisation de telnet que de nombreux administrateurs système et passionnés de technologie utilisent encore, à savoir la vérification de la connectivité des ports TCP distants.

Il suffit de vérifier si le port TCP distant écoute et répond correctement à l’aide de la commande telnet. L’extrait ci-dessous montre comment vérifier si google.com est opérationnel en vérifiant la connectivité HTTP/HTTPS.

$ telnet google.com 80
Essai sur 142.250.183.206...
Connecté à google.com.
Le caractère d'échappement est '^]'.
^]
telnet> quit
Connexion fermée.

$
$ telnet google.com 443
Essai sur 142.250.183.206...
Connecté à google.com.
Le caractère d'échappement est '^]'.
^]
telnet> quit
Connexion fermée.
$

Un port TCP qui n’est pas ouvert ou accessible se comportera comme suit lorsqu’il sera vérifié avec telnet:

$ telnet google.com 22
Essai sur 142.250.193.174...
^C
$

Cela facilite le dépannage des problèmes simples de connectivité réseau en combinaison avec les commandes ping, traceroute ou tracepath, netstat, etc.

Si vous utilisez RHEL 8 (ou même des versions plus anciennes de RHEL/CentOS), vous avez la possibilité d’utiliser nc (ou Ncat ou Network Connector), qui prend en charge de nombreuses options liées au diagnostic réseau. Nous allons voir comment installer et utiliser cet outil sur RHEL8 et les systèmes similaires.

Qu’est-ce que nc ?

nc (ou Ncat) est un outil de ligne de commande populaire et polyvalent permettant de lire, d’écrire, de rediriger et de crypter des données sur un réseau. Écrit à l’origine pour le projet nmap, il existe aujourd’hui de nombreuses implémentations de Netcat. Il fonctionne avec TCP et UDP sur IPv4 et IPv6 et offre des possibilités d’utilisation illimitées.

Vous trouverez ci-dessous quelques-unes des principales caractéristiques de l’utilitaire nc:

  • Possibilité d’enchaîner les ncats
  • Redirection des ports TCP, UDP et SCTP vers d’autres sites
  • Cryptage des communications grâce à la prise en charge de SSL
  • Prise en charge des proxys via SOCK4/5 ou HTTP (y compris l’authentification)
  • Prise en charge de plusieurs plateformes, notamment Windows, Linux et macOS

Installation de nc

nc est disponible dans les dépôts par défaut des systèmes RHEL. Pour l’installer sur le système RHEL 7, lancez simplement la commande suivante dans le terminal :

sudo yum install -y nc

Pour le système RHEL 8, vous pouvez utiliser dnf comme suit : $ sudo dnf install -y nc

$ sudo dnf install -y nc

Vérifiez la connectivité TCP

Bien que nc offre un grand nombre de fonctionnalités qui prennent en charge un certain nombre de cas d’utilisation à travers les applications, l’un des cas les plus courants est celui du dépannage réseau à la place de telnet.

nc peut vous montrer si vous pouvez atteindre un port TCP. Voici la syntaxe :

$ nc -vz <IP/DNS> <Port&gt

Par exemple, si je veux vérifier si je peux atteindre Geekflare via http ou https. Je peux le faire en utilisant nc comme indiqué ci-dessous (le port 80 est pour http tandis que 443 est pour https) :

$ nc -vz geekflare.com/fr 80
Ncat : Version 7.70 ( https://nmap.org/ncat )
Ncat : Connecté à 104.26.11.88:80.
Ncat : 0 octets envoyés, 0 octets reçus en 0.02 secondes.
$
$ nc -vz geekflare.com/fr 443
Ncat : Version 7.70 ( https://nmap.org/ncat )
Ncat : Connecté à 104.26.10.88:443.
Ncat : 0 octets envoyés, 0 octets reçus en 0.01 secondes.
$

De même, un port inaccessible ou bloqué affichera une sortie comme (plusieurs adresses sont vérifiées car le DNS de Geekflare pointe vers plusieurs IP) :

$ nc -vz geekflare.com/fr 22
Ncat : Version 7.70 ( https://nmap.org/ncat )
Ncat : La connexion à 172.67.70.213 a échoué : Connection timed out.
Ncat : Essai de l'adresse suivante...
Ncat : La connexion à 104.26.11.88 a échoué : Connection timed out.
Ncat : Trying next address...
Ncat : La connexion à 104.26.10.88 a échoué : Connection timed out.
Ncat : Trying next address...
Ncat : La connexion à 2606:4700:20::681a:a58 a échoué : Le réseau est inaccessible.
Ncat : Trying next address...
Ncat : La connexion à 2606:4700:20::681a:b58 a échoué : Le réseau est inaccessible.
Ncat : Trying next address...
Ncat : Le réseau est inaccessible.
$
$ dig geekflare.com/fr short
104.26.10.88
172.67.70.213
104.26.11.88
$

Vérifier la connectivité UDP

telnet ne peut vérifier que la communication avec un port TCP distant alors que nc vous permet de vérifier la connectivité TCP et UDP.

nc peut simplement envoyer des paquets UDP au lieu des paquets TCP par défaut en utilisant :

$ nc -vzu <IP/DNS> <Port&gt

Mais UDP est un protocole sans session, contrairement à TCP, de sorte que vous ne pouvez pas confirmer la connectivité UDP de bout en bout dans tous les scénarios possibles simplement en envoyant des paquets UDP d’un côté, car à moins que le processus d’écoute à l’extrémité distante n’envoie une réponse, nc ne sera pas en mesure de juger si le paquet envoyé a atteint la destination ou non. Mais nc offre une alternative pour déterminer la connectivité UDP de bout en bout en lançant un processus d’écoute UDP, en supposant que vous ayez un accès approprié au CLI sur le serveur distant.

Ainsi, en supposant que vous ayez besoin de vérifier la connectivité UDP entre deux hôtes Linux pour le DNS à l’aide de nc, une manière simple de le faire serait de lancer un serveur nc écoutant sur le port requis :

$ sudo nc -ul <Port&gt

Pour le DNS, nous devons vérifier le port 53, ce qui rendrait la commande ci-dessus comme suit :

$ nc -ul 53

Du côté du client, vous devez lancer un autre processus nc qui envoie des paquets UDP au serveur :

$ nc -u <IP/DNS> <Port&gt

Ce qui donnerait notre commande :

$ nc -u <IP/DNS> 53

Si rien ne bloque le trafic UDP pour le port 53 entre ces deux machines, tout ce que vous tapez et saisissez sur une machine devrait être visible sur les autres hôtes, comme un chat bidirectionnel. Si ce n’est pas le cas, c’est qu’un pare-feu bloque la connectivité entre ces deux systèmes.

Le modèle de serveur et de client utilisant nc fonctionne parfaitement pour ce type de vérifications simples de la connectivité entre les hôtes. Comme pour la vérification UDP ci-dessus, nc peut également écouter les paquets TCP sur un port donné :

$ sudo nc -l <Port&gt

Du côté du client, vous pouvez normalement envoyer des paquets TCP pour vérifier la connectivité :

$ nc <IP/DNS> <Port&gt

La méthode nc serveur/client ci-dessus n’est pas nécessaire dans le cas des connexions TCP (contrairement à UDP), car il s’agit d’un protocole orienté connexion qui fonctionne avec des accusés de réception. Tout processus d’écoute travaillant sur TCP répondra directement aux paquets TCP nc.

Résumé de l’article

Cet article résume comment l’utilitaire nc remplace directement telnet dans les systèmes Linux modernes en ce qui concerne la vérification de la connectivité des ports et fournit beaucoup plus de pouvoir à l’utilisateur final pour diagnostiquer et résoudre les problèmes de réseau.

vous pouvez accéder à l’aide de nc en utilisant la commande nc -h:

$ nc -h
Ncat 7.70 ( https://nmap.org/ncat )
Utilisation : ncat [options] [nom d'hôte] [port]

Les options prenant un temps supposent des secondes. Ajoutez 'ms' pour les millisecondes,
's' pour les secondes, 'm' pour les minutes ou 'h' pour les heures (par exemple 500ms).
  -4 Utiliser uniquement IPv4
  -6 Utiliser IPv6 uniquement
  -U, --unixsock Utiliser uniquement les sockets de domaine Unix
  -C, --crlf Utiliser CRLF pour la séquence EOL
  -c, --sh-exec <commande> Exécute la commande donnée via /bin/sh
  -e, --exec <commande> Exécute la commande donnée
      --lua-exec <fichier> Exécute le script Lua donné
  -g hop1[,hop2,...] Points de saut de routage de source libre (8 max)
  -G <n> Pointeur de saut de routage de source libre (4, 8, 12, ...)
  -m, --max-conns <n> Maximum <n> connexions simultanées
  -h, --help Affiche l'écran d'aide
  -d, --delay <time> Attente entre les lectures/écritures
  -o, --output <filename> Enregistrer les données de la session dans un fichier
  -x, --hex-dump <nom du fichier> Décharge les données de la session au format hexadécimal dans un fichier
  -i, --idle-timeout <time> Délai d'inactivité en lecture/écriture
  -p, --source-port port Spécifie le port source à utiliser
  -s, --source addr Spécifie l'adresse source à utiliser (n'affecte pas -l)
  -l, --listen Lier et écouter les connexions entrantes
  -k, --keep-open Accepte plusieurs connexions en mode écoute
  -n, --nodns Ne pas résoudre les noms d'hôtes par DNS
  -t, --telnet Répondre aux négociations Telnet
  -u, --udp Utiliser UDP au lieu du TCP par défaut
      --sctp Utiliser SCTP au lieu de TCP par défaut
  -v, --verbose Définir le niveau de verbosité (peut être utilisé plusieurs fois)
  -w, --wait <time> Délai de connexion
  -z Mode zéro E/S, rapport sur l'état de la connexion uniquement
      --append-output Ajouter les fichiers de sortie spécifiés plutôt que de les saturer
      --send-only N'envoyer que des données, ignorer les données reçues ; quitter sur EOF
      --Recv-only Ne reçoit que des données, n'envoie jamais rien
      --allow Autorise uniquement les hôtes donnés à se connecter à Ncat
      --allowfile Fichier des hôtes autorisés à se connecter à Ncat
      --deny Refuser à des hôtes donnés de se connecter à Ncat
      --denyfile Fichier des hôtes interdits de connexion à Ncat
      --broker Active le mode de courtage de connexion de Ncat
      --chat Démarrer un simple serveur de chat Ncat
      --proxy <addr[:port]> Spécifie l'adresse de l'hôte à utiliser pour le proxy
      --proxy-type <type> Spécifie le type de proxy ("http" ou "socks4" ou "socks5")
      --proxy-auth <auth> Authentifier avec le serveur proxy HTTP ou SOCKS
      --ssl Se connecter ou écouter avec SSL
      --ssl-cert Spécifie le fichier de certificat SSL (PEM) pour l'écoute
      --ssl-key Spécifier la clé privée SSL (PEM) pour l'écoute
      --ssl-verify Vérifier la confiance et le nom de domaine des certificats
      --ssl-trustfile Fichier PEM contenant des certificats SSL de confiance
      --ssl-ciphers Liste des codes contenant les codes SSL à utiliser
      --ssl-alpn Liste des protocoles ALPN à utiliser.
      --version Affiche les informations sur la version de Ncat et quitte

Voir la page de manuel ncat(1) pour les options complètes, les descriptions et les exemples d'utilisation
$

Pour des informations plus détaillées sur la commande nc, reportez-vous à sa page de manuel.

$ man nc