px普贤教程PuXian
普贤教程 › 包参考

dns 包

轻量 DNS 客户端(UDP,A/AAAA/CNAME/NS/MX/TXT/PTR)

对照 Go miekg/dns、Python dnspython 心智:

项值
包名dns
版本0.2.0
可用版本0.1.0 / 0.2.0
入口dns.px
分类网络与协议
文件数 / 行数1 / 371

安装与引入

bash
pxpkg init          # 首次
pxpkg add dns@0.2.0
pxpkg install
px
import dns
所属分类教程:网络与协议

公开接口

函数参数
dns_qtype_codeqtype_str
dns_name_encodename
dns_queryserver, name, qtype_str
dns_resolve_aserver, name
其余 20 个 def(内部与辅助,可直接调用但不属稳定接口)
函数参数
o_make_querytid, qname, qtype
o_u8pkt, off
o_u16pkt, off
o_u32pkt, off
o_read_namepkt, off
o_skip_questionpkt
o_parse_rdatapkt, off, rdlen, rtype
o_parse_responsepkt
dns_qtype_soa
dns_resolve_aaaaserver, name
dns_resolve_mxserver, name
dns_resolve_txtserver, name
dns_resolve_cnameserver, name
dns_resolve_nsserver, name
dns_resolve_ptrserver, name
dns_query_multiservers, name, qtype_str
dns_cache_keyname, qtype_str
dns_query_cachedcache, server, name, qtype_str, ttl_cache
dns_reverse_ipip
dns_resolve_reverseserver, ip

包内说明(源码头注释)

text
============================================================
普贤生态库:registry/dns —— 轻量 DNS 客户端(UDP,A/AAAA/CNAME/NS/MX/TXT/PTR)
------------------------------------------------------------
对照 Go miekg/dns、Python dnspython 心智:
dns_name_encode(name)          → Ok(bytes) | Err   # 域名 → 查询标签(RFC 1035 §3.1)
dns_query(server, name[, qtype_str]) → Ok(dict) | Err
dns_resolve_a(server, name)    → Ok([ip...]) | Err  # A 记录便捷取 IP 列表
dns_qtype_code(name)           → Ok(int) | Err      # "A"→1 ... 未知 Err
返回 dict:
{ status, rcode, answers: [ {name, type, ttl, data} ... ] }
status ∈ "noerror" | "nxdomain" | "servfail" | "refused" | "truncated" | "rcode:N" | "error"
说明:
- 查询 UDP/53(rd=1, qclass=IN);响应 4096 字节上限;TC 置位 → status="truncated"。
- 名字压缩(0xC0 指针)递归/跳转解析,跳转上限 128 防环。
- rdata 按类型:A → "1.2.3.4";AAAA → IPv6 文本;CNAME/NS/PTR → 域名;
MX → "10 mail.example.com.";TXT → [多个字符串]。
- 服务端不可达/超时由调用方控制(无超时 native;udp_recv 阻塞)。
============================================================