
Ich schreibe ein Skript, das DNS-Einträge mit einem vom Benutzer angegebenen DNS-Server abfragen muss. Der DNS-Server kann jedes beliebige Protokoll verwenden, einschließlich UDP, TCP, DNS über HTTPS (DoH) und DNS über TLS (DoT).
Ich weiß, dig
dass DNS für UDP und TCP (mit Flag) verarbeitet werden kann +tcp
. Gibt es eine Möglichkeit dig
oder ein anderes Tool, mit dem ich DoH- und DoT-Server abfragen kann?
Ich bevorzuge bereits vorhandene beliebte Tools, curl
damit mein Skript portabler wäre, aber andere Vorschläge sind ebenfalls willkommen.
Antwort1
Ich habe kein einziges Werkzeug für beide Zwecke gefunden, aber ich habe Möglichkeiten gefunden, sie zu verwenden.
Es gibt zwei Möglichkeiten, DoH abzufragen:
# json
curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=A' | jq .
# dns wireformat
curl -H 'accept: application/dns-message' 'https://dns.google/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | hexdump -c
Für DoT können Sie kdig
das von bereitgestellte Tool verwenden knot
. Die Befehlszeile ähnelt dig
:
apt-get install knot-dnsutils
# For macOS:
# brew install knot
kdig -d @8.8.8.8 +tls-ca +tls-host=dns.google.com example.com
wobei dies 8.8.8.8
die vorab aufgelöste Adresse des TLS-Hosts ( dns.google.com
) ist.
Update: Hier ist ein Werkzeug (https://github.com/ameshkov/dnslookup), das alle wichtigen DNS-Protokolle selbst unterstützt und maschinenlesbare Ausgaben erzeugen kann.
Antwort2
Lockehat offiziellDoHUnterstützung seit Version 7.62.0 (die Frage ist, wie viele Ihrer Zielendpunkte curl auf dem neuesten Stand dieser Version haben.)
Nutzen Sie es, indem Sie die --doh-url
Option nutzen. Beispiel:
curl --doh-url https://cloudflare-dns.com/dns-query https://www.google.com
Sehen: https://github.com/curl/curl/wiki/DOH-implementation https://daniel.haxx.se/blog/2018/09/06/doh-in-curl/
Antwort3
Hundist eine Dig-Alternative, die in Rust geschrieben ist und DOH/DOT unterstützt.Installation
Beispiele:
dog -H @https://dns.google/dns-query google.com
dog google.com --tls @dns.google
Die Ausgabe kann auch als JSON erfolgen.
Antwort4
Neben DoT (wie von anderen Benutzern hier erwähnt) unterstützt die neueste Version dig
auch DoH-Abfragen mithilfe des +https
Flags.
+https[=value], +nohttps
This option indicates whether to use DNS over HTTPS (DoH) when querying name
servers. When this option is in use, the port number defaults to 443. The
HTTP POST request mode is used when sending the query.
If value is specified, it will be used as the HTTP endpoint in the query URI;
the default is /dns-query. So, for example, dig @example.com +https will use
the URI https://example.com/dns-query.
Beispiel,
dig @cloudflare-dns.com +https foobar.com
Durch die Angabe +https
wird dig
die angegebene DNS-Serverdomäne ( cloudflare-dns.com
) mit HTTPS über Port 443 an den Standardendpunkt abgefragt /dns-query
.
Tatsächlich sendet der obige Befehl eine DoH-Anfrage (POST) foobar.com
an:
Es gibt Optionen zum Wechseln zur GET-Anfrage, zum Deklarieren eines anderen Endpunkts usw. Lesen Sie diemanpagedieser Abfragemöglichkeiten im Zusammenhang mit DoH:
+https
+https-get
+https-post
+http-plain
+http-plain-get
+http-plain-post