我正在为 PowerDNS 编写 lua 脚本。
当我的脚本拦截 DNS 查询时,我希望为每个 DNS 查询获取某种唯一 ID。
我正在使用“preresolve”和“postresolve”函数拦截 DNS 查询,它们没有任何唯一 ID 来表示它正在处理的当前 DNS 查询。
我看到在使用函数“ ipfilter ”时,我可以使用GetID() 函数来获取DNS 查询ID。“preresolve”和“postresolve”功能中缺少此功能。
有任何想法吗?
从 PDNS Recursor 版本 3.0 升级到 4.0 后,我找到了答案。
在版本 4 中,'preresolve' 和 'postresolve' 函数获取 dq (DNSQuestion) 对象,dq 对象包含两个有助于查询 ID 的字段。
一,您可以通过获取值来使用原始查询ID
dq:getDH():getID()
第二,dq 可以包含一个自定义 LUA 对象引用,该引用在 dq 对象的整个生命周期中都是持久的。
local data={}
data["domaindetails"]= dq.udpAnswer
dq.data=data
在他们的脚本手册中找到更多详细信息: https ://doc.powerdns.com/md/recursor/scripting/#the-dnsquestion-dq-object