dns-over-ping(8)
Hemos oído hablar de DNS-over-HTTP, DNS-over-TLS, DNS-over-GRPC… y hoy traemos DNS-over-ping gracias a una pequeña herramienta de James Williams que básicamente nos permite resolver nombres directamente desde la herramienta ping estándar de inetutils/iptools.
Primero lanzamos levantamos el servidor:
$ git clone https://github.com/jamespwilliams/dns-over-ping.git
$ cd dns-over-ping
$ go build ./cmd/pingdns
$ sudo setcap cap_net_raw+ep pingdns
$ ./pingdns
Luego en otra shell ejecutamos:
$ ping localhost -4 -p «$(printf «hackplayers.com?» | xxd -p -c0)» -c1
PATTERN: 0x6861636b706c61796572732e636f6d3f
PING localhost (127.0.0.1) 56(84) bytes of data.
72 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=1669247245496 ms
wrong data byte #16 should be 0x68 but was 0xd8
#16 d8 ef 26 15 d8 ef 20 15 d8 ef 22 15 d8 ef 24 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#48 0 0 0 0 0 0 0 0
— localhost ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1669247245496.409/1669247245496.409/1669247245496.409/0.000 ms
Y luego simplemente vemos la resolución en el wrong data del volcado en hexadecimal:
d8 ef 26 15
0xd8.0xef.0x26.0x15
216.239.38.21
Opcionalmente podemos evitar que nuestra máquina envíe sus propias respuestas ICMP a las solicitudes de eco ICMP entrantes:
# echo «1» > /proc/sys/net/ipv4/icmp_echo_ignore_all
Limitaciones
– Solo funcionan resoluciones de registros A
– Los nombres pueden tener una longitud máxima de 15 bytes.
– Se pueden devolver como máximo 14 IPs
Ninguna de estas son limitaciones inherentes de ICMP, sino que son limitaciones de la herramienta de ping y su salida. Se podría hacer que DNS-over-ICMP funcione bastante bien (pero sería menos divertido).
Powered by WPeMatico