c-ares 是一个用 C 语言编写的现代 DNS(存根)解析器库。它提供异步查询接口,同时尝试抽象底层 DNS 协议的复杂性。它最初适用于需要无阻塞地执行 DNS 查询或需要并行执行多个 DNS 查询的应用程序。
c-ares 的目标之一是成为比您的系统提供的更好的 DNS 解析器,无论您使用哪个系统。我们建议在所有网络应用程序中使用 c-ares 库,即使异步解析的初始目标对于您的应用程序来说不是必需的。
c-ares 可以使用任何 C89 编译器进行构建,并且获得 MIT 许可,这使得它适用于免费和商业软件。 c-ares 可在 Linux、FreeBSD、OpenBSD、MacOS、Solaris、AIX、Windows、Android、iOS 和更多操作系统上运行。
c-ares 非常注重安全性,实现了整个代码中使用的安全解析器和数据构建器,从而避免了其他 C 库的许多常见陷阱。通过使用我们广泛的测试框架进行自动化测试,c-ares 不断通过一系列静态和动态分析器进行验证,并不断通过 OSS Fuzz 进行模糊测试。
虽然 c-ares 已经存在了 20 多年,但它一直在积极维护最新的 DNS RFC,并进行更新以遵循 C 编码标准的最新最佳实践。
完整的源代码和修订历史记录可在我们的 GitHub 存储库中找到。我们的签名版本可在版本档案中找到。
有关构建信息,请参阅 INSTALL.md 文件。
问题和功能请求应报告到我们的 GitHub 问题页面。
关于 c-ares 及其使用的讨论在 GitHub 讨论或邮件列表中进行。邮件列表存档在这里。请不要私下向志愿者邮寄有关 c-ares 的信息。
安全漏洞根据我们的安全程序进行处理,如果您怀疑存在安全漏洞,请发送电子邮件至 haxx.se 的 c-ares-security。
c-ares 发行者的主 GPG 密钥(某些发行者使用子密钥签名):
27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2
DA7D64E4C82C6294CB73A20E22E3D13B5411B7CA
要导入完整的受信任版本密钥集(包括可能用于签署版本的子密钥):
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2 # Daniel Stenberg
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys DA7D64E4C82C6294CB73A20E22E3D13B5411B7CA # Brad House
对于每个版本c-ares-XYZtar.gz
都有一个相应的c-ares-XYZtar.gz.asc
文件,其中包含该版本的分离签名。
根据上一节获取所有可能的有效签名密钥并加载到钥匙串中后,您只需在下载的包和分离的签名上运行以下命令即可:
% gpg -v --verify c-ares-1.29.0.tar.gz.asc c-ares-1.29.0.tar.gz
gpg: enabled compatibility flags:
gpg: Signature made Fri May 24 02:50:38 2024 EDT
gpg: using RSA key 27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2
gpg: using pgp trust model
gpg: Good signature from " Daniel Stenberg <[email protected]> " [unknown]
gpg: WARNING: This key is not certified with a trusted signature !
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 27ED EAF2 2F3A BCEB 50DB 9A12 5CC9 08FD B71E 12C2
gpg: binary signature, digest algorithm SHA512, key algorithm rsa2048
查看功能
AAAA
记录。SRV
记录。NAPTR
记录。TLSA
记录。SVCB
和HTTPS
记录。URI
记录。CAA
记录。SIG0
记录。只有基本的解析器,没有完整的实现。NXDOMAIN
拒绝对.onion
域名的查询。localhost
/ .localhost
的特殊情况处理。ares_getaddrinfo()
使用的 IPv6 地址排序。