Heim  >  Artikel  >  Web-Frontend  >  cf-doh: Suchen Sie nach DNS-Einträgen in Ihrem Frontend-Javascript

cf-doh: Suchen Sie nach DNS-Einträgen in Ihrem Frontend-Javascript

Susan Sarandon
Susan SarandonOriginal
2024-10-08 08:22:021002Durchsuche

cf-doh: look up DNS records from your frontend javascript

Als ich kürzlich an Archival arbeitete, musste ich die DNS-Einträge einer Domain überprüfen.

Hintergrund

Mit Archival Pro können Benutzer benutzerdefinierte Domänen auf Archival-Sites verweisen. Um https für diese Websites zu aktivieren, verwenden wir einen auf TXT-Einträgen basierenden Domain-Verifizierer, um die Inhaberschaft zu überprüfen, bevor wir SSL ausstellen. Um diesen Vorgang zu vereinfachen, musste ich die Datensätze abfragen, um zu überprüfen, ob die CNAME- und TXT-Datensätze korrekt konfiguriert sind, und um gegebenenfalls einige hilfreiche Meldungen anzuzeigen.

In einer node.js- oder C-ähnlichen Umgebung ist dies recht einfach, da jedes Betriebssystem über einen lokalen DNS-Cache und Suchtools verfügt. Allerdings habe ich dies in einem Cloudflare-Worker ausgeführt, der eigentlich ein v8-Isolat ist und daher keinen Zugriff auf das DNS-System des Betriebssystems hat. Selbst wenn „nodejs_compat“ aktiviert ist, gibt die DNS-Bibliothek aus der stdlib des Knotens lediglich ein leeres Objekt zurück.

DNS-über-HTTPS

Nachdem ich ein wenig recherchiert hatte, wurde mir klar, dass das moderne DNS-über-HTTPS für dieses Problem gut geeignet wäre und auch außerhalb meines engen Anwendungsbereichs Anwendungsmöglichkeiten bietet. Allerdings mochte ich für diesen Anwendungsfall keine der Bibliotheken auf npm – was ich wollte, war etwas, das eher der DNS-Bibliothek des Knotens ähnelte, die die Suchserver abstrahiert.

Cloudflare bietet eine DNS-over-HTTPs-Lösung, über die Sie hier lesen können: https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/

Der Hauptnachteil dieser API besteht darin, dass sie für durchschnittliche Benutzer etwas undurchsichtig sein kann – die Statuscodes werden als Zahlen zurückgegeben, die einer Spezifikation zugeordnet sind, und das Antwortformat ist im Frage-und-Antwort-Format und enthält detaillierte Daten, die Obwohl es nützlich ist, ist es für den gelegentlichen Gebrauch zu viel des Guten.

Ein einfaches Paket

Um es mir und anderen einfacher zu machen, habe ich cf-doh veröffentlicht.

Dies ist eine einfache Bibliothek, die das Abfragen von Datensätzen vom Browser, von Cloudflare-Workern oder von jedem anderen Ort, an dem Javascript ausgeführt wird, ganz einfach macht. Es hängt von einer nativen Fetch-Implementierung ab und ermöglicht das Festlegen einer solchen, wenn Sie noch keine haben. Wenn Sie möchten, können Sie also sogar einen Knoten mit einer polygefüllten Whatwg-Fetch-Implementierung ausführen. Wenn Sie sich jedoch im Knoten befinden, können Sie dies auch tun Haben Sie node:dns, was wahrscheinlich das ist, was Sie wollen.

Zusätzlich zum Umschließen der Abrufaufrufe stellt diese Bibliothek vollständige Typen für die gesamte Spezifikation bereit, verarbeitet String-Antworten in Anführungszeichen und konvertiert HTTP-Fehler und Statusantworten in Ausnahmen.

Die Verwendung ist einfach:

import { queryDNS } from "cf-doh";

const records = await queryDNS("_verification.jesseditson.com", "TXT");

records.forEach((r) => console.log(r));

Wenn Sie einen typisierten Wert bevorzugen, können Sie sogar alle gültigen Datensatztypen importieren und diese anstelle von Zeichenfolgen verwenden:

import { queryDNS, DNSRecordType } from "cf-doh";

const records = await queryDNS("_verification.jesseditson.com", DNSRecordType.TXT);

Wenn Sie andere Status als NoError verarbeiten möchten, können Sie stattdessen eine API auf niedrigerer Ebene verwenden:

import { queryDNSRecords, DNSRecordType, DOHStatus, DOHStatusMessage } from "cf-doh";

const response = await queryDNSRecords("_verification.jesseditson.com", DNSRecordType.TXT);

switch (response.status) {
  case DOHStatus.NoError:
    console.log("This record exists!");
    break;
  case DOHStatus.NXDomain:
    console.log("Domain wasn't found");
    break;
  default:
    console.log(DOHStatusMessage[response.status]);
    break;
}

Um dies zu Ihrem Projekt hinzuzufügen, führen Sie einfach npm install --save cf-doh aus. Wenn Sie neugierig auf die Quelle oder die vollständige API-Oberfläche sind, schauen Sie sich das Repo an:

https://github.com/jesseditson/cf-doh

Das obige ist der detaillierte Inhalt voncf-doh: Suchen Sie nach DNS-Einträgen in Ihrem Frontend-Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Transpiler vs. PloyfillsNächster Artikel:Transpiler vs. Ployfills