如何在PowerDNS Recursor的Lua脚本中将DNS记录类型转为字符串
解决PowerDNS Recursor Lua脚本中DNS类型整数转字符串的问题
PowerDNS Recursor的Lua API提供了**typeToString()**内置函数,可直接将DNS类型的整数转换为对应的字符串名称(如1→"A"、5→"CNAME"),这是最简便的解决方案。
修改后的完整脚本
function postresolve(dq) pdnslog("postresolve called for "..dq.qname:toString()) local records = dq:getRecords() for k,v in pairs(records) do -- 使用typeToString将整数类型转为字符串 local typeStr = typeToString(v.type) pdnslog(k.." "..v.name:toString().." "..typeStr.." "..v:getContent()) end -- default, do not rewrite this response return false end
备选方案:自定义类型映射表
如果你的PowerDNS版本未提供typeToString()函数,可以手动创建一个DNS类型映射表,按需添加需要支持的类型:
-- 自定义DNS类型映射,可根据需求扩展更多类型 local dnsTypeMap = { [1] = "A", [5] = "CNAME", [28] = "AAAA", [15] = "MX", [16] = "TXT" } function postresolve(dq) pdnslog("postresolve called for "..dq.qname:toString()) local records = dq:getRecords() for k,v in pairs(records) do -- 从映射表获取类型字符串,不存在则保留原整数 local typeStr = dnsTypeMap[v.type] or v.type pdnslog(k.." "..v.name:toString().." "..typeStr.." "..v:getContent()) end -- default, do not rewrite this response return false end
效果验证
修改后日志会显示可读性更强的类型名称,例如:
Jan 13 10:31:08 resolv-dns-2 pdns_recursor[12973]: Jan 13 09:31:08 1 login.microsoftonline.com. CNAME login.mso.msidentity.com. Jan 13 10:31:08 resolv-dns-2 pdns_recursor[12973]: Jan 13 09:31:08 4 www.tm.ak.prd.aadg.akadns.net. A 20.190.159.68
内容的提问来源于stack exchange,提问作者Lollypop
相关产品推荐
相关产品推荐

