Крестики-нолики на DNS

от автора

Изначально я хотел назвать этот пост «игра в 0 строк HTML, JS и CSS», вдохновлённый этим постом, но это было бы слишком громко. Так или иначе, сильно ухудшив UX, я получил крестики-нолики, работающие исключительно силой 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 предлагает использовать более удобный для игры вариант с ключом +short:

$ dig +short TXT @ns.f1remoon.com 9.4.5.game.f1remoon.com. "o" "_" "x" "x" "x" "o" "o" "_" "_"


ссылка на оригинал статьи https://habr.com/post/419333/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *