تيك تاك تو على DNS

في البداية ، أردت تسمية هذه المشاركة "لعبة في 0 سطر من HTML و JS و CSS" ، مستوحاة من هذا المنشور ، ولكنها ستكون عالية جدًا. بطريقة أو بأخرى ، مما أدى إلى تدهور كبير في تجربة المستخدم ، حصلت على تيك تاك تو ، وأعمل حصريًا بقوة بروتوكول DNS.



يبدو الأمر مخيفًا بالنسبة لمستخدم غير مستعد ، ولكن حتى المتصفح ليس ضروريًا للعبة.

للدخول إلى اللعبة ، تحتاج إلى تشغيل أمر يتضمن الوصول إلى خادم DNS الخاص بي:

$ dig @ns.f1remoon.com game.f1remoon.com. TXT 

لقد قدمت أيضًا القليل من المساعدة ، والتي تتوفر في سجلات TXT لنطاق help.game.f1remoon.com :



كيف يعمل؟


في البداية حاولت فقط تكوين bind9 بشكل صحيح ، لكنني شعرت بخيبة أمل كبيرة: كان ترتيب إصدار سجلات TXT عشوائيًا. هذا ، بالطبع ، جلب بعض الغريبة للعبة ، لكنه كان غير مقبول على الإطلاق. كان علي أن أسقط الفكرة وأنظر إلى خادم DNS مكتوب ذاتيًا. مسلحين بالرغبة في تعلم شيء جديد ، أخذت golang ومكتبة Go DNS وحصلت على خادم بسيط ، لا يختلف كثيرًا عن الأمثلة.

كان التحدي التالي هو كل تركيبات اللعبة. إليكم شكرًا كبيرًا لـ Sirion : لقد أخذت ملفات html الخاصة بي وترجمتها إلى تنسيق أعجبني.

نظرًا لأن الأمر dig ، على عكس المتصفح ، لا يخزن عنوان url ولا يسمح بدس الحقل ، سيتعين على المستخدم ترك هذا. بالنسبة للعبة ، تم وضع علامة على الحقل على أنه numpad:

 7 8 9 4 5 6 1 2 3 

عند طلب خطوة ، تحتاج دائمًا إلى إعطاء السجل الكامل للتحركات في الاتجاه المعاكس ، على سبيل المثال ، سيبدو الأمر الخاص بالحركة الثالثة في الخلية "9" كما يلي:

 $ dig @ns.f1remoon.com 9.4.5.game.f1remoon.com. TXT 

اختتام كامل لثلاث حركات
 $ dig @ns.f1remoon.com 5.game.f1remoon.com. TXT ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @ns.f1remoon.com 5.game.f1remoon.com. TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12656 ;; flags: qr rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;5.game.f1remoon.com. IN TXT ;; ANSWER SECTION: 5.game.f1remoon.com. 0 IN TXT "o" "_" "_" 5.game.f1remoon.com. 0 IN TXT "_" "x" "_" 5.game.f1remoon.com. 0 IN TXT "_" "_" "_" ;; Query time: 135 msec ;; SERVER: 159.65.145.145#53(159.65.145.145) ;; WHEN: Sun Aug 05 20:16:16 UTC 2018 ;; MSG SIZE rcvd: 148 $ dig @ns.f1remoon.com 4.5.game.f1remoon.com. TXT ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @ns.f1remoon.com 4.5.game.f1remoon.com. TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9301 ;; flags: qr rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;4.5.game.f1remoon.com. IN TXT ;; ANSWER SECTION: 4.5.game.f1remoon.com. 0 IN TXT "o" "_" "_" 4.5.game.f1remoon.com. 0 IN TXT "x" "x" "o" 4.5.game.f1remoon.com. 0 IN TXT "_" "_" "_" ;; Query time: 131 msec ;; SERVER: 159.65.145.145#53(159.65.145.145) ;; WHEN: Sun Aug 05 20:16:23 UTC 2018 ;; MSG SIZE rcvd: 156 $ dig @ns.f1remoon.com 9.4.5.game.f1remoon.com. TXT ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @ns.f1remoon.com 9.4.5.game.f1remoon.com. TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40450 ;; flags: qr rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;9.4.5.game.f1remoon.com. IN TXT ;; ANSWER SECTION: 9.4.5.game.f1remoon.com. 0 IN TXT "o" "_" "x" 9.4.5.game.f1remoon.com. 0 IN TXT "x" "x" "o" 9.4.5.game.f1remoon.com. 0 IN TXT "o" "_" "_" ;; Query time: 131 msec ;; SERVER: 159.65.145.145#53(159.65.145.145) ;; WHEN: Sun Aug 05 20:16:30 UTC 2018 ;; MSG SIZE rcvd: 164 $ 


مستودع برمز: github.com/Firemoon777/tic-tac-toe-dns

UPD: يقترح Prototik استخدام خيار أكثر ملاءمة للعبة مع مفتاح + قصير:
 $ dig +short TXT @ns.f1remoon.com 9.4.5.game.f1remoon.com. "o" "_" "x" "x" "x" "o" "o" "_" "_" 

Source: https://habr.com/ru/post/ar419333/


All Articles