third_party_cares:基于 OpenHarmony 生态的 DNS 解析库项目

暂无描述

分支242Tags44
文件最后提交记录最后更新时间
1 年前
1 年前
1 年前
4 个月前
1 年前
1 个月前
5 个月前
5 年前
1 年前
2 个月前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
2 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前

c-ares 标志

构建状态 Windows 构建状态 覆盖率状态 CII 最佳实践 模糊测试状态 缺陷 Coverity 扫描状态

概述

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 Issues 页面。

关于 c-ares 及其使用的讨论,可在 GitHub Discussions邮件列表 上进行。邮件列表存档在此。请不要私下联系志愿者关于 c-ares 的问题。

安全漏洞 将按照我们的 安全流程 处理,如果您怀疑存在漏洞,请发送邮件至 c-ares-security at haxx.se。

发布密钥

c-ares 发布者的主要 GPG 密钥(部分发布者使用子密钥签名):

要导入完整的受信任发布密钥集(包括可能用于签名的子密钥):

gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2 # Daniel Stenberg
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys DA7D64E4C82C6294CB73A20E22E3D13B5411B7CA # Brad House

验证签名

对于每个 c-ares-X.Y.Z.tar.gz 版本文件,都会有一个对应的 c-ares-X.Y.Z.tar.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 <daniel@haxx.se>" [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

特性

详见特性说明

支持的RFC标准与提案

  • RFC1035. 初始/基础DNS规范
  • RFC2671, RFC6891. EDNS0扩展机制(元资源记录)
  • RFC3596. IPv6地址解析。AAAA记录类型。
  • RFC2782. 服务选择机制。SRV记录类型。
  • RFC3403. 命名权威指针。NAPTR记录类型。
  • RFC6698. 基于DNS的命名实体认证(DANE)传输层安全协议。 TLSA记录类型。
  • RFC9460. 通用服务绑定规范,HTTPS服务绑定类型。 SVCBHTTPS记录类型。
  • RFC7553. 统一资源标识符。URI记录类型。
  • RFC6844. 证书颁发机构授权。CAA记录类型。
  • RFC2535, RFC2931. SIG0记录类型。仅基础解析支持,未完整实现。
  • RFC7873, RFC9018. DNS Cookie机制防御路径外DNS投毒与放大攻击。
  • draft-vixie-dnsext-dns0x20-00. DNS 0x20查询名随机大小写防御缓存投毒攻击。
  • RFC7686. 对.onion域名查询返回NXDOMAIN响应。
  • RFC2606, RFC6761. 对localhost/.localhost的特殊处理规则。
  • RFC2308, RFC9520. DNS解析失败的否定缓存机制。
  • RFC6724. ares_getaddrinfo()使用的IPv6地址排序规则。
  • RFC7413. 实现0-RTT连接的TCP快速打开(TFO)机制。
  • RFC3986. 统一资源标识符(URI)。用于服务器配置。