Tic Tac Toe di DNS

Awalnya, saya ingin menyebut posting ini “permainan dalam 0 baris HTML, JS dan CSS”, terinspirasi oleh posting ini , tetapi itu akan terlalu keras. Dengan satu atau lain cara, sangat memburuk UX, saya mendapatkan tic-tac-toe, bekerja secara eksklusif oleh kekuatan protokol DNS.



Untuk pengguna yang tidak siap, tampilannya tentu saja menakutkan, tetapi bahkan browser tidak diperlukan untuk permainan.

Untuk memasuki permainan, Anda perlu menjalankan perintah yang melibatkan mengakses server dns saya:

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

Saya juga melakukan sedikit bantuan, yang tersedia dalam catatan TXT untuk domain help.game.f1remoon.com :



Bagaimana cara kerjanya?


Pada awalnya saya mencoba untuk mengkonfigurasi bind9 dengan benar, tetapi sangat kecewa: urutan penerbitan catatan TXT adalah acak. Ini, tentu saja, membawa beberapa eksotisme ke dalam permainan, tetapi itu benar-benar tidak dapat diterima. Saya harus membuang ide dan melihat ke server DNS yang ditulis sendiri. Berbekal keinginan untuk mempelajari sesuatu yang baru, saya mengambil golang dan perpustakaan Go DNS dan saya mendapatkan server yang sederhana, tidak jauh berbeda dengan contoh-contohnya.

Tantangan selanjutnya adalah semua kombinasi permainan. Ini adalah ucapan terima kasih yang sebesar-besarnya kepada Sirion : Saya mengambil file html-nya dan menerjemahkannya ke dalam format yang saya sukai.

Karena perintah penggalian, tidak seperti browser, tidak menyimpan url dan tidak mengijinkan mencari-cari di lapangan, pengguna harus meninggalkan ini. Untuk permainan, bidang ditandai sebagai numpad:

 7 8 9 4 5 6 1 2 3 

Saat meminta gerakan, Anda selalu perlu memberikan riwayat lengkap gerakan yang berlawanan, misalnya, perintah untuk gerakan ketiga di sel "9" akan terlihat seperti ini:

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

Kesimpulan lengkap dari tiga langkah
 $ 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 $ 


Repositori dengan kode: github.com/Firemoon777/tic-tac-toe-dns

UPD: Prototik menyarankan menggunakan opsi yang lebih nyaman untuk permainan dengan kunci + pendek:
 $ dig +short TXT @ns.f1remoon.com 9.4.5.game.f1remoon.com. "o" "_" "x" "x" "x" "o" "o" "_" "_" 

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


All Articles