¿Cómo reunir las solicitudes de registro DNS A?


15

Necesito registrar todos los Aregistros salientes en una PC RedHat. Intenté usar tcpdump:

tcpdumpdns=OUTPUT-FILENAME-HERE
nohup tcpdump -K dst port 53 -w $tcpdumpdns > /dev/null 2>&1 &

Crea un archivo de salida como:

19:26:12.185392 IP 172.16.0.6.57977 > google-public-dns-a.google.com.domain: 51198+ A? yahoo.com. (27)

Entonces necesito procesar eso para obtener yahoo.com:

echo $tcpdumpdns | awk '/ A\? / {u = NF - 1; print $u}' | sed 's/^www.//g; s/.$//g' | sort -u

¿Existe alguna solución mejor para reunir todas las Asolicitudes de registros salientes ?

ps: la recopilación de registros DNS A solo es necesaria para tener una lista actualizada de sitios web a los que se pueda acceder a través de HTTPS. Entonces puedo generar archivos xml para HTTPSEverywhere Firefox Add-on. Entonces esto es solo una parte de un guión.


¿Qué tiene de malo la solución que proporcionó?
— Michael Mrozek

¿tiene una interfaz gráfica de usuario GUI, si es así, utilizando wireshark-gtk es una solución más fácil, ya que puede filtrar allí con mucha facilidad.
— Hanan N.

@Hanan N .: GUI no es una opción. Esto es necesario para ser automático.
— LanceBaynes

@Michael Mrozek: espero que nada. Pero pregunté porque estoy abierto a soluciones alternativas.
— LanceBaynes

Respuestas:


12

Usa Wireshark:

tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"

2
Me saletshark: "A" cannot be found among the possible values for dns.qry.type.
— Jack O'Connor

3
Para abordar el problema de @ JackO'Connor, el valor decimal para un registro DNS tipo A es 1. Por lo tanto, esto debería funcionar:tshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
— Rolinh

13

Si no tienes cables instalados, entonces

tcpdumpdns=/tmp/tcpdumps
tcpdump -lvi any "udp port 53" | tee $tcpdumpdns

debería funcionar para ti. Como deseaba limitar la salida al penúltimo valor, analizaría su archivo de registro con:

grep -E 'A\?' $tcpdumpdns |sed -e 's/^.*A? //' -e 's/ .*//'|sort -u

Si lo quieres en vivo, entonces:

tcpdump -lvi any "udp port 53" 2>/dev/null|grep -E 'A\?'|awk '{print $(NF-1)}'

debería hacerlo, (aquí sed y awk son intercambiables; y elegiría awk).


grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -ues menos para escribir
— Alexx Roche
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.