XMPP Echo Bot
Kennen Sie die Situation, dass Sie wirklich einen XMPP-Echo-Bot benötigen, aber keinen Zugriff auf High-Level-Tools wie Python haben, um einen zu schreiben? Alles, was Sie haben, ist OpenSSL, Bash, Dig, Stdbuf und Sed? Dann ist dieses Tool genau das Richtige für Sie.
Dies ist ein XMPP-Echo-Bot, der (größtenteils) in sed geschrieben ist. Bash wird verwendet, um die Einrichtung der Vorauthentifizierung durchzuführen (DNS-Einträge nachschlagen, TLS über openssl s_client
einrichten). sed verarbeitet den XML-Stream und wickelt die gesamte Interaktion mit dem Server auf XMPP-Ebene ab. Ja, das analysiert irgendwie XML in sed.
Getestet, um mit Prosody 0.9 zu funktionieren.
Verwendung
./echoz.sh user@domain-Passwort
Unterstützte Funktionen
- Vertrauliche Nachrichtenübermittlung
- XEP-0092 (Softwareversion)
- XEP-0199 (XMPP-Ping)
Erfahrungsberichte
- Das ist verrückt, ich habe es noch nicht zum Absturz gebracht! — Matthew Wild
- Ich habe Angst. Von der Erlangung des Bewusstseins sind es nur noch zwei Schritte. — Georg Lukas
- Ich bin entsetzt und voller Ehrfurcht zugleich. Wow – Lance
- Mit Echoz.sed konnten wir die Kosten für unseren XMPP-Echo-Server im Vergleich zu unserer vorherigen TeX-basierten Lösung um 90 % senken. – Leon
- Obwohl sed einfach und begrenzt ist, ist es für eine Vielzahl von Zwecken ausreichend leistungsfähig. – Wikipedia
- Oh mein Gott, das funktioniert tatsächlich – Test
Implementierungsdetails
- Wir verwenden
tr
um >
in n
zu konvertieren – da sed zeilenbasiert (oder NUL-basiert) ist, gibt es keine wirklich andere Möglichkeit, XMPP-XML (das im Allgemeinen nie Zeilenumbrüche enthält) mit sed zu analysieren. - TLS wird aus ähnlichen Gründen außerhalb von sed gehandhabt. Und um meinen Verstand zu bewahren (manche Leute fragen sich vielleicht, ob ich noch ein bisschen Verstand habe).
- Ebenso wird die SRV-Suche und die Zusammensetzung der Authentifizierungsdaten vollständig in Bash abgewickelt. Das bedeutet auch, dass nur PLAIN SASL-Authentifizierung unterstützt wird – SCRAM erfordert ein Maß an Interaktivität, das in sed extrem schwer zu erreichen wäre (allerdings nicht unmöglich; wir müssten „nur“ base64 und sha1-hmac in sed implementieren).
- Da XMPP ein Protokoll ist, bei dem der Client zuerst spricht, müssen wir sed einige anfängliche Eingaben übergeben, damit eine „Ausgabezeile“ (der Stream-Header) generiert werden kann. Wir machen das mit Bash und nutzen diese Gelegenheit, um einige Konfigurationen an das sed-Programm zu übergeben (nämlich JID und Authentifizierungszeichenfolge).
Designüberlegungen
- Wir haben überlegt,
xml2
zu verwenden, um den XML-Stream in Ereignisse umzuwandeln. Es stellt sich jedoch heraus, dass 2xm[
keine Stream-Resets mag. Außerdem ermöglicht uns die Verwendung des tr
Ansatzes, das Ende von Elementen zu erkennen, was für verschiedene Zwecke nützlich ist.