Félicitations, vous venez de vous plonger dans le concept des couches réseau en réalisant que les ports et les protocoles ne sont pas directement connectés les uns aux autres. Comme d'autres le disent, telnet peut être utilisé pour se connecter à n'importe quel port TCP. Cependant, pour comprendre pourquoi cela est possible, vous devez comprendre un peu les couches réseau. Si vous avez déjà entendu parler du modèle de couche OSI 7, c'est ce qui vous permet d'utiliser telnet pour vous connecter à un autre port. Bien que sur Internet, ils ne se préoccupent que de 4 des couches et c'est ce qu'on appelle Internet Protocol Suite. Sans couches de mise en réseau, chaque programme aurait non seulement besoin de comprendre son propre protocole, mais devrait également définir son propre schéma d'adressage IP et son système de port, ce qui signifie que chaque routeur devrait comprendre comment acheminer ces schémas et différents protocoles serait beaucoup plus plus difficile à apprendre et à diagnostiquer. Pour le dire simplement, Internet ne fonctionnerait pas aussi bien sans couches.
Ce qui vous intéresse, c'est la couche transport et la couche application. Au niveau de la couche transport, nous avons des protocoles Internet comme TCP et UDP avec des numéros de port allant de 1 à 65535 sur chacun. Au niveau de l'application, nous avons des protocoles tels que HTTP, SMTP et DNS. Habituellement, chaque document de normes Internet qui définit un protocole spécifie un port TCP ou UDP par défaut que le protocole doit utiliser par défaut. Tels que le port TCP 80 pour HTTP, le port TCP 25 pour SMTP, le port UDP 53 pour DNS et le port TCP 23 pour Telnet. Le programme telnet parle en fait le protocole TELNET, qui est un protocole standard, mais surtout un ancien selon les normes actuelles. Étant donné que ses séquences de protocoles sont constituées de caractères 8 bits, vous voyez rarement le protocole lui-même et sa plupart transparent lorsque comparé à d'autres protocoles plus modernes comme HTTP et SMTP qui utilisent des mots visibles humains en ASCII tels que GET, POST, HELO, LOGIN, etc.
Parce que son protocole n'est généralement pas visible, telnet est un outil décent pour se connecter à d'autres ports TCP et permettre à l'utilisateur de saisir manuellement des protocoles. Certains administrateurs réseau utilisent cette technique afin de diagnostiquer les problèmes avec les serveurs. Cependant, comme le programme telnet possède toujours son propre protocole et peut parfois envoyer des bits supplémentaires de données, vous pouvez toujours rencontrer des problèmes avec cette technique. Lorsque vous utilisez telnet, vous "établissez réellement une connexion" au niveau de la couche application et de la couche transport. Il se trouve que d'autres protocoles de couche application peuvent fonctionner correctement pour la plupart des diagnostics et n'interfèrent pas avec le protocole telnet. Il existe un meilleur programme pour ce faire appelé nc (Net Cat. Il tire son nom d'une version réseau de la commande cat).
$ nc www.stackexchange.com 80
Le programme nc ne parle aucun protocole de couche application et lorsque vous vous connectez avec lui, vous "établissez une connexion" uniquement au niveau de la couche Internet (adresse IP) et de la couche Transport (TCP ou UDP). Cela signifie que vous contrôlez le protocole de couche application utilisé. Presque tout est du jeu équitable, même des protocoles binaires. Cela vous permet également de faire des choses utiles comme transférer des fichiers sans les corrompre et d'écouter sur les ports le trafic entrant:
nc -l 9000 < movie.mp4 (Your friend runs this)
nc friends.computer.hostname 9000 > movie.mp4 (you run this)
Et puis movie.mp4 est transféré sur le réseau sans aucun protocole de couche application (tel que FTP). Le protocole d'application est en fait votre ami qui vous dit qu'il est prêt à exécuter votre commande.
nc peut également gérer les paquets UDP et les sockets de domaine UNIX. L'utiliser pour écouter peut également être intéressant.
nc -l 12345
Maintenant, dans votre navigateur Web, visitez http: // localhost: 12345 / et dans votre session nc, vous devriez voir la GET / HTTP/1.1
demande du navigateur . À ce stade, vous pouvez taper quelque chose et appuyer sur Ctrl-D
et cela devrait apparaître dans votre navigateur en texte brut (si vous voulez que HTML apparaisse, vous devez lui renvoyer la réponse de protocole HTTP appropriée suivie du code HTML).
Parfois, les programmes qui parlent nativement un protocole comme HTTP peuvent se connecter à d'autres ports destinés à un protocole différent. Vous ne pouvez généralement plus le faire dans un navigateur GUI car ils les ont empêchés de se connecter à certains ports, mais si vous utilisez un programme comme curl pour vous connecter au port 25 (SMTP pour l'envoi de courrier), vous verrez probablement quelques des erreurs de rupture de protocole.
$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.
Cela se produit car curl parle normalement le protocole HTTP, donc après avoir établi une négociation TCP, il commence à envoyer des données comme ceci:
GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl
Mais ce que le serveur SMTP attend, c'est SMTP, qui ressemble plus à ceci:
HELO myhomecomputername.local
À quel moment le serveur renvoie sa ligne d'identification:
250 yourispsmtpserverhost.com
Donc, vous voyez qu'il n'y a rien qui empêche curl d'établir une connexion de couche transport avec le serveur SMTP, il ne peut tout simplement pas parler du protocole. Mais vous pouvez parler le protocole vous-même avec un programme comme telnet ou plus préférablement nc.
nc(1)
) est beaucoup plus flexible. Il peut se connecter aux services chiffrés SSL / TLS, et peut également être utilisé comme serveur et même relayer des données.