ローカルネットワークでBINDをDNSサーバーに設定し、ルックアップ時にスクリプトを実行できますか?
着信DNS検索に基づいてPythonまたはBashスクリプトを実行したいと思います。この問題をどのように解決しますか?
Bindで実装できる場合は、どのように実装できるかを教えてください。そうでない場合は、Ubuntuで実行されている他のDNSサーバー実装で実装できるかどうかを教えてください。
とても感謝しています。
ベストアンサー1
BINDログを解析したり、BINDをまったく妨げたりする必要がない2つの追加オプションを考えることができます。
1)ポートミラーリング - パケットをコピーしてアプリケーションがリッスンしている別のポートに送信し、DNS要求を解析してアクションを実行します。dpkt
あるいは、scapy
同様のパケット作成ライブラリが生の要求を解析するのに役立ちます。
2) いくつかのタイプのパケットスニッフィングライブラリを使用して要求を受動的に監視します。以下は使用例です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)
明らかに、これは単なる原始的な例です。照会されるドメインの名前だけを印刷しますが、もちろん多くのロジックを追加することもできます。 scapy ドキュメントを参照すると、DNS 要求のすべてのフィールドが使用できることがわかります。