Tic Tac Toe en DNS

Inicialmente, quería llamar a esta publicación "un juego en 0 líneas de HTML, JS y CSS", inspirado en esta publicación , pero sería demasiado ruidoso. De una forma u otra, deteriorando enormemente el UX, obtuve tic-tac-toe, trabajando exclusivamente por el poder del protocolo DNS.



Para un usuario no preparado, parece, por supuesto, aterrador, pero ni siquiera se necesita un navegador para el juego.

Para ingresar al juego, debes ejecutar un comando que implique acceder a mi servidor DNS:

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

También hice un poco de ayuda, que está disponible en los registros TXT para el dominio help.game.f1remoon.com :



Como funciona


Al principio, intenté configurar bind9 correctamente, pero me decepcionó: el orden de emisión de los registros TXT era aleatorio. Esto, por supuesto, trajo algo de exotismo al juego, pero fue absolutamente inaceptable. Tuve que abandonar la idea y mirar hacia un servidor DNS auto-escrito. Armado con el deseo de aprender algo nuevo, tomé Golang y la biblioteca Go DNS y obtuve un servidor simple, no muy diferente de los ejemplos.

El siguiente desafío fue todas las combinaciones del juego. Aquí hay un gran agradecimiento a Sirion : tomé sus archivos html y los traduje a un formato que me gustó.

Dado que el comando de excavación, a diferencia del navegador, no almacena la URL y no permite hurgar en el campo, el usuario tendrá que dejar esto. Para el juego, el campo se marcó como teclado numérico:

 7 8 9 4 5 6 1 2 3 

Al solicitar un movimiento, siempre debe proporcionar el historial completo de movimientos en el lado opuesto, por ejemplo, el comando para el tercer movimiento en la celda "9" se verá así:

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

Conclusión completa de tres movimientos.
 $ 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 $ 


Repositorio con código: github.com/Firemoon777/tic-tac-toe-dns

UPD: Prototik sugiere usar una opción más conveniente para el juego con la tecla + breve:
 $ dig +short TXT @ns.f1remoon.com 9.4.5.game.f1remoon.com. "o" "_" "x" "x" "x" "o" "o" "_" "_" 

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


All Articles