XMPP Echo Bot
Connaissez-vous cette situation, vous avez vraiment besoin d'un robot d'écho XMPP, mais vous n'avez pas accès à des outils de haut niveau comme Python pour en écrire un ? Tout ce que vous avez c'est openssl, bash, dig, stdbuf et sed ? Alors cet outil est fait pour vous.
Il s'agit d'un robot d'écho XMPP écrit (principalement) en sed. Bash est utilisé pour effectuer la configuration de pré-authentification (rechercher les enregistrements DNS, établir TLS via openssl s_client
). sed traite le flux XML et gère toutes les interactions avec le serveur au niveau XMPP. Oui, cela analyse un peu XML dans sed.
Testé pour fonctionner avec Prosody 0.9.
Usage
./echoz.sh mot de passe utilisateur@domaine
Fonctionnalités prises en charge
- Messagerie officieuse
- XEP-0092 (version du logiciel)
- XEP-0199 (ping XMPP)
Témoignages
- C'est fou, je ne l'ai pas encore crashé ! — Matthieu Sauvage
- J'ai peur. Il n'y a que deux étapes avant de prendre conscience. — Georg Lucas
- Je suis à la fois consterné et impressionné. wow — Lance
- Avec Echoz.sed, nous avons pu réduire les coûts de notre serveur XMPP Echo de 90 % par rapport à notre précédente solution basée sur TeX. — Léon
- Bien que simple et limité, sed est suffisamment puissant pour un grand nombre d’objectifs. — Wikipédia
- oh mon dieu, ça marche vraiment — Test
Détails de mise en œuvre
- Nous utilisons
tr
pour convertir >
en n
- puisque sed est basé sur une ligne (ou NUL), il n'y a pas vraiment d'autre moyen d'analyser le XML XMPP (qui ne contient généralement jamais de nouvelles lignes) avec sed. - TLS est géré en dehors de sed pour des raisons similaires. Et pour garder ma raison (certaines personnes pourraient se demander s’il me reste encore un peu de raison).
- De même, la recherche SRV et la composition des données d'authentification sont entièrement gérées dans bash. Cela signifie également que seule l'authentification PLAIN SASL est prise en charge -- SCRAM nécessite un niveau d'interactivité qui serait extrêmement difficile à atteindre dans sed (mais pas impossible ; nous devrions "simplement" implémenter base64 et sha1-hmac dans sed).
- Puisque XMPP est un protocole dans lequel le client parle en premier, nous devons lui transmettre une entrée initiale pour lui permettre de générer une "ligne" de sortie (l'en-tête du flux). Nous faisons cela avec bash et profitons de cette opportunité pour transmettre une configuration au programme sed (à savoir le JID et la chaîne d'authentification).
Considérations de conception
- Nous avons envisagé d'utiliser
xml2
pour convertir le flux XML en événements ; cependant, il s'avère que 2xm[
n'aime pas les réinitialisations de flux. De plus, l'utilisation de l'approche tr
nous permet également de détecter la fin des éléments, ce qui est utile à diverses fins.