Salt 执行模块 dig 完全指南用 Salt 批量解析 DNS 记录A/AAAA/CNAME/NS/SPF/MX/TXT/PTR【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址: https://gitcode.com/gh_mirrors/sa/salt本文聚焦于 Salt 项目中的salt.modules.dig执行模块Execution Module这是一套通用 DNS 工具集Compendium of generic DNS utilities它封装了系统自带的dig命令行工具让运维人员可以在任意受管 Minion 上通过salt命令批量完成 A、AAAA、CNAME、NS、SPF、MX、TXT、PTR 等 DNS 记录的查询与解析。读完本文你将掌握每个函数的确切用法、返回结构、nameserver指定方式以及如何把它嵌入 state 或 Reactor 流程做 DNS 健康巡检与邮件域配置核查。本文对应的官方 API 文档入口为 salt.modules.dig该页通过 Sphinxautomodule指令直接渲染salt/modules/dig.py的全部 docstring核心实现位于 salt/modules/dig.py配套单元测试位于 test_dig.py模块在模块索引中的登记见 doc/ref/modules/all/index.rst。一、模块前提必须安装 dig 二进制模块 docstring 开门见山The dig command line tool must be installed in order to use this module.也就是说本模块不实现 DNS 协议解析逻辑而是包装系统上的dig可执行文件。对应地模块通过__virtual__()钩子做加载条件判断salt/modules/dig.pydef __virtual__(): Only load module if dig binary is present if salt.utils.path.which(dig): return __virtualname__ return ( False, The dig execution module cannot be loaded: the dig binary is not in the path., )模块虚拟名__virtualname__为dig即调用时使用salt target dig.xxx。若dig不在 PATH 中模块加载失败并返回说明性字符串此时执行salt target dig.check_ip 127.0.0.1会报模块不可用错误。因此在使用前需确保目标 Minion 已安装dnsutilsDebian/Ubuntu或bind-utilsRHEL/CentOS等提供dig命令的软件包。所有 DNS 查询函数最终都通过__salt__cmd.run_all以非 shell 方式python_shellFalse调用dig避免 shell 注入风险并统一约定只要dig进程返回码非 0函数即回退返回空列表源码中多处注释强调 In this case, 0 is not the same as False。二、IP 地址校验dig.check_ipcheck_ip是模块内的基础校验函数也暴露为可调用的执行函数用于判断一个字符串是否为合法的 IPv4 / IPv6 地址可附带 CIDR 前缀源码见 salt/modules/dig.py。salt ns1 dig.check_ip 127.0.0.1 salt ns1 dig.check_ip 1111:2222:3333:4444:5555:6666:7777:8888校验逻辑分三步以/为分隔符rsplit拆出地址与可选的子网前缀若传入的不是字符串如 None、数字直接返回False。对 IPv4前缀必须落在1 n 32区间不带前缀无/视为合法。对 IPv6前缀必须落在8 n 128区间不带前缀视为合法。底层有效性判定依赖salt.utils.network中的is_ipv4/is_ipv6见 salt/utils/network.py其实现使用 Python 标准库ipaddress.ip_address(...).version判断地址族并对ValueError兜底返回False。测试用例对此覆盖较全test_dig.pycheck_ip(127.0.0.1)→ Truecheck_ip(1111:2222:3333:4444:5555:6666:7777:8888)→ Truecheck_ip(2607:fa18:0:3::4)→ TrueIPv6 压缩写法同样支持check_ip(-127.0.0.1)→ Falsecheck_ip()→ False三、正向记录查询A / AAAA / CNAME3.1 dig.A —— IPv4 地址返回host的 A 记录永远返回列表Always returns a list源码见 salt/modules/dig.pysalt ns1 dig.A www.google.com实现要点拼装命令[dig, short, host, A]short让输出精简为纯地址列表。可选参数nameserver非空时追加nameserver用于指定上游 DNS 服务器。解析结果按行拆分后用check_ip逐条过滤只保留真正的 IP 地址行防止返回非 IP 的杂讯。dig返回码非 0 时告警并返回[]。对应测试 test_dig.py 验证对www.google.com返回包含 6 个 IPv4 地址的列表。3.2 dig.AAAA —— IPv6 地址与 A 完全对称返回host的 AAAA 记录列表源码见 salt/modules/dig.pysalt ns1 dig.AAAA www.google.com同样支持nameserver参数、check_ip过滤与失败回退[]。测试test_dig.py验证 IPv6 地址2607:f8b0:400f:801::1014能被正确解析并返回。3.3 dig.CNAME —— 别名记录自 3005 起提供CNAME在versionadded:: 3005加入返回host的 CNAME 记录源码见 salt/modules/dig.pysalt ns1 dig.CNAME mail.google.com与其他函数不同CNAME返回的是字符串而非列表return cmd[stdout]失败时返回空字符串。测试用例test_dig.py验证查询命中时返回形如bellanotte1986.github.io.的目标域名注意末尾点查询无记录时返回空字符串。四、反向解析dig.PTR自 3006.0 起提供PTR函数在versionadded:: 3006.0加入对应版本说明见 doc/topics/releases/3006.0.md用于反向地址解析源码见 salt/modules/dig.pysalt ns1 dig.PTR 1.2.3.4实现细节拼装命令[dig, short, -x, host]其中-x是 dig 的反向解析reverse lookup选项支持 IPv4 与 IPv6 地址。返回结果为按行拆分的列表测试中dig.PTR(8.8.8.8)返回[dns.google.]见 test_dig.py。同样支持nameserver参数与失败回退[]。五、权威域名服务器dig.NSNS返回domain的权威名称服务器列表默认自动把 NS 主机名解析为 IP源码见 salt/modules/dig.pysalt ns1 dig.NS google.com参数说明参数类型默认值说明domainstr必填要查询的域名resolveboolTrue是否将 NS 主机名解析为 IP 地址nameserverstrNone指定上游 DNS 服务器追加nameserverresolveTrue默认先执行dig short domain NS拿到 NS 主机名列表再对每个主机名调用本模块的A()函数解析出 IP并摊平成单个 IP 列表返回。resolveFalse直接返回 NS 主机名字符串列表如[ns4.google.com.]。对应测试test_dig.py通过 mock 内部的A()返回值验证了NS(google.com)的默认解析路径。六、邮件域核查dig.MX 与 dig.TXT6.1 dig.MX —— 邮件交换记录MX返回domain的 MX 记录返回值为列表的列表每个子列表形如[优先级, 服务器主机名]源码见 salt/modules/dig.pysalt ns1 dig.MX google.com参数resolve默认False若为True则对每个 MX 主机名调用A()解析其 IP返回[优先级, IP]。源码注释明确了一个设计取舍解析模式下每个 MX 服务器只取第一个 IPA(x[1], nameserver)[0]因为实践中 MX 指向的服务器极少做 round-robin 多 IP这样能保持与不解析模式返回结构的一致性如果怀疑某个 MX 有多个 IP请不要依赖该内置解析而是单独解析。测试test_dig.py验证MX(google.com)返回形如[[10, aspmx.l.google.com.], [20, alt1.aspmx.l.google.com.], ...]的结构注意数字以字符串形式保留。6.2 dig.TXT —— 文本记录TXT返回host的 TXT 记录列表永远返回列表源码见 salt/modules/dig.pysalt ns1 dig.TXT google.com实现与 A/AAAA 同构拼装dig short host TXT支持nameserver按行拆分返回失败回退[]。它也是下方SPF函数的底层依赖。七、SPF 记录解析dig.SPF模块最有特色的函数SPF返回domain的 SPF 记录中所允许的 IPv4/IPv6 网段列表是模块中逻辑最复杂的函数源码见 salt/modules/dig.pysalt ns1 dig.SPF google.com7.1 参数与自动降级机制record参数默认SPF当 SPF 记录查询结果为空时自动改查 TXT 记录SPF 记录常以 TXT 形式发布若明确知道该域只用 TXT直接传TXT可省一次查询。兜底逻辑if result[stdout] and record SPF: return SPF(domain, TXT, nameserver)。7.2 解析流程去除输出中的双引号并按空白拆分re.sub(, , stdout).split()。首段必须是vspf1否则返回[]。若第二段以redirect开头则对redirect之后 9 个字符起的域名递归查询SPF redirect 机制。其余段用正则(?:\|~)?(ip[46]|include):(.)匹配命中include:机制 → 对目标域递归调用 SPF并把结果合并命中ip4:/ip6:机制 → 用check_ip校验网段合法后加入结果不匹配的段如a、mx、?all、~all等直接跳过。7.3 测试用例印证test_dig.py 中的SpfValues夹具模拟了多轮 dig 输出验证了三种典型场景普通域foo.comvspf1 ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all→ 返回[216.73.93.70/31, 216.73.93.72/31]include机制域xmission.com先查 TXT 得到vspf1 a mx include:_spf.xmission.com ?all再递归_spf.xmission.com得到ip4:198.60.22.0/24与ip4:166.70.13.0/24最终合并返回这两个网段redirect机制域xmission-redirect.comvspf1 redirect_spf.xmission.com触发对_spf.xmission.com的递归查询同样返回上述两个网段。这一实现让运维人员无需手工追踪 include/redirect 链即可拿到域名最终允许发信的全部 IP 网段非常适合邮件域 SPF 合规审计。八、小写别名约定Salt 执行函数遵循小写命名约定因此模块在文件末尾定义了一批别名salt/modules/dig.py# Let lowercase work, since that is the convention for Salt functions a A ptr PTR aaaa AAAA cname CNAME ns NS spf SPF mx MX这也解释了 API 文档页中:exclude-members: a, aaaa, ns, spf, mx的原因这些名字只是别名Sphinx 自动文档生成时将其排除以避免重复渲染。实际使用中dig.a与dig.A、dig.ns与dig.NS完全等价而dig.check_ip与dig.TXT本身就是小写形式无需别名。九、使用场景与实战建议基于以上函数该模块在 Salt 管理体系中典型应用包括DNS 记录巡检用salt * dig.A www.example.com批量核对各 Minion 视角下域名解析结果快速定位内网 DNS 不一致问题通过nameserver参数可对比不同上游如内网 DNS 与公网 8.8.8.8的解析差异。邮件配置审计dig.MX domain resolveTrue获取邮件服务器实际 IPdig.SPF domain提取允许发信网段可用于校验邮件域配置与反垃圾邮件策略。State / Orchestrate 集成dig是标准执行模块可在 SLS 文件中通过module.run调用或结合 reactor 事件做自动化 DNS 健康检查返回值是标准 Python 结构列表/字符串可直接参与 Jinja 判断。可靠性注意所有函数在dig失败时返回空列表CNAME 返回空字符串并记录log.warning因此自动化流程中空结果既可能是无记录也可能是dig 执行失败编排时应结合cmd.run_all的返回码语义自行区分。十、源码速查能力源码位置测试位置模块加载条件__virtual__salt/modules/dig.py—IP 校验check_ipsalt/modules/dig.pytest_dig.pyA 记录salt/modules/dig.pytest_dig.pyPTR 反向解析salt/modules/dig.pytest_dig.pyAAAA 记录salt/modules/dig.pytest_dig.pyCNAME 记录salt/modules/dig.pytest_dig.pyNS 记录salt/modules/dig.pytest_dig.pySPF 记录salt/modules/dig.pytest_dig.pyMX 记录salt/modules/dig.pytest_dig.pyTXT 记录salt/modules/dig.py—小写别名salt/modules/dig.py—总而言之salt.modules.dig是一个小而精的执行模块全部功能建立在dig short之上通过统一的cmd.run_all调用、统一的失败回退策略、以及对 A/AAAA 结果做 IP 合法性过滤为 Salt 用户提供了稳定、可脚本化的 DNS 查询原语其中SPF的 include/redirect 递归解析和NS的自动解析是远超裸dig命令的增值能力可直接嵌入自动化运维流程。【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址: https://gitcode.com/gh_mirrors/sa/salt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
论文降重实用方法指南 高效规避重复率技巧分享 刚接触一个新领域,最怕的就是迷失在海量的外国文献里,读了很多篇还是理不清脉络。我曾经也以为“研究现状”只能靠逐篇阅读、手动总结,直到发现了一些能生成“知识图谱”的神器。它们能让你像开了上帝视角一样,瞬间看清一个领域的… · 2026/9/23 14:28:58
托福口语练习速查手册:5个Python脚本搞定录音分析 托福口语练习速查手册:5个Python脚本搞定录音分析 官方文档动辄几百页,翻到头疼还抓不住重点?别慌。直接上 速查手册 ,用5个Python脚本把托福口语练习的核心功能拆得明明白白。 项目目标:把“听”变成“看”… · 2026/9/23 14:28:57
版本升级API全变了?一文搞懂偷梁换柱避坑指南 版本升级API全变了?一文搞懂偷梁换柱避坑指南 版本升级后 API 全变了,代码跑一半直接报 AttributeError 或者 TypeError… · 2026/9/23 14:28:49
软件测试用例设计实战:等价类、边界值到场景法的完整方法论 做软件测试这些年,我面试过不少人,也带过不少新人。几乎每个来面试的人都会说自己“会写测试用例”,可真正到了项目里,能把用例写到“可直接执行、能发现缺陷、能沉淀复用”这个水准的,比想象中少得多。测试用例的设计… · 2026/9/23 16:40:47
燃料电池冷启动多物理场仿真与COMSOL建模实践 1. 燃料电池冷启动仿真概述燃料电池在低温环境下的冷启动过程,就像在寒冬腊月给一台精密仪器通电——既要保证足够的电化学反应速率,又要防止关键部件被冰晶破坏。COMSOL Multiphysics作为一款强大的多物理场仿真工具,能够完整模拟质子交换膜… · 2026/9/23 16:40:47
GitHub 漫游指南:以测试、CI、代码质量与模块化为核心构建高质量 GitHub 项目 GitHub 漫游指南:以测试、CI、代码质量与模块化为核心构建高质量 GitHub 项目 【免费下载链接】github GitHub 漫游指南- a Chinese ebook on how to build a good project on Github. Explore the users behavior. Find some thing interest. 项目地址: https://… · 2026/9/23 16:40:47
华为交换机路由器VLAN配置实例:从Access到VLANIF实战 简介:一份以华为路由器R2621与交换机S3026e为例的VLAN配置实战文档,面向网络工程初学者、运维人员及华为设备认证备考者,解决多VLAN组网中的地址规划、虚拟网与物理网互通及访问控制问题。文档从4台PC的实验拓扑出发,给出各终端IP… · 2026/9/23 16:40:32
博客系统开发实战:Vue3与Pinia构建轻量级个人站点 我无法根据当前输入内容生成符合要求的博文。原因如下:项目标题“屌丝网,上线了 哈哈,”属于无实质技术/功能指向的网络调侃式表达,缺乏明确领域归属(科技/生活/职场/手工等)、无具体功能描述、无技术动因或… · 2026/9/23 16:40:32
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29