如何使用命令行查询 DNS over HTTPS/DNS over TLS?

如何使用命令行查询 DNS over HTTPS/DNS over TLS?

我正在编写一个脚本,需要使用用户指定的 DNS 服务器查询 DNS 记录。DNS 服务器可以采用任何协议,包括 UDP、TCP、DNS over HTTPS (DoH) 和 DNS over TLS (DoT)。

我知道dig能够处理 UDP 和 TCP 的 DNS(带+tcp标志)。我可以使用其他方法dig或其他工具来查询 DoH 和 DoT 服务器吗?

我更喜欢已经存在的流行工具,这样curl我的脚本就更具可移植性,但也欢迎其他建议。

答案1

我没有找到一个可以同时满足这两个目的的工具,但我确实找到了使用它们的方法。

查询 DoH 有两种方式:

# 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

对于 DoT,您可以使用kdig提供的工具knot。命令行类似于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

其中8.8.8.8是 tls 主机的预解析地址 ( dns.google.com)。


更新:这是一个工具(https://github.com/ameshkov/dnslookup) 它本身支持所有主要的 DNS 协议,并且能够生成机器可读的输出。

答案2

卷曲有官方卫生部自 7.62.0 版本开始支持(问题是您的目标端点中有多少个已将 curl 更新至此版本。)

利用--doh-url选项使用它。例如:

curl --doh-url https://cloudflare-dns.com/dns-query https://www.google.com

看: https://github.com/curl/curl/wiki/DOH-implementation https://daniel.haxx.se/blog/2018/09/06/doh-in-curl/

答案3

是一个用 Rust 编写的 dig 替代品,支持 DOH/DOT。安装

例子:

dog -H @https://dns.google/dns-query google.com

dog google.com --tls @dns.google

也可以输出为json。

答案4

除了 DoT(正如其他用户在这里提到的),的最新版本dig还支持使用+https标志进行 DoH 查询。

+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.

例子,

dig @cloudflare-dns.com +https foobar.com

通过声明+httpsdig将通过端口 443 上的 HTTPS 查询提供的 DNS 服务器域(cloudflare-dns.com)到默认端点/dns-query

实际上,上述命令将发送一个 DoH(POST)请求foobar.com到:

有选项可以切换到 GET 请求,声明不同的端点等。阅读手册页与 DoH 相关的查询选项如下:

  • +https
  • +https-get
  • +https-post
  • +http-plain
  • +http-plain-get
  • +http-plain-post

相关内容