4 个版本

0.2.7 2024年5月8日
0.2.6 2024年4月19日
0.2.5 2024年2月22日

#205命令行工具

每月 21 次下载

MIT 许可证

315KB
2.5K SLoC

doge

doge 是 dog 的分支。

Say thanks!

A screenshot of dog making a DNS request


doge 可以查询!

doge 是一个命令行 DNS 客户端,类似于 dig,它从 这里 的出色工作中衍生而来。它具有彩色输出,理解正常的命令行参数语法,支持 DNS-over-TLS 和 DNS-over-HTTPS 协议,并且可以输出 JSON。我相信这是一个令人惊叹的项目,应该得到改进。

示例

doge example.net                          Query a domain using default settings
doge example.net MX                       ...looking up MX records instead
doge example.net MX @1.1.1.1              ...using a specific nameserver instead
doge example.net MX @1.1.1.1 -T           ...using TCP rather than UDP
doge exapple.net MX @1.1.1.1 -p 53        ...using a nonstandart port
doge -q example.net -t MX -n 1.1.1.1 -T   As above, but using explicit arguments

命令行选项

查询选项

<arguments>              Human-readable host names, nameservers, types, or classes
-q, --query=HOST         Host name or domain name to query
-t, --type=TYPE          Type of the DNS record being queried (A, MX, NS...)
-n, --nameserver=ADDR    Address of the nameserver to send packets to
-p, --port=PORT            Port options for sending queries on nonstandart ports
--class=CLASS            Network class of the DNS record being queried (IN, CH, HS)

发送选项

--edns=SETTING           Whether to OPT in to EDNS (disable, hide, show)
--txid=NUMBER            Set the transaction ID to a specific value
-Z=TWEAKS                Set uncommon protocol-level tweaks

协议选项

-U, --udp                Use the DNS protocol over UDP
-T, --tcp                Use the DNS protocol over TCP
-S, --tls                Use the DNS-over-TLS protocol
-H, --https              Use the DNS-over-HTTPS protocol

输出选项

-1, --short              Short mode: display nothing but the first result
-J, --json               Display the output as JSON
--color, --colour=WHEN   When to colourise the output (always, automatic, never)
--seconds                Do not format durations, display them as seconds
--time                   Print how long the response took to arrive

安装

目前:要安装 dog,您可以下载预编译的二进制文件,或者从源代码编译。根据您的平台,您可能可以使用操作系统包管理器安装 dog。

问题:我根本不是 rust 专家,说实话,我正好相反,只是在学习编码。我在我的 arch 系统上使用了 dog,以及一些我不断修复和破坏的随机 *nix 笔记本电脑。因此,该项目的一部分将超出我的技能范围或目前的能力。对于 Windows,我不打算很快安装 windows 11,因此我可能不会添加新的 windows 功能。对于 Macos,直到我能负担得起购买 mac 的费用,构建发布包的工作流程将是 macos 将得到的唯一支持。对于 Docker,对我来说这是一项魔法。当我学习如何有意义地使用它时,请期待事情会出错。

If any of these are things you want to see make a PR and I'll read and merge it, Be on the lookout for some potentially dumb questions from me.

They exist now !!!

$ cargo install dns-doge
$ yay -S dns-doge

下载

doge 的二进制文件可以从 GitHub 的发布部分 下载,适用于 64 位 Windows、macOS 和 Linux 目标。它们包含编译后的可执行文件、手册页和 shell 完整性。

编译

doge 用 Rust 编写。我正在使用 rustc 版本 1.76.0,您应该运行此版本或更高版本。开发 Rust 的推荐方式是从 官方下载页面 使用 rustup 安装。

要构建,下载源代码并运行

$ cargo build
$ cargo test
  • 如果您在为自己编译副本,请确保运行以下命令以利用发布模式优化:cargo build --releasemake build-release。将生成的二进制文件(位于 target/release 目录中)复制到您的 $PATH 中的一个文件夹。通常,/usr/local/bin 是一个不错的选择。

  • 要编译和安装手册页,您需要 pandoc。使用 make man 命令将 Markdown 编译为手册页,并将其放置在 target/man 目录中。要使用它们,将它们复制到 man 可以读取的目录中。通常,/usr/local/share/man 是一个不错的选择。

容器镜像

要构建 doge 的容器镜像,您可以使用 Docker、Podman 或 Kaniko。以下是一个使用 Docker 的示例

$ docker build -t doge .

然后您可以使用以下命令运行它

$ docker run -it --rm doge

要直接运行 dog,您可以定义以下别名

$ alias doge="docker run -it --rm doge"

功能切换

doge 有三个 Cargo 功能可以被禁用来移除功能。虽然这样做会使 doge 变得不那么有用,但它会生成一个更小的二进制文件,构建时间也更短。

有三个可用的功能切换,默认都是激活的

  • with_idna,它启用 IDNA 处理
  • with_tls,它启用 DNS-over-TLS
  • with_https,它启用 DNS-over-HTTPS(需要 with_tls

使用 cargo 构建一个使用功能切换的二进制文件。例如,要禁用 TLS 和 HTTPS 支持,但保持 IDNA 支持启用,您可以运行

$ cargo build --no-default-features --features=with_idna

已禁用的功能列表可以在运行时作为 --version 字符串的一部分进行检查。


文档

有关如何使用 doge 的文档,请参阅 dog 网站:https://dns.lookup.dog/ 最终我会制作一个新的

依赖项

~2–13MB
~155K SLoC