You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:20:38