Протокол DNS довольно прост, все, что вам нужно, это возможность перехватывать UDP-запросы. Получив запрос, вы можете использовать соответствующий ответ или итеративные / рекурсивные методы для получения незнакомых записей DNS. [Это требует предварительного знания DNS-серверов]
RFC DNS
О DNS
JDNSS может быть то, что вы ищете. Он размещен на SF и является открытым исходным кодом.