XMPP เอคโคบอท
คุณรู้ไหมว่าสถานการณ์นั้นคุณต้องการ XMPP echo bot จริงๆ แต่คุณไม่สามารถเข้าถึงเครื่องมือระดับสูงเช่น Python เพื่อเขียนมันได้ สิ่งที่คุณมีคือ openssl, bash, dig, stdbuf และ sed? เครื่องมือนี้เหมาะสำหรับคุณ
นี่คือ XMPP echo bot ที่เขียนด้วย (ส่วนใหญ่) sed Bash ใช้เพื่อทำการตั้งค่าการตรวจสอบสิทธิ์ล่วงหน้า (ค้นหาบันทึก DNS สร้าง TLS ผ่าน openssl s_client
) sed ประมวลผลสตรีม XML และจัดการการโต้ตอบทั้งหมดกับเซิร์ฟเวอร์ในระดับ XMPP ใช่ แบบนี้จะแยกวิเคราะห์ XML ใน sed
ผ่านการทดสอบการทำงานกับ Prosody 0.9
การใช้งาน
./echoz.sh user@รหัสผ่านโดเมน
คุณสมบัติที่รองรับ
- ข้อความนอกบันทึก
- XEP-0092 (เวอร์ชันซอฟต์แวร์)
- XEP-0199 (XMPP ปิง)
ข้อความรับรอง
- นี่มันบ้าไปแล้ว ฉันยังไม่ชนมันเลย! — แมทธิว ไวลด์
- ฉันกลัว. อีกเพียงสองก้าวคุณก็จะได้สติสัมปชัญญะ — จอร์จ ลูคัส
- ฉันรู้สึกตกใจและตกตะลึงไปพร้อมๆ กัน ว้าว - แลนซ์
- ด้วย Echoz.sed เราสามารถลดต้นทุนเซิร์ฟเวอร์ XMPP Echo ของเราได้ถึง 90% เมื่อเทียบกับโซลูชันที่ใช้ TeX รุ่นก่อนหน้าของเรา — ลีออน
- แม้ว่า sed จะเรียบง่ายและมีข้อจำกัด แต่ sed ก็มีประสิทธิภาพเพียงพอสำหรับวัตถุประสงค์จำนวนมาก — วิกิพีเดีย
- โอ้พระเจ้า มันใช้งานได้จริง - ทดสอบ
รายละเอียดการดำเนินการ
- เราใช้
tr
เพื่อแปลง >
เป็น n
เนื่องจาก sed เป็นแบบบรรทัด (หรือ NUL) จึงไม่มีวิธีอื่นในการแยกวิเคราะห์ XMPP XML (ซึ่งโดยทั่วไปจะไม่ขึ้นบรรทัดใหม่) ด้วย sed - TLS ได้รับการจัดการภายนอก sed ด้วยเหตุผลที่คล้ายกัน และเพื่อรักษาสติของฉัน (บางคนอาจสงสัยว่าฉันยังมีสติเหลืออยู่บ้างหรือเปล่า)
- ในทำนองเดียวกันการค้นหา SRV และองค์ประกอบของข้อมูลการรับรองความถูกต้องได้รับการจัดการทั้งหมดในรูปแบบทุบตี นอกจากนี้ยังหมายความว่ารองรับเฉพาะการตรวจสอบสิทธิ์ PLAIN SASL เท่านั้น SCRAM ต้องการระดับของการโต้ตอบซึ่งเป็นเรื่องยากมากที่จะบรรลุผลใน sed (แต่ก็เป็นไปไม่ได้ เราจะ "เพียงแค่" ต้องใช้ base64 และ sha1-hmac ใน sed)
- เนื่องจาก XMPP เป็นโปรโตคอลที่ไคลเอ็นต์พูดก่อน เราจึงต้องส่งอินพุตเริ่มต้นบางส่วนเพื่อให้ไคลเอ็นต์สร้าง "บรรทัด" ของเอาต์พุต (ส่วนหัวของสตรีม) เราทำสิ่งนั้นด้วย bash และใช้โอกาสนั้นเพื่อส่งการกำหนดค่าบางอย่างไปยังโปรแกรม sed (ได้แก่ JID และสตริงการตรวจสอบสิทธิ์)
ข้อควรพิจารณาในการออกแบบ
- เราพิจารณาใช้
xml2
เพื่อแปลงสตรีม XML เป็นกิจกรรม อย่างไรก็ตาม ปรากฎว่า 2xm[
ไม่ชอบการรีเซ็ตสตรีม นอกจากนี้ การใช้วิธี tr
ยังช่วยให้เราตรวจจับจุดสิ้นสุดขององค์ประกอบได้ ซึ่งมีประโยชน์สำหรับวัตถุประสงค์ต่างๆ