c-ares ist eine moderne DNS-(Stub-)Resolver-Bibliothek, die in C geschrieben ist. Sie stellt Schnittstellen für asynchrone Abfragen bereit und versucht gleichzeitig, die Feinheiten des zugrunde liegenden DNS-Protokolls zu abstrahieren. Es war ursprünglich für Anwendungen gedacht, die DNS-Abfragen ohne Blockierung oder mehrere DNS-Abfragen parallel ausführen müssen.
Eines der Ziele von c-ares ist es, ein besserer DNS-Resolver zu sein, als er von Ihrem System bereitgestellt wird, unabhängig davon, welches System Sie verwenden. Wir empfehlen die Verwendung der c-ares-Bibliothek in allen Netzwerkanwendungen, auch wenn das ursprüngliche Ziel der asynchronen Auflösung für Ihre Anwendung nicht erforderlich ist.
c-ares kann mit jedem C89-Compiler erstellt werden und ist MIT-lizenziert, wodurch es sowohl für freie als auch für kommerzielle Software geeignet ist. c-ares läuft auf Linux, FreeBSD, OpenBSD, MacOS, Solaris, AIX, Windows, Android, iOS und vielen weiteren Betriebssystemen.
c-ares legt großen Wert auf Sicherheit und implementiert sichere Parser und Datenersteller, die im gesamten Code verwendet werden, und vermeidet so viele der üblichen Fallstricke anderer C-Bibliotheken. Durch automatisierte Tests mit unserem umfangreichen Test-Framework wird c-ares ständig mit einer Reihe statischer und dynamischer Analysegeräte validiert und ständig durch OSS Fuzz gefuzzt.
Obwohl es c-ares schon seit über 20 Jahren gibt, wurde es sowohl im Hinblick auf die neuesten DNS-RFCs aktiv gepflegt als auch aktualisiert, um den neuesten Best Practices in Bezug auf C-Codierungsstandards zu folgen.
Der vollständige Quellcode und der Revisionsverlauf sind in unserem GitHub-Repository verfügbar. Unsere signierten Veröffentlichungen sind in den Veröffentlichungsarchiven verfügbar.
Informationen zum Build finden Sie in der Datei INSTALL.md.
Probleme und Funktionswünsche sollten auf unserer GitHub-Problemseite gemeldet werden.
Diskussionen rund um c-ares und seine Verwendung finden auf GitHub Discussions oder der Mailingliste statt. Archiv der Mailingliste hier. Bitte schicken Sie Freiwilligen keine privaten E-Mails über Cares.
Sicherheitslücken werden gemäß unserem Sicherheitsverfahren behandelt. Bitte senden Sie eine E-Mail an c-ares-security unter haxx.se, wenn Sie eine solche vermuten.
Primäre GPG-Schlüssel für c-ares-Releaser (einige Releaser signieren mit Unterschlüsseln):
27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2
DA7D64E4C82C6294CB73A20E22E3D13B5411B7CA
So importieren Sie den vollständigen Satz vertrauenswürdiger Release-Schlüssel (einschließlich der Unterschlüssel, die möglicherweise zum Signieren von Releases verwendet werden):
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2 # Daniel Stenberg
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys DA7D64E4C82C6294CB73A20E22E3D13B5411B7CA # Brad House
Für jedes Release c-ares-XYZtar.gz
gibt es eine entsprechende c-ares-XYZtar.gz.asc
-Datei, die die getrennte Signatur für das Release enthält.
Nachdem Sie alle möglichen gültigen Signaturschlüssel abgerufen und wie im vorherigen Abschnitt beschrieben in Ihren Schlüsselbund geladen haben, können Sie einfach den folgenden Befehl für das heruntergeladene Paket und die abgetrennte Signatur ausführen:
% 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 " [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
Siehe Funktionen
AAAA
Rekord.SRV
Datensatz.NAPTR
Datensatz.TLSA
Datensatz.SVCB
und HTTPS
Datensätze.URI
Eintrag.CAA
Rekord.SIG0
Datensatz. Nur einfacher Parser, keine vollständige Implementierung..onion
Domänennamen mit NXDOMAIN
ablehnen.localhost
/ .localhost
.ares_getaddrinfo()
verwendet wird.