Así que intenté buscar respuestas en la web pero no encontré ninguna.
¿Hay alguna forma de rastrear qué aplicación o archivo exe hizo que la computadora realizara una consulta de DNS específica?
Cualquier aplicación puede enviar fácilmente cualquier solicitud de resolución de DNS. Hay numerosas bibliotecas disponibles y los programadores pueden elegir realizar las resoluciones de la forma que deseen. Por ejemplo, en Python es una línea de código (quizás dos)
import dns.resolver
answers = dns.resolver.query('dnspython.org', 'MX')
Para vincular una aplicación real al UDP (suponiendo que esté usando el protocolo UDP predeterminado), la "sesión" que usó para enviar la solicitud es una tarea bastante difícil. Existen herramientas disponibles para diferentes sistemas operativos (por ejemplo, HomeProject o Microsoft Network Monitor) que pueden ayudar en esa dirección.
Tenga en cuenta que el proceso de resolución toma aproximadamente unos milisegundos (el DNS compite entre los protocolos más rápidos). El proceso de resolver un nombre de dominio para obtener la dirección IP a la que se resuelve, se está delegando desde stub resolver
(la "aplicación" que necesita la dirección IP para un nombre de dominio correspondiente) a un Recursive DNS Server
(también conocido como% código%). Un ejemplo de dicho servidor es el DNS público de Google, en RDNS
y 8.8.8.8
. Es muy probable que su ISP proporcione las direcciones IP de los servidores 8.8.4.4
que opera a su módem / enrutador doméstico, que los enviará a los dispositivos conectados a él (por ejemplo, a través de RDNS
).
Entre otras cosas, los servidores DHCP
almacenarán un nombre de dominio coincidente con el par de direcciones IP en su memoria interna RDNS
durante un tiempo determinado ( cache
, Time To Live). Esto significa que si realiza una solicitud de resolución dentro de ese período de tiempo, el servidor TTL
no bajará el proceso de resolución recursiva , pero responderá con la dirección IP correspondiente que ya tiene en la memoria. Por lo tanto, RDNS
obtendrá una respuesta extremadamente rápida. Por ejemplo, este es el tiempo que toma realizar una resolución:
La primera vez
;; Query time: 248 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
La segunda vez
;; Query time: 40 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
Lo que está tratando de hacer es monitorear qué aplicación abrió un socket UDP en su sistema y escuchó ese socket por una respuesta, durante menos de 3 segundos (el valor de tiempo de espera predeterminado para DNS). Si no está supervisando continuamente tanto el tráfico como los procesos que escuchan puertos específicos, entonces, por lo que sé, no hay forma de obtener la coincidencia. Para uso futuro, podrá hacer coincidir un proceso y una solicitud de resolución de DNS correspondiente, mirando los puertos utilizados. Por ejemplo, si stub resolver
abre el puerto application 1
y ve una solicitud de DNS en el tráfico de la red al mismo tiempo con 7788
igual a source port
(el destino probablemente será 7788
), entonces tiene el aplicación!