Skip to content

Commit f1a1483

Browse files
committed
first commit
0 parents  commit f1a1483

6 files changed

+916
-0
lines changed

README.MD

+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# nim-dnp — domain name predictor
2+
[![Python 2&3](https://img.shields.io/badge/nim-1.4.0-brightgreen.svg)](https://www.python.org/)
3+
4+
5+
6+
> 📌 原项目链接:https://github.com/LandGrey/domainNamePredictor
7+
>
8+
> 一个简单的现代化公司域名使用规律预测及生成工具
9+
>
10+
> A simple modernized enterprise domain name predictor and generator
11+
12+
13+
14+
作为学习,本项目采用 [Nim](https://nim-lang.org/) 语言重写了 domainNamePredictor:
15+
16+
- Nim 是一种静态类型的、编译型、系统编程语言。它结合了其他成熟语言的成功概念(如 Python、Ada、Modula)。Nim 生成原生且无依赖的可执行文件,不依赖于虚拟机,所以它们小巧,且易于分发。
17+
- 部分实现存在差异,添加了 `--silent` 模式,可直接通过管道与 ksubdomain、httpx 等工具联动。
18+
- 可在右侧 Releases 页面下载编译好的版本,文件大小约 237k +,单文件,体积小,便于携带。
19+
20+
21+
22+
## Snapshot
23+
24+
![](showcase.png)
25+
26+
27+
28+
## Download & Compile
29+
30+
```bash
31+
git clone https://github.com/inspiringz/nim-dnp.git
32+
cd nim-dnp/
33+
nimble install argparse
34+
nimble install itertools
35+
nim c -d:release dnp.nim
36+
```
37+
38+
39+
40+
## Usage
41+
42+
```bash
43+
Usage:
44+
[options]
45+
46+
-h, --help
47+
-d, --domain=DOMAIN single domain name (default: )
48+
-f, --file=FILE domain names file path (default: )
49+
-m, --mode=MODE choose predictor mode: [default, simple] Possible values: [default, simple] (default: default)
50+
-o, --output=OUTPUT result output path (default: )
51+
-s, --silent eg: dnp -d qq.com -s | ksubdomain -verify -silent | httpx -title -content-length -status-code
52+
```
53+
54+
```bash
55+
./dnp -h
56+
./dnp -d qq.com
57+
./dnp -f qq.com-domains.txt -m simple
58+
./dnp -d demo.qq.com -m simple -o /tmp/predictor-qq.com.txt
59+
```
60+
61+
& [ksubdomain](https://github.com/knownsec/ksubdomain/) & httpx:
62+
63+
```bash
64+
./dnp -d qq.com -s | ksubdomain -verify -silent | httpx -title -content-length -status-code
65+
```
66+
67+
68+
69+
## Q&A
70+
71+
- 什么叫 "**现代化**" 公司?
72+
73+
我个人主观判断上的不成熟定义,就是公司整体 IT 基础设施和架构设计完善,会使用微服务、协同开发、自动化测试、自动化打包发布、自动化部署、自动化日志收集和自动化运维监控等多项 "现代化" 的技术解决高并发等较大体量业务问题的公司;
74+
75+
这些公司或组织团体一般有较多业务,以互联网领域、近些年新成立的公司居多,域名命名及分配使用比较规范。
76+
77+
78+
79+
- 什么是**域名预测**
80+
81+
简答来讲就是基于 "现代化" 公司比较规范的域名使用规律已经使用的新技术架构,在已知某个域名后,预测该域名可能有哪些变体形式的域名。
82+
83+
举一个简单的例子:
84+
85+
已知 A 公司有一个域名 `shoot.A.com`,那么对应的接口服务域名可能是 `api.shoot.A.com``shoot.restful-api.A.com``shoot-api.A.com` 等;
86+
87+
测试、预发等不同环境的域名可能是
88+
89+
`shoot-api.test.A.com``test.api.shoot.A.com``pre.shoot-api.A.com` 等;
90+
91+
对应的不同环境的管理监控域名可能是 `shoot-monitor.dev.A.com``shoot-dev-monitor.A.com``st1.shoot-dashboard.A.com` 等;
92+
93+
对应不同负载代理的域名可能是 `shoot-api.corp.A.com``api.shoot.internal.A.com` 等;
94+
95+
对应的后端 api 服务生产环境的域名可能是 `backend-api.prod.shoot.A.com``backend-api-prod.shoot.A.com`等。
96+
97+
当然,在缺少域名前缀,仅知道域名为 `A.com` 时,也可以按照此规律直接进行预测。
98+
99+
100+
101+
- 为什么要写这个工具?
102+
103+
随着对许多 "现代化" 业务的接触和实际渗透测试,我发现在域名的探测这个很小的领域中,现有的子域名爆破、第三方服务接口查询都不能很好的覆盖到 **域名预测** 这个概念。
104+
105+
这样当你得到 `shoot.A.com` 域名后,很可能会遗漏上面举例中的相关重要域名,导致 "**灯下黑**"。
106+
107+
108+
109+
- 这个工具可以干什么?
110+
111+
按照配置文件和生成规则来完成上述的**域名预测**,生成完整的域名字典。
112+
113+
目前一个域名在 `simple` 规则下大概生成 **6w—7w** 左右个域名,在 `default` 规则下生成 **26w—29w** 个域名。
114+
115+
生成完域名后可以用支持完整域名验证的工具去验证域名是否存在,比如使用 [ksubdomain](https://github.com/knownsec/ksubdomain) 命令 `subdomain -f predictor-domains.txt -verify`
116+
117+
118+

0 commit comments

Comments
 (0)