mémo telnet…
Quelques exemple de session telnet pour tester divers protocoles texte (HTTP, SMTP, …).
Si l’on veut tester les versions sécurisées de ces protocoles, il suffit d’utiliser la commande s_client de OpenSSL à la place de telnet:
openssl s_client -connect serveur:port
HTTP
Précision:
- HEAD permet de ne récupérer que les entêtes de la réponse d’une requête HTTP
- GET est la commande classique pour récupérer un contenu
HEAD ou GET en HTTP 1.0:
$ telnet serveur 80 Trying serveur Connected to serveur Escape character id '^]'. HEAD [http://vhost]/uri HTTP/1.0 HTTP/1.0 200 OK Server: nom du soft utilisé Date: la date Content-Type: xxxx Content-Length: xxxx Last-Modified: une autre date Connection: close Accept-Ranges: bytes
Si on remplace HEAD par GET, on aura tout le contenu pointé par l’URL de servi.
Si on ne spécifie pas le vhost sur lequel on tape, l’URI sera servie par le vhost par défaut du serveur HTTP.
HEAD ou GET (simple) en HTTP 1.1:
$ telnet serveur 80 Trying serveur Connected to serveur Escape character id '^]'. HEAD /uri HTTP/1.1 Host: vhost HTTP/1.1 200 OK Server: nom du soft utilisé Date: la date Content-Type: xxxx Content-Length: xxxx Last-Modified: une autre date Connection: keep-alive Keep-Alive: timeout=xx Accept-Ranges: bytes
Comme en HTTP 1.0, si on remplace HEAD par GET, on prend tout dans la figure.
GET + Range (HTTP/1.1):
Le but ici est de ne demander qu’un morceau du fichier. C’est pas mal utilisé par les lecteurs de vidéos (typiquement, les iPhone/iPad ne font jamais un gros GET, mais une succession de GET+Range), ou pour les gestionnaires/accélérateurs de download et la gestion de la reprise des download.
$ telnet serveur 80 Trying serveur Connected to serveur Escape character id '^]'. GET /uri HTTP/1.1 Host: vhost Range: bytes=start-stop HTTP/1.1 206 Partial Content Server: nom du soft utilisé Date: la date Content-Type: xxxx Content-Length: stop-start+1 Last-Modified: une autre date Connection: keep-alive Keep-Alive: timeout=xx Content-Range: bytes start-stop/taille_totale [des chose par forcément très lisibles :)]
SMTP
Envoi depuis le mx de example.com vers une adresse en example.com
$ telnet mx.example.com 25 Trying x.y.z.t... Connected to mx.example.com. Escape character id '^]'. 220 example.com ESMTP HELO some.place.net 250 mx.example.com MAIL FROM: tester@dummy.org 250 2.1.0 Ok RCPT TO: tested@example.com 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> Date: la date Subject: un sujet From: Tester <tester@dummy.org> To: Tested <tested@example.com> message . 250 2.0.0 Ok: queued as EBF2527FF9 QUIT 221 2.0.0 Bye
Il peut arriver qu’après le «RCPT TO» on se fasse jeter avec ce genre de message:
450 4.2.0 <tester@dummy.org>: Sender address rejected: Your email has been greylisted and will be delivered soon...
C’est un mécanisme pour limiter le SPAM, il suffit en général d’attendre 5 minutes avant de recommencer.
Tester si un serveur est un relai ouvert:
$ telnet mx.example.com 25 Trying x.y.z.t... Connected to mx.example.com. Escape character id '^]'. 220 example.com ESMTP HELO some.place.net 250 mx.example.com MAIL FROM: kevin@hotmail.fr 250 2.1.0 Ok RCPT TO: kevina@live.com
Si le serveur est bien configuré, on aura cette réponse:
554 5.7.1 <kevina@live.com>: Relay access denied
Sinon, on aura ce qu’on a déjà vu avant.
Envoi de mail + authentification
On reste dans un cas simple, l’authentification en «clair».
On a tout de même besoin de deux choses: le nom d’utilisateur et le mot de passe encodés en base64 (voir la fonction base64.b64encode(‘string’) de python, par exemple).
Après le «AUTH LOGIN», on rentre le nom d’utilisateur puis le mot de passe. Si tout se passe bien, on obtient comme réponse un «Authentification successful».
$ telnet mx.example.com 25 Trying x.y.z.t... Connected to mx.example.com. Escape character id '^]'. 220 example.com ESMTP HELO some.place.net 250 mx.example.com AUTH LOGIN 334 VXNlcm5hbWU6 dGVzdGVyQGR1bW15Lm9yZw== 334 UGFzc3dvcmQ6 cDRzc3cwcmQ= 235 2.7.0 Authentication successful MAIL FROM: tester@dummy.org 250 2.1.0 Ok RCPT TO: tested@example.com 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> Date: la date Subject: un sujet From: Tester <tester@dummy.org> To: Tested <tested@example.com> message . 250 2.0.0 Ok: queued as BB1D127FF9 QUIT 221 2.0.0 Bye
IMAP
Une session IMAP, par défaut tout passe en clair.
$ telnet serveur 143 Trying serveur Connected to serveur Escape character id '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] XXXX ready. a login Utilisateur FauxMDP a NO [AUTHENTICATIONFAILED] Authentication failed.
$ telnet serveur 143 Trying serveur Connected to serveur Escape character id '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] XXXX ready. a login Utilisateur MotDePasse a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in a list "" "*" * LIST (\\HasNoChildren) "." "Drafts" * LIST (\\HasNoChildren) "." "Sent" * LIST (\\HasNoChildren) "." "Spam" * LIST (\\HasNoChildren) "." "Trash" * LIST (\\HasNoChildren) "." "INBOX" a OK List completed. a examine INBOX * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft NonJunk Junk $Forwarded $label1 $label2 $label3 $label4 $label5) * OK [PERMANENTFLAGS ()] Read-only mailbox. * 928 EXISTS * 0 RECENT * OK [UNSEEN 928] First unseen. * OK [UIDVALIDITY 1256471328] UIDs valid * OK [UIDNEXT 3383] Predicted next UID * OK [HIGHESTMODSEQ 6421] Highest a OK [READ-ONLY] Select completed. a fetch 1 body[] [... entêtes du mail #1 ...] [... corps du mail #1 ...] a OK Fetch completed. a logout * BYE Logging out a OK Logout completed.
POP
À savoir: l’argument de la commande PASS est le mot de passe en clair.
$ telnet serveur 110 Trying serveur Connected to serveur Escape character id '^]'. +OK ready USER toto +OK PASS fauxMdpDeToto -ERR Authentification failed. QUIT +OK Logging out.
$telnet serveur 110 Trying serveur Connected to serveur Escape character id '^]'. +OK ready USER toto +OK PASS mdpDeToto +OK Logged in. LIST +OK X messages: 1 tailleMsg1 ... X tailleMsgX . TOP Y [... Entêtes du mail #Y ...] . TOP Y Z [... Entêtes du mail #Y ...] [... Z premières lignes de #Y ...] . QUIT +OK Logging out.