XMPP صدى بوت
هل تعرف هذا الموقف، فأنت تحتاج حقًا إلى روبوت صدى XMPP، لكن لا يمكنك الوصول إلى أدوات عالية المستوى مثل Python لكتابة واحد؟ كل ما لديك هو opensl وbash وdig وstdbuf وsed؟ إذن هذه الأداة مناسبة لك.
هذا هو روبوت صدى XMPP مكتوب باللغة (في الغالب) sed. يتم استخدام Bash للقيام بإعداد المصادقة المسبقة (البحث عن سجلات DNS، وإنشاء TLS عبر openssl s_client
). يعالج sed تدفق XML ويتعامل مع كل التفاعلات مع الخادم على مستوى XMPP. نعم، هذا كيندا يوزع XML في sed.
تم اختباره للعمل ضد Prosody 0.9.
الاستخدام
./ecoz.sh كلمة المرور user@domain
الميزات المدعومة
- رسائل خارج السجل
- XEP-0092 (إصدار البرنامج)
- XEP-0199 (XMPP Ping)
الشهادات
- هذا جنون، لم أحطمه بعد! - ماثيو وايلد
- أنا خائف. إنها على بعد خطوتين فقط من اكتساب الوعي. - جورج لوكاس
- أشعر بالفزع والرهبة في نفس الوقت. واو - لانس
- باستخدام Echoz.sed، تمكنا من تقليل تكاليف خادم XMPP Echo بنسبة 90% مقارنة بالحل السابق المستند إلى TeX. — ليون
- على الرغم من بساطته ومحدوديته، إلا أن برنامج sed قوي بما يكفي لعدد كبير من الأغراض. - ويكيبيديا
- يا إلهي، هذا يعمل بالفعل – اختبار
تفاصيل التنفيذ
- نستخدم
tr
للتحويل >
إلى n
-- نظرًا لأن sed يعتمد على السطر (أو NUL)، فلا توجد حقًا طريقة أخرى لتحليل XMPP XML (الذي لا يحتوي أبدًا على أسطر جديدة) باستخدام sed. - يتم التعامل مع TLS خارج sed لأسباب مماثلة. وللحفاظ على سلامة عقلي (قد يتساءل بعض الناس عما إذا كان لا يزال لدي أي قدر من الصحة العقلية).
- وبالمثل، تتم معالجة عملية البحث عن SRV وتكوين بيانات المصادقة بالكامل في bash. وهذا يعني أيضًا أنه يتم دعم مصادقة PLAIN SASL فقط - يتطلب SCRAM مستوى من التفاعل سيكون من الصعب للغاية تحقيقه في sed (على الرغم من أنه ليس مستحيلًا؛ سيتعين علينا "فقط" تنفيذ base64 وsha1-hmac في sed).
- نظرًا لأن XMPP هو بروتوكول يتحدث فيه العميل أولاً، فنحن بحاجة إلى تسليم بعض المدخلات الأولية للسماح له بإنشاء "خط" من الإخراج (رأس الدفق). نحن نفعل ذلك باستخدام bash، ونستغل هذه الفرصة لتمرير بعض التكوينات إلى برنامج sed (تحديدًا JID وسلسلة المصادقة).
اعتبارات التصميم
- لقد فكرنا في استخدام
xml2
لتحويل تدفق XML إلى أحداث؛ ومع ذلك، فقد اتضح أن 2xm[
لا يحب إعادة تعيين الدفق. كما أن استخدام النهج tr
يسمح لنا أيضًا باكتشاف نهاية العناصر، وهو أمر مفيد لأغراض مختلفة.