Connaitre les protocoles : POP

Publié le par Peck

Maintenant sur http://linux-attitude.fr/post/Connaitre-les-protocoles-%3A-POP

Niveau:

Résumé : telnet pop.mail.net 110

Connaître le protocole
Connaître un protocole peut toujours servir.
  1. Vous pourrez ainsi tester les services que vous mettez en place
  2. Vous pourrez diagnostiquer le problème quand un ami vous dira "Ça marche pas !"
  3. Si vous-même avez un problème vous pourrez probablement le résoudre à la main.
Hier je me suis retrouvé à devoir télécharger 32000 mails sur un serveur pop et mon pauvre client (hé oui fetchmail n'est pas le seul client) est un peu oublié du coté de la résistance aux crash et n'a pas supporté. Le problème c'est qu'il n'a pas effacé les 15000 premiers mails qu'il a réussi à télécharger. Merci la boulette, après 30mn on n'a pas trop envie de tout reprendre au début.

Connaître le protocole POP
Je ne vais vous parler que des bases. Pour la suite, lisez la RFC :)

Une session POP est relativement simple (en gras ce que vous tapez) :

 $ telnet pop.mail.net 110
 Trying 127.0.0.1...
 Connected to pop.mail.net.
 Escape character is '^]'.
 +OK <23594.1175023984@pop.mail.net>
 USER toto
 +OK
 PASS xxx
 +OK
 LIST
 +OK
 1 1235
 .
 RETR 1
 [...]
 +OK
 DELE 1
 +OK
 QUIT
 Connection closed by foreign host.


  [...] étant remplacé par le contenu du mail. Pour le reste je pense que vous avez compris.

Maintenant automatisons la suppression des mails.
 
Scripting
Nous utiliserons nc à la place de telnet car il est plus pratique pour le script
Nous allons préparer un fichier de commandes à envoyer au serveur.

Préparation :

 $ # la partie login
 $ echo "USER toto" > file1
 $ echo "PASS xxx" >> file1

 $ # la partie suppression
 $ for i in $(seq 1 15000); do echo DELE $i ; done > file2

 $ # la fin
 $ echo "QUIT" >> file2

Pourquoi 2 fichiers ? Parce que nous aurons besoin de temporiser après le login, sinon le serveur nous jette.

Pourquoi inclure le QUIT ? Parce que le serveur POP ne valide pas les commandes DELE si la connexion ne se termine pas proprement.

Maintenant le tout :

 $ cat file1 - file2 | nc pop.mail.net 110

On envoit à la suite file1, l'entrée standard (vous) puis file2. La sortie standard n'ayant pas changé (vous) il vous est possible de constater ce qui se passe.

Une fois le login accepté, il suffit de terminer les données sur l'entrée standard (avec ctrl-d) pour passer à l'envoi de file2.

Notez une technique différente avec moins de contrôle mais plus d'autonomie :

 $ (cat file1 ; sleep 2; cat file2) | nc pop.mail.net 110

Publié dans admin

Pour être informé des derniers articles, inscrivez vous :

Commenter cet article