Aliens Eye架构全景:从异步扫描队列、限流重试到报告流水线的完整解读
【免费下载链接】Aliens_eyeHunt down 840+ social media accounts using AI项目地址: https://gitcode.com/gh_mirrors/al/Aliens_eye
Aliens Eye是一款 AI 驱动的 OSINT 用户名扫描器,可在数秒内异步扫描 840+ 社交平台并判定账号是否存在。本文带你完整解读它的内部架构:异步扫描队列如何并行调度请求、按域名限流与指数退避重试如何避免被目标封禁、结果又如何流经检测引擎与报告流水线,最终落成 JSON、CSV、HTML、PDF 等多种格式的成果文件。
一次扫描的数据旅程:先看清整条流水线
在深入细节前,先看官方工作文档 WORKING.md 中给出的高层流程。一次扫描大致经历七个阶段:
- 加载配置:合并 JSON 配置文件与命令行参数(CLI 优先)
- 加载站点模板:从打包的 sites.json 读取 840+ 站点的 URL 模板
- 生成用户名变体:basic / advanced 级别会派生前缀、后缀变体
- 队列与并发抓取:asyncio 工作池 + 限流 + 重试
- 特征提取与检测:30 维特征向量喂给"ML + 启发式"双评委
- 指纹学习:高置信度结果沉淀为站点指纹,供后续扫描复用
- 报告落盘:带时间戳的多格式输出
异步扫描队列:asyncio.Queue 驱动的工作池
核心调度逻辑在 scanner.py 的scan_all_sites方法中,思路非常经典:
- 任务队列:所有待扫描的
(站点, URL模板)元组先放入一个asyncio.Queue - 工作池:按
concurrent配置(默认 50)创建等量的异步 worker 任务,每个 worker 循环执行"取任务 → 抓取 → 解析 → 检测 → 回写结果" - 优雅收尾:主协程
await queue.join()等队列清空后,统一取消并回收 worker
这套设计的几个值得借鉴的细节:
| 设计点 | 实现位置 | 好处 |
|---|---|---|
| 单站点失败不拖垮全局 | scanner.py | worker 捕获异常后记为Error结果,扫描继续 |
进度钩子on_result | scanner.py | 终端 UI、Web 前端都能拿到逐站点进度 |
网络注入点fetch | scanner.py | 可整体换成语料回放器,离线复现评估 |
| 断点续扫 | checkpoint.py | 中断后跳过已完成站点,只扫剩余部分 |
其中 checkpoint.py 的Checkpoint采用"每完成一个站点就追加一行 JSON"的追加式日志,Ctrl-C 或崩溃后重跑时用--resume file.jsonl即可从断点继续,已完成的站点直接复用旧结果——对动辄八百多个站点的长扫描非常实用。
限流重试:对目标站点更友好的并发
并发扫描最怕"手太快被拉黑"。Aliens Eye 用两层机制控制节奏,实现在 http.py 和 rate_limit.py:
按域名限流(DomainRateLimiter)
DomainRateLimiter维护每个域名的独立锁与"下次允许请求时间":同一域名的两次请求之间至少间隔rate_limit_delay(默认 0.2 秒)。不同域名互不阻塞——扫 500 个不同站点依然是全速并发,但同一网站不会被连环轰炸。
指数退避 + Retry-After 感知
抓取层的重试策略(http.py):
- 可重试状态码:408 / 429 / 500 / 502 / 503 / 504,遇到即触发重试
- 退避公式:
min(base × 2^attempt, cap) + 随机抖动,避免多个请求"整齐划一"地重试 - 尊重 Retry-After:若服务器在响应头中给出等待秒数,退避时间取其较大值
此外还有两个容易忽略的工程细节:
- 有上限的正文读取:
read_capped循环读取直到达到max_content_bytes或 EOF。历史上单次read(n)只返回"当前已到包的字节",会导致每次抓到长度不一的页面碎片、特征全乱——这是一个真实的踩坑修复 - 超大响应头兼容:部分站点(如 trakt)的响应头超过 aiohttp 默认 8190 字节上限,config.py 将
MAX_HEADER_SIZE提升到 64KB,否则这些站点会直接扫成报错
检测引擎:30 维特征 × 双评委投票
抓到的 HTML 不会只凭状态码下结论。analyzer.py 会把每个响应压成 30 维特征向量(状态码分桶、用户名出现位置、正/负关键词计数、DOM 结构、og:type / JSON-LD 信号、响应时长、重定向上数等),再交给 detector.py 的Detector:
- 启发式评委:对特征做加权打分,sigmoid 压成概率
- ML 评委:纯 Python 推理的逻辑回归模型(inference.py),运行时零 sklearn 依赖
最终概率按0.9 × ML + 0.1 × 启发式混合(权重由随包模型 model.json 自带),映射到Found / Maybe / Not Found三档并附置信度。若结果落在 Maybe 且启用了 Playwright,browser.py 会用真实浏览器渲染页面重跑一遍,有机会升级判定。
报告流水线:一份数据,多种格式出口
扫描结束后,exporter.py 的ResultsExporter.save_results负责落盘。所有文件共享用户名_级别_时间戳前缀,默认输出四种格式:
| 格式 | 用途 |
|---|---|
.json | 全量细节,含逐站点特征分析,可供程序二次消费 |
.csv | 扁平表格,直接进 Excel |
.html | 独立样式的可分享报告页 |
.md | Found / Maybe 摘要,方便贴进笔记 |
按需还可追加分析型产物:GEXF / Mermaid / Maltego CSV 关系图(配合--correlate聚类同一个人的账号)以及内嵌头像的 PDF 调查报告(pdf_report.py)。--format all一键全导出,--output指定输出目录。
配置优先级与快速上手
配置遵循默认值 < config.json < 命令行参数的优先级(WORKING.md 有对应流程图),config.example.json 展示了全部可调项:并发数、超时、重试次数、限流间隔、代理与 NSFW 过滤等。
最简上手路径:
pip install aliens-eye aliens_eye username --format all --output results aliens_eye username --watch 6h # 定期复扫并监控变化 aliens_eye username --resume scan.jsonl # 中断后续扫想把它嵌进自己的工具?稳定库接口在 api.py,api.scan()返回与 JSON 报告同构的纯 dict,默认不打印任何内容。
总结
Aliens Eye 的架构可以浓缩为一句话:用 asyncio 工作池换速度,用域名限流与指数退避换克制,用双评委检测换精度,用多格式流水线换场景覆盖。四层设计各司其职,再加上断点续扫与可回放的fetch注入点,整个扫描引擎既跑得动、也测得准、还能断得续——这套模式对任何需要大规模 HTTP 探测的项目都是很好的参考模板。
【免费下载链接】Aliens_eyeHunt down 840+ social media accounts using AI项目地址: https://gitcode.com/gh_mirrors/al/Aliens_eye
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考