10 个稳定版本
3.0.2 | 2024年7月28日 |
---|---|
3.0.1 | 2024年6月16日 |
3.0.0 | 2024年5月5日 |
2.0.0 | 2024年3月12日 |
1.0.0 | 2023年8月22日 |
#444 in 命令行工具
每月下载量:150
140KB
2K SLoC
nu_plugin_dns
Nushell 插件,用于执行 DNS 查询并将结果解析为有意义的类型。旨在替代 dig
。使用优秀的 hickory
crate。
用法
- 默认情况下,所有查询都尝试使用 DNSSEC 验证记录。如果记录没有 DNSSEC 或域名服务器不支持它,则默认回退到普通查询。此行为可以通过
--dnssec
标志进行调整。 - 支持的协议是 UDP、TCP、TLS、HTTPS 和 QUIC
- 如果没有指定域名服务器地址,则使用系统的 DNS 配置,如果没有可用的配置,则回退到 Google。
示例
simple query for A / AAAA records
> dns query amazon.com
╭─#─┬───────────────header───────────────┬────────question─────────┬────────────────────────────answer─────────────────────────────┬──────────────────────────────────────────authority───────────────────────────────────────────┬───additional───┬────────────────edns─────────────────┬─size──╮
│ 0 │ ╭─────────────────────┬──────────╮ │ ╭───────┬─────────────╮ │ ╭─#─┬────name─────┬type┬class┬────ttl─────┬──────rdata──────╮ │ [list 0 items] │ [list 0 items] │ ╭─────────────┬───────────────────╮ │ 87 B │
│ │ │ id │ 26694 │ │ │ name │ amazon.com. │ │ │ 0 │ amazon.com. │ A │ IN │ 3min 35sec │ 54.239.28.85 │ │ │ │ │ rcode_high │ 0 │ │ │
│ │ │ message_type │ RESPONSE │ │ │ type │ A │ │ │ 1 │ amazon.com. │ A │ IN │ 3min 35sec │ 52.94.236.248 │ │ │ │ │ version │ 0 │ │ │
│ │ │ op_code │ QUERY │ │ │ class │ IN │ │ │ 2 │ amazon.com. │ A │ IN │ 3min 35sec │ 205.251.242.103 │ │ │ │ │ dnssec_ok │ false │ │ │
│ │ │ authoritative │ false │ │ ╰───────┴─────────────╯ │ ╰───┴─────────────┴────┴─────┴────────────┴─────────────────╯ │ │ │ │ max_payload │ 512 B │ │ │
│ │ │ truncated │ false │ │ │ │ │ │ │ opts │ {record 0 fields} │ │ │
│ │ │ recursion_desired │ true │ │ │ │ │ │ ╰─────────────┴───────────────────╯ │ │
│ │ │ recursion_available │ true │ │ │ │ │ │ │ │
│ │ │ authentic_data │ false │ │ │ │ │ │ │ │
│ │ │ response_code │ No Error │ │ │ │ │ │ │ │
│ │ │ query_count │ 1 │ │ │ │ │ │ │ │
│ │ │ answer_count │ 3 │ │ │ │ │ │ │ │
│ │ │ name_server_count │ 0 │ │ │ │ │ │ │ │
│ │ │ additional_count │ 1 │ │ │ │ │ │ │ │
│ │ ╰─────────────────────┴──────────╯ │ │ │ │ │ │ │
│ 1 │ ╭─────────────────────┬──────────╮ │ ╭───────┬─────────────╮ │ [list 0 items] │ ╭─#─┬────name─────┬type─┬class┬────ttl─────┬─────────────────────rdata─────────────────────╮ │ [list 0 items] │ ╭─────────────┬───────────────────╮ │ 106 B │
│ │ │ id │ 43590 │ │ │ name │ amazon.com. │ │ │ │ 0 │ amazon.com. │ SOA │ IN │ 1min 34sec │ ╭─────────┬─────────────────────────────────╮ │ │ │ │ rcode_high │ 0 │ │ │
│ │ │ message_type │ RESPONSE │ │ │ type │ AAAA │ │ │ │ │ │ │ │ │ │ mname │ dns-external-master.amazon.com. │ │ │ │ │ version │ 0 │ │ │
│ │ │ op_code │ QUERY │ │ │ class │ IN │ │ │ │ │ │ │ │ │ │ rname │ hostmaster.amazon.com. │ │ │ │ │ dnssec_ok │ false │ │ │
│ │ │ authoritative │ false │ │ ╰───────┴─────────────╯ │ │ │ │ │ │ │ │ │ serial │ 2010185872 │ │ │ │ │ max_payload │ 512 B │ │ │
│ │ │ truncated │ false │ │ │ │ │ │ │ │ │ │ │ refresh │ 3min │ │ │ │ │ opts │ {record 0 fields} │ │ │
│ │ │ recursion_desired │ true │ │ │ │ │ │ │ │ │ │ │ retry │ 1min │ │ │ │ ╰─────────────┴───────────────────╯ │ │
│ │ │ recursion_available │ true │ │ │ │ │ │ │ │ │ │ │ expire │ 1wk │ │ │ │ │ │
│ │ │ authentic_data │ false │ │ │ │ │ │ │ │ │ │ │ minimum │ 15min │ │ │ │ │ │
│ │ │ response_code │ No Error │ │ │ │ │ │ │ │ │ │ ╰─────────┴─────────────────────────────────╯ │ │ │ │ │
│ │ │ query_count │ 1 │ │ │ │ ╰───┴─────────────┴─────┴─────┴────────────┴───────────────────────────────────────────────╯ │ │ │ │
│ │ │ answer_count │ 0 │ │ │ │ │ │ │ │
│ │ │ name_server_count │ 1 │ │ │ │ │ │ │ │
│ │ │ additional_count │ 1 │ │ │ │ │ │ │ │
│ │ ╰─────────────────────┴──────────╯ │ │ │ │ │ │ │
╰───┴────────────────────────────────────┴─────────────────────────┴───────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────┴────────────────┴─────────────────────────────────────┴───────╯
specify query type
> dns query --type CNAME en.wikipedia.org
╭─#─┬───────────────header───────────────┬───────────question────────────┬─────────────────────────────────────answer──────────────────────────────────────┬───authority────┬───additional───┬────────────────edns─────────────────┬─size─╮
│ 0 │ ╭─────────────────────┬──────────╮ │ ╭───────┬───────────────────╮ │ ╭─#─┬───────name────────┬─type──┬class┬───────ttl───────┬────────rdata────────╮ │ [list 0 items] │ [list 0 items] │ ╭─────────────┬───────────────────╮ │ 74 B │
│ │ │ id │ 40068 │ │ │ name │ en.wikipedia.org. │ │ │ 0 │ en.wikipedia.org. │ CNAME │ IN │ 4hr 26min 40sec │ dyna.wikimedia.org. │ │ │ │ │ rcode_high │ 0 │ │ │
│ │ │ message_type │ RESPONSE │ │ │ type │ CNAME │ │ ╰───┴───────────────────┴───────┴─────┴─────────────────┴─────────────────────╯ │ │ │ │ version │ 0 │ │ │
│ │ │ op_code │ QUERY │ │ │ class │ IN │ │ │ │ │ │ dnssec_ok │ false │ │ │
│ │ │ authoritative │ false │ │ ╰───────┴───────────────────╯ │ │ │ │ │ max_payload │ 512 B │ │ │
│ │ │ truncated │ false │ │ │ │ │ │ │ opts │ {record 0 fields} │ │ │
│ │ │ recursion_desired │ true │ │ │ │ │ │ ╰─────────────┴───────────────────╯ │ │
│ │ │ recursion_available │ true │ │ │ │ │ │ │ │
│ │ │ authentic_data │ false │ │ │ │ │ │ │ │
│ │ │ response_code │ No Error │ │ │ │ │ │ │ │
│ │ │ query_count │ 1 │ │ │ │ │ │ │ │
│ │ │ answer_count │ 1 │ │ │ │ │ │ │ │
│ │ │ name_server_count │ 0 │ │ │ │ │ │ │ │
│ │ │ additional_count │ 1 │ │ │ │ │ │ │ │
│ │ ╰─────────────────────┴──────────╯ │ │ │ │ │ │ │
╰───┴────────────────────────────────────┴───────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────┴────────────────┴────────────────┴─────────────────────────────────────┴──────╯
specify query types by numeric ID, and get numeric IDs in output
> dns query --type [5, 15] -c google.com
╭─#─┬────────────────────header─────────────────────┬───────────question───────────┬─────────────────────────────────────────────answer──────────────────────────────────────────────┬─────────────────────────────────────────────authority─────────────────────────────────────────────┬───additional───┬────────────────edns─────────────────┬─size─╮
│ 0 │ ╭─────────────────────┬─────────────────────╮ │ ╭───────┬───────────────╮ │ ╭─#─┬────name─────┬─────type──────┬─────class─────┬──ttl──┬───────────────rdata───────────────╮ │ [list 0 items] │ [list 0 items] │ ╭─────────────┬───────────────────╮ │ 60 B │
│ │ │ id │ 25259 │ │ │ name │ google.com. │ │ │ 0 │ google.com. │ ╭──────┬────╮ │ ╭──────┬────╮ │ 53sec │ ╭────────────┬──────────────────╮ │ │ │ │ │ rcode_high │ 0 │ │ │
│ │ │ │ ╭──────┬──────────╮ │ │ │ │ ╭──────┬────╮ │ │ │ │ │ │ name │ MX │ │ │ name │ IN │ │ │ │ preference │ 10 │ │ │ │ │ │ version │ 0 │ │ │
│ │ │ message_type │ │ name │ RESPONSE │ │ │ │ type │ │ name │ MX │ │ │ │ │ │ │ code │ 15 │ │ │ code │ 1 │ │ │ │ exchange │ smtp.google.com. │ │ │ │ │ │ dnssec_ok │ false │ │ │
│ │ │ │ │ code │ 1 │ │ │ │ │ │ code │ 15 │ │ │ │ │ │ ╰──────┴────╯ │ ╰──────┴────╯ │ │ ╰────────────┴──────────────────╯ │ │ │ │ │ max_payload │ 512 B │ │ │
│ │ │ │ ╰──────┴──────────╯ │ │ │ │ ╰──────┴────╯ │ │ ╰───┴─────────────┴───────────────┴───────────────┴───────┴───────────────────────────────────╯ │ │ │ │ opts │ {record 0 fields} │ │ │
│ │ │ │ ╭──────┬───────╮ │ │ │ │ ╭──────┬────╮ │ │ │ │ │ ╰─────────────┴───────────────────╯ │ │
│ │ │ op_code │ │ name │ QUERY │ │ │ │ class │ │ name │ IN │ │ │ │ │ │ │ │
│ │ │ │ │ code │ 0 │ │ │ │ │ │ code │ 1 │ │ │ │ │ │ │ │
│ │ │ │ ╰──────┴───────╯ │ │ │ │ ╰──────┴────╯ │ │ │ │ │ │ │
│ │ │ authoritative │ false │ │ ╰───────┴───────────────╯ │ │ │ │ │ │
│ │ │ truncated │ false │ │ │ │ │ │ │ │
│ │ │ recursion_desired │ true │ │ │ │ │ │ │ │
│ │ │ recursion_available │ true │ │ │ │ │ │ │ │
│ │ │ authentic_data │ false │ │ │ │ │ │ │ │
│ │ │ │ ╭──────┬──────────╮ │ │ │ │ │ │ │ │
│ │ │ response_code │ │ name │ No Error │ │ │ │ │ │ │ │ │
│ │ │ │ │ code │ 0 │ │ │ │ │ │ │ │ │
│ │ │ │ ╰──────┴──────────╯ │ │ │ │ │ │ │ │
│ │ │ query_count │ 1 │ │ │ │ │ │ │ │
│ │ │ answer_count │ 1 │ │ │ │ │ │ │ │
│ │ │ name_server_count │ 0 │ │ │ │ │ │ │ │
│ │ │ additional_count │ 1 │ │ │ │ │ │ │ │
│ │ ╰─────────────────────┴─────────────────────╯ │ │ │ │ │ │ │
│ 1 │ ╭─────────────────────┬─────────────────────╮ │ ╭───────┬──────────────────╮ │ [list 0 items] │ ╭─#─┬────name─────┬──────type──────┬─────class─────┬─ttl──┬────────────────rdata────────────────╮ │ [list 0 items] │ ╭─────────────┬───────────────────╮ │ 89 B │
│ │ │ id │ 55673 │ │ │ name │ google.com. │ │ │ │ 0 │ google.com. │ ╭──────┬─────╮ │ ╭──────┬────╮ │ 1min │ ╭─────────┬───────────────────────╮ │ │ │ │ rcode_high │ 0 │ │ │
│ │ │ │ ╭──────┬──────────╮ │ │ │ │ ╭──────┬───────╮ │ │ │ │ │ │ │ name │ SOA │ │ │ name │ IN │ │ │ │ mname │ ns1.google.com. │ │ │ │ │ version │ 0 │ │ │
│ │ │ message_type │ │ name │ RESPONSE │ │ │ │ type │ │ name │ CNAME │ │ │ │ │ │ │ │ code │ 6 │ │ │ code │ 1 │ │ │ │ rname │ dns-admin.google.com. │ │ │ │ │ dnssec_ok │ false │ │ │
│ │ │ │ │ code │ 1 │ │ │ │ │ │ code │ 5 │ │ │ │ │ │ │ ╰──────┴─────╯ │ ╰──────┴────╯ │ │ │ serial │ 629673961 │ │ │ │ │ max_payload │ 512 B │ │ │
│ │ │ │ ╰──────┴──────────╯ │ │ │ │ ╰──────┴───────╯ │ │ │ │ │ │ │ │ │ │ refresh │ 15min │ │ │ │ │ opts │ {record 0 fields} │ │ │
│ │ │ │ ╭──────┬───────╮ │ │ │ │ ╭──────┬────╮ │ │ │ │ │ │ │ │ │ │ retry │ 15min │ │ │ │ ╰─────────────┴───────────────────╯ │ │
│ │ │ op_code │ │ name │ QUERY │ │ │ │ class │ │ name │ IN │ │ │ │ │ │ │ │ │ │ │ expire │ 30min │ │ │ │ │ │
│ │ │ │ │ code │ 0 │ │ │ │ │ │ code │ 1 │ │ │ │ │ │ │ │ │ │ │ minimum │ 1min │ │ │ │ │ │
│ │ │ │ ╰──────┴───────╯ │ │ │ │ ╰──────┴────╯ │ │ │ │ │ │ │ │ │ ╰─────────┴───────────────────────╯ │ │ │ │ │
│ │ │ authoritative │ false │ │ ╰───────┴──────────────────╯ │ │ ╰───┴─────────────┴────────────────┴───────────────┴──────┴─────────────────────────────────────╯ │ │ │ │
│ │ │ truncated │ false │ │ │ │ │ │ │ │
│ │ │ recursion_desired │ true │ │ │ │ │ │ │ │
│ │ │ recursion_available │ true │ │ │ │ │ │ │ │
│ │ │ authentic_data │ false │ │ │ │ │ │ │ │
│ │ │ │ ╭──────┬──────────╮ │ │ │ │ │ │ │ │
│ │ │ response_code │ │ name │ No Error │ │ │ │ │ │ │ │ │
│ │ │ │ │ code │ 0 │ │ │ │ │ │ │ │ │
│ │ │ │ ╰──────┴──────────╯ │ │ │ │ │ │ │ │
│ │ │ query_count │ 1 │ │ │ │ │ │ │ │
│ │ │ answer_count │ 0 │ │ │ │ │ │ │ │
│ │ │ name_server_count │ 1 │ │ │ │ │ │ │ │
│ │ │ additional_count │ 1 │ │ │ │ │ │ │ │
│ │ ╰─────────────────────┴─────────────────────╯ │ │ │ │ │ │ │
╰───┴───────────────────────────────────────────────┴──────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────┴─────────────────────────────────────┴──────╯
pipe name into command
> 'google.com' | dns query
pipe lists of names into command
> ['google.com', 'amazon.com'] | dns query
query record name that has labels with non-renderable bytes
> [ $"ding(char -u '07')-ds", "metric", "gstatic", "com" ] | each { into binary } | collect { $in } | dns query
pipe table of queries into command (ignores --type flag)
> [{name: 'google.com', type: 'A'}, {name: 'amazon.com', type: 'A'}] | dns query
choose a different protocol and/or port
> dns query -p tls -n dns.google -s 8.8.8.8 en.wikipedia.org
> dns query -p https -n cloudflare-dns.com -s 1.1.1.1 en.wikipedia.org
> dns query -p quic -n dns.adguard-dns.com -s 94.140.15.15:853 en.wikipedia.org
配置
您可以在您的 config.nu
中指定任何命令行标志以使其永久有效。如果同时在 config.nu
和 CLI 中指定了选项,则 CLI 优先。
$env.config.plugins.dns = {
server: "94.140.15.15"
protocol: https
dns-name: dns.adguard-dns.com
dnssec-mode: strict
tasks: 16
timeout: 30sec
}
安装
cargo install nu_plugin_dns
plugin add $"($env.CARGO_HOME)/bin/nu_plugin_dns"
plugin use dns
依赖关系
~46–80MB
~1.5M SLoC