Così ho provato a cercare sul Web le risposte ma non ne ho trovato.
C'è un modo per rintracciare quale file o applicazione exe ha causato al computer di effettuare una query DNS specifica?
Qualsiasi applicazione può facilmente inviare qualsiasi richiesta di risoluzione DNS. Sono disponibili numerose librerie e i programmatori possono scegliere di eseguire le risoluzioni in qualsiasi modo. Ad esempio, in Python è una riga di codice (forse due)
import dns.resolver
answers = dns.resolver.query('dnspython.org', 'MX')
Per collegare un'applicazione reale all'UDP (supponendo che stia usando il protocollo UDP predefinito) la "sessione" utilizzata per inviare la richiesta, è un compito piuttosto difficile. Esistono strumenti disponibili per diversi sistemi operativi (ad esempio HomeProject o Microsoft Network Monitor) che possono aiutare in questa direzione.
Ricorda che il processo di risoluzione richiede all'incirca alcuni millisecondi (il DNS è in competizione tra i protocolli più veloci). Il processo di risoluzione di un nome di dominio per ottenere l'indirizzo IP a cui si risolve, è delegato dal stub resolver
("l'applicazione" che richiede l'indirizzo IP per un nome di dominio corrispondente) a un Recursive DNS Server
(alias% codice%). Un esempio di tale server è il DNS pubblico di Google, a RDNS
e 8.8.8.8
. Molto probabilmente il tuo ISP fornirà gli indirizzi IP dei server 8.8.4.4
che opera sul tuo modem / router di casa, che li invierà ai dispositivi ad esso collegati (tramite RDNS
per esempio).
Tra le altre cose DHCP
server memorizzerà un nome di dominio corrispondente alla coppia indirizzo IP nella loro memoria interna RDNS
per un certo periodo di tempo ( cache
, Time To Live). Ciò significa che se si esegue una richiesta di risoluzione entro tale intervallo di tempo, il server TTL
non scenderà processo di risoluzione ricorsiva , ma risponderà con l'indirizzo IP corrispondente già presente in memoria. Pertanto, il RDNS
otterrà una risposta estremamente veloce. Ad esempio, questo è il tempo necessario per eseguire una risoluzione:
La prima volta
;; Query time: 248 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
La seconda volta
;; Query time: 40 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
Quello che stai cercando di fare è monitorare quale applicazione ha aperto un socket UDP sul tuo sistema e ascoltato quel socket per una risposta, per meno di 3 secondi (il valore di timeout predefinito per DNS). Se non stai monitorando continuamente sia il traffico che i processi ascoltando porte specifiche, allora per quanto ne so, non c'è modo di ottenere la corrispondenza. Per uso futuro, sarà possibile abbinare un processo e una richiesta di risoluzione DNS corrispondente, osservando le porte utilizzate. Ad esempio, se stub resolver
apre la porta application 1
e vedi una richiesta DNS nel traffico di rete allo stesso tempo con 7788
uguale a source port
(la destinazione sarà molto probabilmente 7788
), allora hai il applicazione!