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.
Table des matières
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