openSquat 是一个**开源情报(OSINT)**安全工具,用于识别针对您品牌或域名的网络抢注威胁:
| 威胁类型 | 描述 |
|---|---|
| 🎣 网络钓鱼 | 模仿您品牌的欺诈域名 |
| 🔤 域名抢注 | 包含常见拼写错误的域名(例如 gooogle.com) |
| 🌐 IDN 同形字 | 其他字母表中外形相似的字符 |
| 👥 双胞胎域名 | 包含您品牌名称的域名 |
| 🔀 位翻转抢注 | 域名中的单比特错误 |
"品牌保护的一把强力瑞士军刀" — WhoisXML API 博客,2022年8月
"一款拥有强大能力来对抗域名抢注及所有相关网络恶意行为的工具。" — WhoisXML API 博客,2022年8月
"一款收集新注册域名信息的便捷工具。" — 排名前 5 的钓鱼检测工具 — SOCRadar 博客,2022年7月
"openSquat 通过自动化监控与检测,为域名抢注和钓鱼攻击提供了基本保护。" — Prince Yadav,TutorialsPoint,2026年3月
"OpenSquat 识别了 103 个抢注域名、960 个活跃的钓鱼网站以及 53 个拥有可疑证书的域名。" — Sharma 等人,信息安全与网络犯罪研究杂志 (JISCR),第 7 卷,第 1 期,2024 年 6 月
openSquat 采用开放核心模型:
这种模式实现了透明度和社区协作,同时支持企业级使用所需的规模、可靠性和运营要求。
pip install opensquat
opensquat -k keywords.txt
git clone https://github.com/atenreiro/opensquat
cd opensquat
pip install -r requirements.txt
python3 opensquat.py -k keywords.txt
仓库用户: 在以下所有示例中,将
opensquat替换为python3 opensquat.py以从克隆的检出中运行。
confusable_homoglyphs, homoglyphs, colorama, requests, dnspython, beautifulsoup4# 默认运行
opensquat
# 显示所有选项
opensquat -h
# 使用自定义关键词文件
opensquat -k my_keywords.txt
# 通过 Quad9 进行 DNS 验证
opensquat --dns
# 检查证书透明度日志
opensquat --ct
# 扫描开放端口(80/443)
opensquat --portcheck
# 交叉引用钓鱼数据库
opensquat --phishing results.txt
# 保存为 JSON
opensquat -o results.json -t json
# 保存为 CSV
opensquat -o results.csv -t csv
| 级别 | 标志 | 描述 |
|---|---|---|
| 0 | -c 0 | 非常高(结果少,准确率高) |
| 1 | -c 1 | 高(默认) |
| 2 | -c 2 | 中等 |
| 3 | -c 3 | 低 |
| 4 | -c 4 | 非常低(结果更多,误报更多) |
注意: 在 API 端(
--api),五个置信度级别映射为四个模糊度值(exact、low、auto、high)——-c 3和-c 4都映射到high。有关完整映射以及如何通过--api-fuzziness覆盖,请参见高级和 API 模式。
openSquat 支持三种模式。默认模式(社区版)保持不变——现有用户无需添加任何标志。两种高级模式共享同一个 openSquat API 密钥;如果您希望使用相同的本地检测管道但拥有更大的数据源,请选择高级数据源;如果您希望进行服务器端检测而无需下载本地数据源,请选择高级 API。
| 模式 | 标志 | 功能说明 |
|---|---|---|
| 社区版(默认) | 无 | 下载免费 NRD 数据源(约每天 10 万个域名)并运行本地莱文斯坦检测。 |
| 高级数据源 | --premium | 使用您的 openSquat API 密钥下载付费 NRD 数据源(nrd-lite,规模大得多),然后运行相同的本地莱文斯坦检测。 |
| 高级 API | --api | 跳过本地数据源下载。针对每个关键词查询 openSquat 相似域名 REST API,返回服务器端匹配结果。 |
在 opensquat.com 注册以获取密钥。同一个密钥同时适用于高级数据源(--premium)和高级 API(--api)模式。
--api-key 你的密钥OPENSQUAT_API_KEY 环境变量api_key.txt 文件(每个文件一个密钥,允许 # 注释)CLI 标志在
ps输出中可见。在共享环境中,请优先使用环境变量或密钥文件。
# 高级数据源模式 — 相同的本地管道,更大的数据源
export OPENSQUAT_API_KEY=os_xxxxxxxxxxxx
opensquat -k keywords.txt --premium
# 高级 API 模式 — 针对每个关键词进行服务器端检测
opensquat -k keywords.txt --api
# 高级 API + 对每个返回的域名进行 DNS 信誉检查
opensquat -k keywords.txt --api --dns
# 高级 API 模式,按关键词分组的 JSON 格式输出
opensquat -k keywords.txt --api -t json -o results.json
# 调整高级 API 搜索参数
opensquat -k keywords.txt --api --api-fuzziness high --api-history-days 7 --api-max-results 200
当 --premium 或 --api 成功加载密钥时,CLI 会打印一行掩码确认信息,以便您验证加载的是哪个密钥而不会泄露它:
[*] API key loaded: os_gL...L5Mb
在高级 API 模式下,运行摘要会报告活动模式、进行的 API 调用次数以及您的剩余额度及使用变化(例如,4972 (used 4 of 4976 this run))。即使调用是并行进行的,每个关键词的进度行也会按照关键词文件中的顺序显示。配额耗尽(HTTP 429)会优雅地返回部分结果;认证错误(401)和计划错误(403)会中止并显示清晰的信息。
如果后端对您的请求进行速率限制(HTTP 429 且包含 Retry-After 头),工具会将其与配额耗尽区分开来:您将看到黄色的 [!] Rate limit hit (retry in Ns) 警告,而不是红色的 quota exhausted 消息,仍会返回部分结果,并且摘要会保留您真实的 API 余额,以便您确切知道使用了多少额度。要在大规模扫描中避免触发速率限制,请传递 --api-rate-limit N 来限制所有工作线程的每秒出站请求数。对于大多数后端,值 8 是一个安全的起点。
# 将所有工作线程的请求速率限制为每秒 8 个
opensquat -k keywords.txt --api --api-rate-limit 8
对于高级 API 模式,建议使用 JSON 作为输出格式,因为 API 会返回每个域名的元数据,其他格式无法同样清晰地携带:注册的 TLD、NRD 首次出现日期、IDN 同形字标志,以及当域名是同形字时的 Unicode 渲染。
opensquat -k keywords.txt --api -t json -o results.json
高级 API 模式下更丰富输出的示例(已截断):
[
{
"keyword": "microsoft",
"domains": [
{"domain": "securite-microsoft.fr", "tld": "fr", "date": "09-04-2026", "idn": false},
{"domain": "xn--mirosoft-hw7c.com", "tld": "com", "date": "09-04-2026", "idn": true, "unicode": "miᴄrosoft.com"}
]
}
]
idn 标志加上 unicode 渲染让您一眼就能看出 xn--mirosoft-hw7c.com 实际上是使用 ᴄ(拉丁文小型大写字母 C)冒充 "microsoft" 中的 'c'——纯 punycode 字符串完全隐藏了这些信息。
也支持 CSV 输出,每个域名一行,包含相同的元数据列,适合在 Excel 或 pandas 中工作的分析师:
opensquat -k keywords.txt --api -t csv -o results.csv
CSV 文件会写入 UTF-8 BOM,使 Windows 上的 Excel 能正确显示 Unicode 同形字列。
社区版和高级数据源模式为了跨模式一致性,会输出相同的 JSON 顶层结构,但每个条目仅填充 domain 字段——NRD 数据源不携带托管 API 才有的每个域名元数据:
[
{
"keyword": "microsoft",
"domains": [
{"domain": "mirosoft.com"},
{"domain": "mcrosoft.net"}
]
}
]
如果您传递了 --api-key 但没有同时选择 --premium 或 --api,CLI 会打印一行提示,说明该密钥在社区模式下将被忽略(不会静默切换模式)。
在高级 API 模式下,-c/--confidence 会自动映射为 API 模糊度(0→exact,1→low,2→auto,3→high,4→high)。使用 --api-fuzziness 可覆盖此行为。
高级 API(--api)与 --doppelganger 和 -d/--domains 不兼容。
keywords.txt)# 以 # 开头的行是注释
mycompany
mybrand
myproduct
vt_key.txt)要使用 --vt 或 --subdomains,请添加您的 API 密钥:
# 在 https://www.virustotal.com 获取免费 API 密钥
your_api_key_here
api_key.txt)--premium 和 --api 需要此文件。在工作目录中创建 api_key.txt 文件:
# 在 https://opensquat.com 获取您的密钥
# 以 # 开头的行会被忽略;使用第一个非注释行。
os_your_key_here
CLI 按以下顺序解析密钥:--api-key 标志 → $OPENSQUAT_API_KEY 环境变量 → api_key.txt 文件。在共享环境中,环境变量和文件方法优于 CLI 标志,因为 CLI 参数可通过 ps 看到。
通过 crontab 每日运行:
# pip 安装(推荐)—— 每天早上 8 点,数据源大约在 7:30 UTC 更新
0 8 * * * cd /path/to/workdir && opensquat -k keywords.txt -o results.json -t json