Domainim 是一款用于组织网络扫描的快速域侦查工具。该工具旨在通过 OSINT、暴力破解、DNS 解析等技术,简要呈现组织的网络结构。
当前功能 (v1.0.1) —

虚拟主机名枚举
反向 DNS 查找
检测通配符子域名(用于暴力破解)
基础 TCP 端口扫描
可接受子域名作为输入
将结果导出为 JSON 文件
部分功能仍在开发中。详情请参见计划功能。
该项目受 Sublist3r 启发。端口扫描器模块主要基于 NimScan。
你可以从源码构建该仓库 —
git clone [email protected]:pptx704/domainim
nimble build
./domainim <domain> [--ports=<ports>]
或者,你也可以直接从发布页面下载二进制文件。请注意,该二进制文件仅在基于 Debian 的系统上经过测试。
./domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | l:<filename> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
<domain> 是要枚举的域名,也可以是一个子域名。--ports | -p 是一个字符串,指定要扫描的端口。可以是以下之一 —
all — 扫描全部端口(1-65535)none — 跳过端口扫描(默认)t<n> — 扫描前 n 个端口(与 nmap 相同)。例如 t100 扫描前 100 个端口。最大值为 5000。如果 n 大于 5000,则自动设为 5000。80 扫描端口 8080-100 扫描端口 80 到 10080,443,8080 扫描端口 80、443 和 808080,443,8080-8090,t500 扫描端口 80、443、8080 到 8090 以及前 500 个端口--dns | -d 是 DNS 服务器的地址。应为有效的 IPv4 地址,并可选择包含端口号 —
a.b.c.d — 使用位于 的 DNS 服务器,端口 53示例
./domainim nmap.org --ports=all./domainim google.com --ports=none --dns=8.8.8.8#53./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --rps=1500./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --outfile=results.json./domainim mysite.com --ports=t50,5432,7000-9000 --dns=1.1.1.1帮助菜单可通过 ./domainim --help 或 ./domainim -h 访问。
Usage:
domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | l:<filename> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
domainim (-h | --help)
Options:
-h, --help 显示此屏幕。
-p, --ports 要扫描的端口。[默认: `none`]
可以设为 `all`、`none`、`t<n>`、单一值、范围值、组合值
-l, --wordlist 用于子域名暴力破解的单词列表。若文件无效则跳过暴力破解。
-d, --dns DNS 解析器的 IP 和端口。应为有效的 IPv4 地址,可附带端口 [默认: 系统默认]
-r, --rps 每秒发送的 DNS 查询数 [默认: 1024 req/s]
-o, --out 保存输出的 JSON 文件。文件名必须以 `.json` 结尾
示例:
domainim domainim.com -p:t500 -l:wordlist.txt --dns:1.1.1.1#53 --out=results.json
domainim sub.domainim.com --ports=all --dns:8.8.8.8 -t:1500 -o:results.json
结果的 JSON 模式如下 —
[
{
"subdomain": string,
"data": [
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
]
}
]
nmap.org 的示例 JSON 可以在这里找到。
欢迎贡献。欢迎提交拉取请求或 Issue。
该项目仍处于早期阶段。我已知晓存在若干限制。
目前使用的两个引擎(我称之为引擎,因为 Sublist3r 也这么称呼)都存在某种响应限制。dnsdumpster 最多可获取 100 个子域名。crt.sh 在结果过多时也会随机化结果。crt.sh 的另一个问题是它有时会返回 SQL 错误。因此对于某些域名,不同次运行的结果可能不同。我计划未来添加更多引擎(至少一个暴力破解引擎)。
端口扫描器仅有“ping 响应时间 + 750ms”的超时。这可能导致漏报。由于 domainim 并非为端口扫描设计,而是提供快速概览,此类情况可以接受。不过,我计划添加一个标志来增加超时时间。出于相同原因,已过滤的端口不会显示。如需更全面的端口扫描,建议使用 Nmap。Domainim 也不会绕过速率限制(如有)。
虚拟主机名的打印方式可能看起来重复。

如果打印成以下形式可能会更好 —
ack.nmap.org, issues.nmap.org, nmap.org, research.nmap.org, scannme.nmap.org, svn.nmap.org, www.nmap.org
↳ 45.33.49.119
↳ 反向 DNS: ack.nmap.org.
但之前的测试中,我发现并非所有 IP 都共享同一组虚拟主机名。因此我决定保持现样。

DNS 服务器可能存在某种速率限制。因此我在每次查询的 IPv4 解析中加入了随机延迟(0-300ms)。这样不会让 DNS 服务器一次性接收所有查询,而是以更自然的方式。对于暴力破解方法,默认值为 0-1000ms,但可通过 --rps | -t 标志更改。
一个让我困扰的特定限制是:DNS 解析器不会返回某个域名的所有 IP。因此需要多次查询才能获取全部(或大部分)IP。但问题在于,无法事先知道一个域名有多少个 IP。我仍需为此找出解决方案。另外,nim-ndns 不支持 CNAME 记录。因此,如果某个域名有 CNAME 记录,它将无法被解析。我正在等待作者的回复。
目前,如果发现可能的通配符子域名,则会跳过暴力破解。这是因为,如果域名存在通配符子域名,暴力破解会为所有可能的子域名解析 IPv4。然而,这也会跳过有效的子域名(例如 scanme.nmap.org 即使不是通配符值也会被跳过)。我稍后会添加 --force-brute | -fb 标志以强制暴力破解。
对于子域名输入的 VHost 枚举也存在类似情况。由于只返回以给定子域名结尾的 URL,因此不包括相同父域下的其他子域名。例如,scannme.nmap.org 不会为 ack.nmap.org 打印,但 something.ack.nmap.org 可能会。我可以搜索 nmap.org 的所有子域名,但这违背了以子域名作为输入的目的。
MIT 许可证。完整文本请参见 LICENSE。
a.b.c.da.b.c.d#n — 使用位于 a.b.c.d 的 DNS 服务器,端口 e--rps | -r — 暴力破解期间每秒发送的请求数。默认值为 1024 req/s。需要注意,DNS 查询按批次进行,只有上一批次完成后才会发送下一批次。由于查询可能受速率限制,增大该值并不总能保证更快的结果。--out | -o — 输出文件路径。输出将以 JSON 格式保存。文件名必须以 .json 结尾。