Eu posso pensar em duas opções adicionais que não exigem a análise de logs do BIND ou a interferência no BIND.
1) Espelhamento de porta - duplique pacotes e envie-os para uma porta separada onde um aplicativo está escutando, analisando as solicitações de DNS e realizando ações. dpkt
ou scapy
ou bibliotecas de criação de pacotes semelhantes ajudarão você a analisar as solicitações brutas.
2) Use algum tipo de biblioteca de sniffing de pacotes para monitorar passivamente as solicitações. Aqui está um exemplo usando scapy
:
from scapy.all import *
def handler(req):
if req.haslayer(DNS) and req.getlayer(DNS).qr == 0:
ip = req.getlayer(IP)
dns = req.getlayer(DNS)
q = dns.qd
print q.qname # simply print domain name
if __name__ == '__main__':
sniff(iface="eth0", filter="udp and port 53", prn=handler, store=0)
Obviamente, este é apenas um exemplo primitivo. Apenas imprime o nome do domínio que foi consultado, mas é claro que você pode adicionar uma grande quantidade de lógica. Se você fizer referência à documentação da scapy, verá que todos os campos da solicitação de DNS estão prontamente disponíveis.