Vous recherchez telnet sur RHEL 8 ? Essayez nc

Telnet est un protocole réseau utilisé pour accéder à distance à un ordinateur et fournit 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 populaires qui a longtemps atteint son objectif.

Un problème majeur avec telnet sur les systèmes modernes est qu’il n’est pas sécurisé. Toutes les communications dans telnet se font en texte brut et tout le trafic réseau n’est pas chiffré. Essentiellement, toute personne disposant d’un accès et d’outils appropriés peut espionner le trafic réseau pour lire ce trafic. En tant que tels, la plupart des systèmes d’exploitation Linux modernes ne sont pas livrés avec telnet préinstallé, et d’autres déconseillent de 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 aux fins prévues est depuis longtemps obsolète. Mais il existe une autre utilisation de telnet que de nombreux administrateurs système et passionnés de technologie utilisent encore, qui consiste à vérifier la connectivité des ports TCP distants.

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

$ telnet google.com 80
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

$
$ telnet google.com 443
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
$

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

$ telnet google.com 22
Trying 142.250.193.174...
^C
$

Cela facilite le dépannage des problèmes de connectivité réseau simples 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 discuterons de l’installation et de l’utilisation de cet outil sur RHEL8 et des systèmes similaires.

C’est quoi nc ?

nc (ou Ncat) est un outil de ligne de commande à usage général populaire pour lire, écrire, rediriger et chiffrer des données sur un réseau. Écrit à l’origine pour le projet nmap, plusieurs implémentations de Netcat sont désormais disponibles. Il fonctionne avec TCP et UDP sur IPv4 et IPv6 et offre des cas d’utilisation potentiels illimités.

Voici quelques-unes des principales fonctionnalités de l’utilitaire nc :

  • Possibilité d’enchaîner les ncats
  • Redirection des ports TCP, UDP et SCTP vers d’autres sites
  • Crypter la communication avec le support SSL
  • Prise en charge du proxy via les proxys SOCK4/5 ou HTTP (y compris l’authentification)
  • Prend en charge plusieurs plates-formes, y compris Windows, Linux et macOS

Installation nc

nc est disponible dans le cadre des référentiels par défaut des systèmes RHEL. Pour l’installer sur le système RHEL 7, lancez simplement la commande ci-dessous sur le terminal :

$ sudo yum install -y nc

Pour le système RHEL 8, vous pouvez utiliser dnf comme :

$ sudo dnf install -y nc

Vérifier la connectivité TCP

Bien que nc offre une multitude de fonctionnalités qui prennent en charge un certain nombre de cas d’utilisation dans les applications, l’un des plus courants concerne le dépannage du réseau à la place de telnet.

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

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

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

$ nc -vz toptips.fr.com 80
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 104.26.11.88:80.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
$
$ nc -vz toptips.fr.com 443
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 104.26.10.88:443.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
$

De même, un port non accessible ou bloqué affichera une sortie comme (plusieurs adresses sont vérifiées en tant que points DNS toptips.fr vers plusieurs adresses IP) :

$ nc -vz toptips.fr.com 22
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connection to 172.67.70.213 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 104.26.11.88 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 104.26.10.88 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 2606:4700:20::681a:a58 failed: Network is unreachable.
Ncat: Trying next address...
Ncat: Connection to 2606:4700:20::681a:b58 failed: Network is unreachable.
Ncat: Trying next address...
Ncat: Network is unreachable.
$
$ dig toptips.fr.com +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 tandis que nc vous permet de vérifier la connectivité TCP ainsi que UDP.

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

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

Mais UDP est un protocole sans session, contrairement à TCP, donc en tant que tel, vous ne pouvez pas confirmer la connectivité UDP de bout en bout sur tous les scénarios possibles simplement en envoyant des paquets UDP à une extrémité, à moins que le processus d’écoute à l’extrémité distante envoie une réponse, nc ne pourra pas juger si son 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 écouteur UDP, en supposant que vous avez un accès approprié à CLI sur le serveur distant.

Donc, en supposant que vous ayez besoin de vérifier la connectivité UDP entre deux hôtes Linux pour le DNS en utilisant nc, un moyen simple de le faire serait de lancer l’écoute du serveur nc sur le port requis :

$ sudo nc -ul <Port>

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

$ nc -ul 53

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

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

Ce qui rendrait notre commande :

$ nc -u <IP/DNS> 53

Considérant que rien ne bloque le trafic UDP pour le port 53 entre ces deux machines, tout ce que vous tapez et entrez sur une machine doit être visible sur les autres hôtes, comme le chat bidirectionnel. Sinon, un pare-feu bloque la connectivité entre ces deux systèmes.

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

$ sudo nc -l <Port>

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

$ nc <IP/DNS> <Port>

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

Sommaire

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 puissance à l’utilisateur final pour diagnostiquer et résoudre les problèmes de réseau.

nc help est accessible à l’aide de la commande nc -h :

$ nc -h
Ncat 7.70 ( https://nmap.org/ncat )
Usage: ncat [options] [hostname] [port]

Options taking a time assume seconds. Append 'ms' for milliseconds,
's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms).
  -4                         Use IPv4 only
  -6                         Use IPv6 only
  -U, --unixsock             Use Unix domain sockets only
  -C, --crlf                 Use CRLF for EOL sequence
  -c, --sh-exec <command>    Executes the given command via /bin/sh
  -e, --exec <command>       Executes the given command
      --lua-exec <filename>  Executes the given Lua script
  -g hop1[,hop2,...]         Loose source routing hop points (8 max)
  -G <n>                     Loose source routing hop pointer (4, 8, 12, ...)
  -m, --max-conns <n>        Maximum <n> simultaneous connections
  -h, --help                 Display this help screen
  -d, --delay <time>         Wait between read/writes
  -o, --output <filename>    Dump session data to a file
  -x, --hex-dump <filename>  Dump session data as hex to a file
  -i, --idle-timeout <time>  Idle read/write timeout
  -p, --source-port port     Specify source port to use
  -s, --source addr          Specify source address to use (doesn't affect -l)
  -l, --listen               Bind and listen for incoming connections
  -k, --keep-open            Accept multiple connections in listen mode
  -n, --nodns                Do not resolve hostnames via DNS
  -t, --telnet               Answer Telnet negotiations
  -u, --udp                  Use UDP instead of default TCP
      --sctp                 Use SCTP instead of default TCP
  -v, --verbose              Set verbosity level (can be used several times)
  -w, --wait <time>          Connect timeout
  -z                         Zero-I/O mode, report connection status only
      --append-output        Append rather than clobber specified output files
      --send-only            Only send data, ignoring received; quit on EOF
      --recv-only            Only receive data, never send anything
      --allow                Allow only given hosts to connect to Ncat
      --allowfile            A file of hosts allowed to connect to Ncat
      --deny                 Deny given hosts from connecting to Ncat
      --denyfile             A file of hosts denied from connecting to Ncat
      --broker               Enable Ncat's connection brokering mode
      --chat                 Start a simple Ncat chat server
      --proxy <addr[:port]>  Specify address of host to proxy through
      --proxy-type <type>    Specify proxy type ("http" or "socks4" or "socks5")
      --proxy-auth <auth>    Authenticate with HTTP or SOCKS proxy server
      --ssl                  Connect or listen with SSL
      --ssl-cert             Specify SSL certificate file (PEM) for listening
      --ssl-key              Specify SSL private key (PEM) for listening
      --ssl-verify           Verify trust and domain name of certificates
      --ssl-trustfile        PEM file containing trusted SSL certificates
      --ssl-ciphers          Cipherlist containing SSL ciphers to use
      --ssl-alpn             ALPN protocol list to use.
      --version              Display Ncat's version information and exit

See the ncat(1) manpage for full options, descriptions and usage examples
$

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

$ man nc