11 个版本
0.3.1 | 2024年3月11日 |
---|---|
0.3.0 | 2021年3月6日 |
0.3.0-alpha.2 | 2021年2月27日 |
0.3.0-alpha.1 | 2021年1月20日 |
0.0.3 | 2017年9月29日 |
#211 in 命令行工具
110 每月下载量
460KB
11K SLoC
mhost
对经典的 host
DNS 查询工具的现代诠释,包括易于使用且非常快速的 Rust 查询库。
特性
-
mhost
非常快,同时使用多个 DNS 服务器并发查询,并汇总所有结果以提高查询的可靠性。 -
mhost
支持 UDP 和 TCP 上的经典 DNS,以及现代的 DNS over TLS (DoT) 和 HTTP (DoH)。 -
mhost
以易于阅读的格式或 JSON 格式呈现结果,便于后处理。 -
mhost
可以发现任何域的主机名、子域以及以 CIDR 表示法的 IP 子网。 -
mhost
使用 lint 验证任何域的 DNS 配置。 -
mhost
提供了一个易于使用的 Rust 库,因此您可以在自己的项目中使用相同的查询功能。
有关详细信息,请参阅 Readme 中的 用例 和 文档 部分。
快速入门
-
安装
mhost
– 请参阅下面的 安装说明。 -
运行
mhost -p l -a all -w github.com
并在 34 毫秒内向 16 个名称服务器查询了 github.com 的所有可用 DNS 记录。此外,您还获得了 GitHub 子网的 WHOIS 信息。 -
运行
mhost -q -p --output json l --all -w github.com | jq '.lookups[] | .result.Response.records[]? | select(.type == "A") | .data.A'
以获取所有IPv4地址。 -
设置shell别名
alias host=mhost l
以替换系统中的host
命令。
目录
用例
仅查找IP地址
$ mhost l github.com
在本次运行中,应用了所有默认设置。特别是,most
只使用本地系统名称服务器并只查询默认记录类型。
仅查找IP地址,使用不仅仅是本地名称服务器
$ mhost -p l github.com
看看,答案比以前多了!
-p
添加mhost
为您的方便预定义的公共名称服务器。默认情况下,仅使用UDP来联系预定义的名称服务器。您可以使用--predefined-filter
来控制此行为并过滤UDP、TCP、DoT、DoH。--list-predefined
显示所有可用的预定义名称服务器。
仅查找IP地址,使用不仅仅是更多的本地名称服务器
$ mhost server-lists public-dns -o servers.txt
$ mhost --limit 6000 --max-concurrent-servers 1000 --timeout 1 -f servers.txt l www.github.com
看看,答案比以前更多了!
第一个命令下载了由Public DNS社区维护的公共可用名称服务器列表。通常只有其中的一小部分可访问,但仍然是一组大量的活动名称服务器。
第二个命令使用之前的名称服务器列表并发查询它们。这些设置非常激进,极大地压力您的互联网连接。mhost
的默认设置设置得更加谨慎。
仅查找IP地址,使用UDP、TCP、DoT和DoH
$ mhost -s 1.1.1.1 -s tcp:1.1.1.1 -s tls:1.1.1.1:853,tls_auth_name=cloudflare-dns.com -s https:1.1.1.1:443,tls_auth_name=cloudflare-dns.com,name=Cloudflare -p l github.com
如前所述,mhost
支持UDP、TCP、DNS over TLS (DoT)以及DNS over HTTPS (DoH)的DNS查询。在上面的示例中,mhost
使用所有四种协议查询Cloudflare的名称服务器。
此命令还显示了名称服务器指定的语法,通常为protocol:<主机名 | ip address>:port,tls_auth_name=hostname,name=human-readable-name
。
发现一个域名
有时您想了解一个域名拥有哪些主机名和子域名。mhost
提供简单的命令来帮助您找到这些。请注意,mhost
只使用DNS特定的发现方法。如果您想使用Google、Shodan等工具进行更深入的发现,还有其他工具可用。
$ mhost -p d github.com -p
此命令使用预定义的名称服务器来发现GitHub域名。-s
将所有发现的名称减少到github.com.
的真实子域名。
您可以再进一步,探索GitHub使用的自治系统。为了发现这些,您可以使用以下命令
$ mhost -p l --all -w github.com
$ mhost -p l --all 140.82.121.0/24
检查您的名称服务器配置
$ mhost -p c github.com -p
安装
Docker
如果您想快速试用mhost
并尽量减少麻烦,您可能想尝试Docker镜像
$ docker run lukaspustina/mhost:latest mhost l mhost.pustina.de
Homebrew
您可以将此存储库添加为自定义tap,然后按以下方式安装mhost
$ brew tap lukaspustina/mhost https://github.com/lukaspustina/mhost.git
$ brew install lukaspustina/mhost/mhost
Debian和Ubuntu
您可以在GitHub发布页面找到Debian软件包。下载包为mhost.deb
,然后运行
$ dpkg -i mhost.deb
Redhat和Fedora
您可以在GitHub发布页面找到RPM软件包。下载包为mhost.rpm
,然后运行
$ rpm -i mhost.rpm
对于Rust开发者
$ cargo install --features app mhost
从源代码
请通过rustup安装Rust,然后运行
$ git clone https://github.com/lukaspustina/mhost
$ cd mhost
$ make install
文档
mhost
有三个主要命令:查找、发现和检查。 查找查找域名名的任意DNS记录。 发现尝试各种方法来发现域名的主机和子域名。 检查使用lint来检查域名名的所有记录是否遵守DNS RFC。
通用选项
--use-system-resolv-opt Uses options set in /etc/resolv.conf
--no-system-nameservers Ignores nameservers from /etc/resolv.conf
-S, --no-system-lookups Ignores system nameservers for lookups
--resolv-conf <FILE> Uses alternative resolv.conf file
--ndots <NUMBER> Sets number of dots to qualify domain name as FQDN [default: 1]
--search-domain <DOMAIN> Sets the search domain to append if HOSTNAME has less than ndots dots
--system-nameserver <IP ADDR>... Adds system nameserver for system lookups; only IP addresses allowed
-s, --nameserver <HOSTNAME | IP ADDR>... Adds nameserver for lookups
-p, --predefined Adds predefined nameservers for lookups
--predefined-filter <PROTOCOL>... Filters predefined nameservers by protocol [default: udp] [possible
values: udp, tcp, https, tls]
--list-predefined Lists all predefined nameservers
-f, --nameservers-from-file <FILE> Adds nameservers from file
--limit <NUMBER> Sets max. number of nameservers to query [default: 100]
--max-concurrent-servers <NUMBER> Sets max. concurrent nameservers [default: 10]
--max-concurrent-requests <NUMBER> Sets max. concurrent requests per nameserver [default: 5]
--retries <NUMBER> Sets number of retries if first lookup to nameserver fails [default: 0]
--timeout <TIMEOUT> Sets timeout in seconds for responses [default: 5]
-m, --resolvers-mode <MODE> Sets resolvers lookup mode [default: multi] [possible values: multi,
uni]
--wait-multiple-responses Waits until timeout for additional responses from nameservers
--no-abort-on-error Sets do-not-ignore errors from nameservers
--no-abort-on-timeout Sets do-not-ignore timeouts from nameservers
--no-aborts Sets do-not-ignore errors and timeouts from nameservers
-o, --output <FORMAT> Sets the output format for result presentation [default: summary]
[possible values: json, summary]
--output-options <OPTIONS>... Sets output options
--show-errors Shows error counts
-q, --quiet Does not print anything but results
--no-color Disables colorful output
--ascii Uses only ASCII compatible characters for output
-v Sets the level of verbosity
--debug Uses debug formatting for logging -- much more verbose
主要命令
查找
-t, --record-type <RECORD TYPE>... Sets record type to lookup, will be ignored in case of IP address lookup
[default: A,AAAA,CNAME,MX] [possible values: A, AAAA, ANAME, ANY, CNAME, MX,
NULL, NS, PTR, SOA, SRV, TXT]
--all Enables lookups for all record types
-s, --service Parses ARG as service spec and set record type to SRV
-w, --whois Retrieves Whois information about A, AAAA, and PTR records
-h, --help Prints help information
-V, --version Prints version information
<DOMAIN NAME | IP ADDR | CIDR BLOCK [| SERVICE SPEC]> domain name, IP address, or CIDR block to lookup
domain name, IP address, CIDR block, or, if -s, SERVICE SPEC, to lookup"
* DOMAIN NAME may be any valid DNS name, e.g., lukas.pustina.de
* IP ADDR may be any valid IPv4 or IPv4 address, e.g., 192.168.0.1
* CIDR BLOCK may be any valid IPv4 or IPv6 subnet in CIDR notation, e.g., 192.168.0.1/24
all valid IP addresses of a CIDR block will be queried for a reverse lookup
* SERVICE SPEC may be specified by name, protocol, and domain name, delimited by colons. If protocol is
omitted, tcp is assumed, e.g.,
* dns:udp:example.com is _dns._udp.example.com
* smtp:tcp:example.com is _smtp._tcp.example.com
* smtp::example.com is _smtp._tcp.example.com
发现
-p, --show-partial-results Shows results after each lookup step
-w, --wordlist-from-file <FILE> Uses wordlist from file
--rnd-names-number <NUMBER> Sets number of random domain names to generate for wildcard resolution check
[default: 3]
--rnd-names-len <LEN> Sets length of random domain names to generate for wildcard resolution check
[default: 32]
-s, --subdomains-only Shows subdomains only omitting all other discovered names
检查
-p, --show-partial-results Shows results after each check step
-i, --show-intermediate-lookups Shows all lookups made during by all checks
--no-cnames Does not run cname lints
--no-soa Does not run SOA check
--no-spf Does not run SPF check
辅助命令
服务器列表
-o, --output-file <FILE> Sets path to output file
<SERVER LIST SPEC>...
SERVER LIST SPEC as <SOURCE>[:OPTIONS,...]
* 'public-dns' with options - cf. https://public-dns.info
'<top level country domain>': options select servers from that country
Example: public-dns:de
* 'opennic' with options; uses GeoIP to select servers - cf. https://www.opennic.org
'anon' - only return servers with anonymized logs only; default is false
'number=<1..>' - return up to 'number' servers; default is 10
'reliability=<1..100> - only return server with reliability of 'reliability'% or more; default 95
'ipv=<4|6|all> - return IPv4, IPv6, or both servers; default all
Example: opennic:anon,number=10,ipv=4
架构设计记录
子目录doc/adr包含此项目的体系结构设计记录(ADRs)。记录开始于项目期间,并非所有决策都已记录。我仍然希望它们将帮助所有感兴趣的人,包括我,理解设计决策的合理性。
变更日志
请参阅变更日志以获取发布历史。
限制
-
目前
mhost
仅支持IN
类。 -
仅支持有限的一组DNS记录类型。
-
由于Docker for macOS的限制,Docker测试环境只能在Linux上完全工作。
感谢
感谢Benjamin Fry提供的绝对出色的Trust-DNS服务器及其相应的客户端库,它们为mhost
完成了所有的繁重DNS工作。
明信片软件
您可以使用mhost
。如果您觉得它很有用,我将非常感激您从您家乡寄给我一张明信片,说明您如何使用mhost
。我的工作地址是
Lukas Pustina
CenterDevice GmbH
Rheinwerkallee 3
53227 Bonn
Germany
依赖关系
~21–35MB
~647K SLoC