Bot de eco XMPP
¿Conoce esa situación? ¿Realmente necesita un bot de eco XMPP, pero no tiene acceso a herramientas de alto nivel como Python para escribir uno? ¿Todo lo que tienes es openssl, bash, dig, stdbuf y sed? Entonces esta herramienta es para ti.
Este es un bot de eco XMPP escrito (principalmente) en sed. Bash se utiliza para realizar la configuración de autenticación previa (buscar registros DNS, establecer TLS a través de openssl s_client
). sed procesa el flujo XML y maneja toda la interacción con el servidor en el nivel XMPP. Sí, esto analiza XML en sed.
Probado para funcionar con Prosody 0.9.
Uso
./echoz.sh usuario@dominio contraseña
Funciones admitidas
- Mensajes extraoficiales
- XEP-0092 (Versión de software)
- XEP-0199 (ping XMPP)
Testimonios
- ¡Esto es una locura, todavía no lo he bloqueado! - Mateo salvaje
- Estoy asustado. Está a sólo dos pasos de tomar conciencia. - Georg Lucas
- Estoy simultáneamente consternado y asombrado. guau — lanza
- Con Echoz.sed, pudimos reducir los costos de nuestro servidor XMPP Echo en un 90 % en comparación con nuestra solución anterior basada en TeX. — León
- Si bien es simple y limitado, sed es lo suficientemente poderoso para una gran cantidad de propósitos. -Wikipedia
- Dios mío, esto realmente funciona - Prueba
Detalles de implementación
- Usamos
tr
para convertir >
a n
; dado que sed se basa en líneas (o NUL), en realidad no existe otra forma de analizar XMPP XML (que generalmente nunca contiene nuevas líneas) con sed. - TLS se maneja fuera de sed por razones similares. Y para mantener la cordura (algunas personas podrían preguntarse si todavía me queda algo de cordura).
- Asimismo, la búsqueda de SRV y la composición de los datos de autenticación se manejan completamente en bash. Esto también significa que solo se admite la autenticación PLAIN SASL: SCRAM requiere un nivel de interactividad que sería extremadamente difícil de lograr en sed (aunque no imposible; "simplemente" tendríamos que implementar base64 y sha1-hmac en sed).
- Dado que XMPP es un protocolo en el que el cliente habla primero, necesitamos entregarle a sed alguna entrada inicial para permitirle generar una "línea" de salida (el encabezado de la secuencia). Lo hacemos con bash y aprovechamos esa oportunidad para pasar alguna configuración al programa sed (es decir, JID y cadena de autenticación).
Consideraciones de diseño
- Consideramos usar
xml2
para convertir el flujo XML en eventos; sin embargo, resulta que a 2xm[
no le gustan los reinicios de transmisión. Además, el uso del enfoque tr
también nos permite detectar el final de los elementos, lo cual es útil para diversos propósitos.