Aqui, dns.
repos
hamlet
Y sobre todo esto: sé sincero contigo mismo, y de ello ha de seguirse, como la noche sigue al día, que no podrás entonces ser falso con ninguno.
que es dns
- https://jvns.ca/blog/2023/05/08/new-talk-learning-dns-in-10-years/
- https://www.cloudflare.com/learning/dns/what-is-dns/
- https://github.com/EmilHernvall/dnsguide/blob/master/chapter1.md
dig y nc
Voy a empezar enseñando una tecnica que he visto que varios tutoriales utilizan para capturar paquetes. Es una tecnica bastante común cuando quieres hacer troubleshooting de paquetes (udl o tcp). También podríamos utilizar Wireshark.
Por un lado haré una petición a mi localhost:1053 preguntando por la ip de google.com
dig +retry=0 -p 1053 @127.0.0.1 +noedns google.com
Por otro lado levanto un servidor con nc y re-dirijo el trafico a un archivo:
nc -u -l 1053 > query_packet.txt
Realizamos la petición y hacemos un hexdump:
flox [default] ➜ rust-dns git:(master) ✗ hexdump -C query_packet.txt
00000000 27 02 01 00 00 01 00 00 00 00 00 00 06 67 6f 6f |'............goo|
00000010 67 6c 65 03 63 6f 6d 00 00 01 00 01 |gle.com.....|
0000001c
Estos bytes, son la petición DNS. Si agarramos el standard y vamos comparando byte a byte lo que significa veremos su significado. Simple.
todo
Vamos entonces a escribir un servidor, para los casos de uso básicos de DNS.
- enviar queries de dns
- recibir queries de servidores dns
- enviar y recibir, repulsivamente, queries dns