📌 目录

    第1课-课程介绍与环境搭建

    第1课:课程介绍与环境搭建

    课程目标

    通过本课程学习,你将能够:

    • 理解OneForAll项目的背景和应用场景
    • 了解子域名收集在安全测试中的重要性
    • 完成Python开发环境的搭建
    • 配置虚拟环境和开发工具
    • 成功运行OneForAll并进行基础测试
    • 理解项目的整体目录结构

    1.1 OneForAll项目简介

    1.1.1 什么是OneForAll?

    OneForAll是一款功能强大的子域名收集工具,由开发者Jing Ling(shmilylty)创建并开源。该工具集成了多种子域名发现技术,旨在解决传统子域名收集工具存在的问题。

    项目地址:

    当前版本: v0.4.5

    开发语言: Python 3.6+

    开源协议: GPL-3.0


    1.1.2 为什么需要OneForAll?

    传统子域名收集工具存在以下痛点:

    1. 功能不够强大

    • 收集接口数量有限
    • 缺乏批量处理能力
    • 没有自动DNS解析和验证
    • 缺少FUZZ和信息拓展功能

    2. 使用不够友好

    • 命令行参数复杂难记
    • 缺少交互式界面
    • 配置管理不便

    3. 维护不够及时

    • 很多工具多年未更新
    • 缺少issues和PR处理
    • Bug修复缓慢

    4. 性能效率低

    • 没有利用多进程/多线程
    • 缺少异步协程技术
    • 处理速度较慢

    OneForAll正是为了解决这些问题而生,正如其名"集百家之长",它是一款功能全面、速度快速的子域名收集终极工具。


    1.1.3 OneForAll的核心特性

    📊 强大的收集能力

    OneForAll集成了多种子域名收集技术,包含6大类型、超过60个收集模块:

    1. 证书透明度收集(6个模块)

      • censys_api
      • certspotter
      • crtsh
      • entrust
      • google
      • spyse_api
    2. 常规检查收集(4个模块)

      • 域传送漏洞利用(axfr)
      • 检查跨域策略文件(cdx)
      • 检查HTTPS证书(cert)
      • 检查内容安全策略(csp)
      • 检查robots文件(robots)
      • 检查sitemap文件(sitemap)
      • 利用NSEC记录遍历DNS域(dnssec)
    3. 网上爬虫档案收集(2个模块)

      • archivecrawl
      • commoncrawl
    4. DNS数据集收集(24个模块)

      • binaryedge_api, bufferover, cebaidu
      • chinaz, chinaz_api, circl_api
      • cloudflare, dnsdb_api, dnsdumpster
      • hackertarget, ip138, ipv4info_api
      • netcraft, passivedns_api, ptrarchive
      • qianxun, rapiddns, riddler, robtex
      • securitytrails_api, sitedossier
      • threatcrowd, wzpc, ximcx
    5. DNS查询收集(5个模块)

      • SRV记录查询(srv)
      • MX记录查询(mx)
      • NS记录查询(ns)
      • SOA记录查询(soa)
      • TXT记录查询(txt)
    6. 威胁情报平台收集(6个模块)

      • alienvault
      • riskiq_api
      • threatbook_api
      • threatminer
      • virustotal
      • virustotal_api
    7. 搜索引擎发现(18个模块)

      • ask, baidu, bing, bing_api
      • duckduckgo, exalead, fofa_api
      • gitee, github, github_api
      • google, google_api, shodan_api
      • so, sogou, yahoo, yandex
      • zoomeye_api

    🔥 子域爆破功能

    • 支持常规字典爆破
    • 支持自定义FUZZ模式
    • 支持批量爆破和递归爆破
    • 自动判断泛解析并处理
    • 集成massdns高性能DNS解析器

    ✅ 子域验证功能

    • 默认开启子域验证
    • 自动解析子域DNS
    • 自动请求子域获取title和banner
    • 综合判断子域存活情况

    🕷️ 子域爬取功能

    • 根据已有子域爬取页面
    • 从响应体中提取新子域
    • 分析JavaScript文件发现子域

    🔄 子域置换功能

    • 使用子域替换技术
    • 根据已有子域发现新子域
    • 智能模式识别

    🛡️ 子域接管检测

    • 默认开启接管风险检查
    • 支持子域自动接管(Github)
    • 支持批量检查

    ⚡ 极快的处理速度

    • 收集模块使用多线程调用
    • 爆破模块使用massdns
    • DNS解析速度每秒可达350,000+域名
    • 子域验证使用异步多协程
    • 多线程检查子域接管风险

    👍 良好的用户体验

    • 各模块都有进度条显示
    • 异步保存各模块结果
    • 详细的日志记录

    1.2 子域名收集的重要性

    1.2.1 什么是子域名?

    定义:
    子域名是指主域名下的二级或更深层级的域名。例如:

    • 主域名:example.com
    • 子域名:www.example.commail.example.comapi.example.com

    子域名层次结构:

    example.com                    # 主域名(根域)
    ├── www.example.com            # 二级域名(子域名)
    ├── mail.example.com           # 二级域名(子域名)
    ├── api.example.com            # 二级域名(子域名)
    ├── dev.api.example.com        # 三级域名(子子域名)
    └── test.mail.example.com      # 三级域名(子子域名)
    

    1.2.2 为什么子域名收集如此重要?

    在渗透测试和安全评估中,信息收集是整个过程中最重要的环节之一,而子域名收集则是信息收集中必不可少且非常关键的部分。

    🎯 扩大攻击面

    • 每个子域名可能对应不同的应用或服务
    • 发现更多潜在的安全漏洞
    • 增加渗透测试的覆盖范围

    💡 发现隐藏资产

    • 许多组织存在未公开或被遗忘的子域名
    • 这些隐藏资产往往安全防护较弱
    • 可能成为攻击的突破口

    🔍 了解业务架构

    • 通过子域名命名规则了解业务结构
    • 识别不同业务模块和系统
    • 为后续攻击提供方向

    🛡️ 安全评估需求

    • 企业需要全面了解自己的网络资产
    • 发现未授权的影子资产
    • 评估整体安全状况

    📊 情报收集

    • 收集目标组织的所有网络资产
    • 分析资产分布和重要程度
    • 为安全决策提供数据支持

    1.2.3 子域名收集的应用场景

    1. 渗透测试

    目标:example.com
    └── 发现子域名:www.example.com, mail.example.com, dev.example.com
        ├── www.example.com → 发现SQL注入漏洞
        ├── mail.example.com → 发现弱口令
        └── dev.example.com → 发现未授权访问
    

    2. 红蓝对抗

    • 收集蓝队资产信息
    • 寻找防御薄弱点
    • 制定攻击策略

    3. 漏洞挖掘

    • 发现更多测试目标
    • 增加漏洞发现概率
    • 提高挖洞效率

    4. 资产梳理

    • 企业资产盘点
    • 发现僵尸资产
    • 资产分类管理

    5. 威胁情报

    • 监控新出现的子域名
    • 发现可疑活动
    • 及时响应威胁

    1.3 Python开发环境搭建

    1.3.1 系统要求

    硬件要求:

    • CPU: 双核及以上
    • 内存: 4GB及以上(推荐8GB)
    • 硬盘: 至少10GB可用空间

    软件要求:

    • 操作系统: Windows / macOS / Linux
    • Python版本: 3.6.0 或更高版本
    • 网络连接: 需要连接互联网(用于安装依赖和收集子域名)

    1.3.2 安装Python

    Windows系统

    方法一:从官网下载安装

    1. 访问Python官网:https://www.python.org/downloads/

    2. 下载Python 3.6或更高版本的Windows安装包

    3. 运行安装程序,重要: 勾选 "Add Python to PATH"

      ![Add Python to PATH]

    4. 选择 "Install Now" 或 "Customize installation"

    5. 等待安装完成

    6. 验证安装:

      # 打开命令提示符(CMD)或PowerShell
      python --version
      # 或
      python3 --version
      

      如果看到版本号(如 Python 3.9.7),说明安装成功

    7. 同时验证pip:

      pip --version
      # 或
      pip3 --version
      

    方法二:使用Microsoft Store安装

    1. 打开Microsoft Store
    2. 搜索 "Python 3.x"
    3. 点击安装
    4. 安装完成后在命令行验证

    macOS系统

    方法一:使用Homebrew安装(推荐)

    1. 如果未安装Homebrew,先安装Homebrew:

      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
      
    2. 安装Python:

      brew install python
      
    3. 验证安装:

      python3 --version
      pip3 --version
      

    方法二:从官网下载安装

    1. 访问Python官网:https://www.python.org/downloads/macos/

    2. 下载macOS安装包(.pkg文件)

    3. 双击运行安装包

    4. 按照安装向导完成安装

    5. 验证安装:

      python3 --version
      pip3 --version
      

    Linux系统(Ubuntu/Debian)

    使用包管理器安装:

    # 更新软件包列表
    sudo apt update
    
    # 安装Python 3和pip
    sudo apt install python3 python3-pip
    
    # 验证安装
    python3 --version
    pip3 --version
    

    CentOS/RHEL系统:

    # 安装Python 3和pip
    sudo yum install python3 python3-pip
    
    # 验证安装
    python3 --version
    pip3 --version
    

    1.3.3 配置Python环境变量

    Windows系统:

    1. 右键点击 "此电脑" → "属性"

    2. 点击 "高级系统设置"

    3. 点击 "环境变量"

    4. 在 "系统变量" 中找到 "Path",点击 "编辑"

    5. 添加以下路径(根据你的Python安装位置):

      C:\Users\你的用户名\AppData\Local\Programs\Python\Python3x\
      C:\Users\你的用户名\AppData\Local\Programs\Python\Python3x\Scripts\
      
    6. 点击 "确定" 保存

    7. 重新打开命令提示符,验证:

      python --version
      

    1.4 虚拟环境配置

    1.4.1 为什么需要虚拟环境?

    虚拟环境的作用:

    • 隔离项目依赖,避免版本冲突
    • 保持系统Python环境的清洁
    • 方便项目迁移和部署
    • 可以精确控制每个项目的依赖版本

    对比:

    不使用虚拟环境:
    系统Python → 项目A依赖 → 项目B依赖 → 版本冲突 ❌
    
    使用虚拟环境:
    系统Python
    ├── 项目A虚拟环境 → 独立依赖 ✅
    └── 项目B虚拟环境 → 独立依赖 ✅
    

    1.4.2 使用venv创建虚拟环境

    Python 3.3+ 内置了venv模块,无需额外安装。

    Windows系统

    # 1. 进入项目目录
    cd E:\kali_map\OneForAll-0.4.5
    
    # 2. 创建虚拟环境(命名为venv)
    python -m venv venv
    
    # 3. 激活虚拟环境
    venv\Scripts\activate
    
    # 激活后,命令行前会显示 (venv)
    # (venv) E:\kali_map\OneForAll-0.4.5>
    
    # 4. 验证虚拟环境
    python --version
    pip --version
    
    # 5. 退出虚拟环境
    deactivate
    

    macOS/Linux系统

    # 1. 进入项目目录
    cd /path/to/OneForAll-0.4.5
    
    # 2. 创建虚拟环境(命名为venv)
    python3 -m venv venv
    
    # 3. 激活虚拟环境
    source venv/bin/activate
    
    # 激活后,命令行前会显示 (venv)
    # (venv) $ 
    
    # 4. 验证虚拟环境
    python3 --version
    pip3 --version
    
    # 5. 退出虚拟环境
    deactivate
    

    1.4.3 使用pipenv创建虚拟环境(可选)

    pipenv是Python官方推荐的包管理工具,结合了pip和virtualenv的功能。

    安装pipenv

    # Windows
    pip install pipenv
    
    # macOS/Linux
    pip3 install pipenv
    

    使用pipenv创建环境

    # 进入项目目录
    cd E:\kali_map\OneForAll-0.4.5
    
    # 创建虚拟环境并安装依赖
    pipenv install
    
    # 激活虚拟环境
    pipenv shell
    
    # 或在虚拟环境中运行命令
    pipenv run python oneforall.py --help
    
    # 退出虚拟环境
    exit
    

    1.4.4 虚拟环境最佳实践

    1. 创建requirements.txt

    # 导出当前环境依赖
    pip freeze > requirements.txt
    

    2. 在新环境中安装依赖

    pip install -r requirements.txt
    

    3. 指定Python版本创建虚拟环境

    # Windows
    python -m venv venv
    
    # macOS/Linux
    python3 -m venv venv
    

    4. 不要将虚拟环境提交到版本控制
    在.gitignore中添加:

    venv/
    env/
    .venv/
    

    1.5 项目依赖安装

    1.5.1 查看项目依赖

    OneForAll项目的依赖列表在 requirements.txt 文件中:

    beautifulsoup4==4.11.1
    bs4==0.0.1
    certifi==2022.06.15
    chardet==5.0.0
    colorama==0.4.4
    dnspython==2.2.1
    exrex==0.10.5
    fire==0.7.0
    future==0.18.2
    idna==3.3
    loguru==0.6.0
    PySocks==1.7.1
    requests==2.28.1
    six==1.16.0
    soupsieve==2.3.2
    SQLAlchemy==1.3.22
    tenacity==8.0.1
    termcolor==1.1.0
    tqdm==4.64.0
    treelib==1.6.1
    urllib3==1.26.9
    win32-setctime==1.1.0
    

    1.5.2 安装项目依赖

    方法一:使用requirements.txt(推荐)

    # 1. 确保虚拟环境已激活
    # Windows
    venv\Scripts\activate
    
    # macOS/Linux
    source venv/bin/activate
    
    # 2. 升级pip和基础工具
    python -m pip install --upgrade pip setuptools wheel
    
    # 3. 安装项目依赖
    pip install -r requirements.txt
    
    # 4. 如果使用国内镜像加速(推荐)
    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
    
    # 或使用清华源
    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
    

    方法二:逐个安装核心依赖

    # 安装核心依赖
    pip install beautifulsoup4
    pip install requests
    pip install dnspython
    pip install aiohttp
    pip install fire
    pip install loguru
    pip install tqdm
    pip install SQLAlchemy
    pip install colorama
    

    1.5.3 常用国内pip镜像源

    阿里云镜像:

    pip install 包名 -i https://mirrors.aliyun.com/pypi/simple/
    

    清华镜像:

    pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple/
    

    豆瓣镜像:

    pip install 包名 -i https://pypi.douban.com/simple/
    

    永久配置镜像源:

    # Windows
    pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
    
    # macOS/Linux
    pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
    

    1.5.4 验证依赖安装

    # 查看已安装的包
    pip list
    
    # 检查特定包是否安装
    pip show requests
    
    # 检查依赖完整性
    pip check
    

    1.6 开发工具选择与配置

    1.6.1 推荐的开发工具

    1. Visual Studio Code(推荐)

    优点:

    • 免费、开源、跨平台
    • 轻量级但功能强大
    • 丰富的插件生态
    • 优秀的Python支持

    安装:

    1. 访问:https://code.visualstudio.com/
    2. 下载并安装VS Code
    3. 安装Python插件(官方插件)

    配置:

    // settings.json
    {
        "python.defaultInterpreterPath": "venv/Scripts/python.exe",
        "python.linting.enabled": true,
        "python.linting.pylintEnabled": true,
        "python.formatting.provider": "black",
        "python.formatting.blackPath": "venv/Scripts/black.exe",
        "editor.formatOnSave": true
    }
    

    2. PyCharm

    优点:

    • 专业的Python IDE
    • 强大的调试功能
    • 智能代码补全
    • 内置版本控制集成

    版本:

    • PyCharm Community(免费,功能够用)
    • PyCharm Professional(收费,功能更强大)

    配置步骤:

    1. 下载并安装PyCharm
    2. 打开项目:File → Open → 选择OneForAll目录
    3. 配置Python解释器:
      • File → Settings → Project → Python Interpreter
      • 点击齿轮 → Add → Existing environment
      • 选择虚拟环境中的Python解释器

    3. Sublime Text

    优点:

    • 极快启动速度
    • 简洁的界面
    • 丰富的插件

    配置:

    1. 安装Sublime Text
    2. 安装Package Control
    3. 安装Python相关插件(Anaconda、SublimeLinter等)

    1.6.2 VS Code配置详细步骤

    1. 安装必要插件

    打开VS Code,按 Ctrl+Shift+X 打开插件面板,搜索并安装:

    1. Python(Microsoft官方插件)

      • 提供Python语言支持
      • 代码补全、调试、linting
    2. Pylint

      • Python代码检查工具
    3. Black

      • Python代码格式化工具
    4. GitLens

      • 增强Git功能
    5. Material Icon Theme

      • 美化文件图标

    2. 配置Python解释器

    1. 打开命令面板:Ctrl+Shift+P

    2. 输入:Python: Select Interpreter

    3. 选择虚拟环境中的Python解释器:

      Enter interpreter path...
      → Find...
      → 选择 venv/Scripts/python.exe (Windows)
      → 或选择 venv/bin/python (macOS/Linux)
      
    4. 验证配置:

      • 打开任意Python文件
      • 右下角应显示Python版本信息
      • 打开终端应显示虚拟环境

    3. 配置代码格式化

    1. 安装Black:

      pip install black
      
    2. 打开设置:Ctrl+,

    3. 搜索 "format on save"

    4. 勾选 "Editor: Format On Save"

    5. 搜索 "formatting provider"

    6. 选择 "black"


    4. 配置代码检查

    1. 安装Pylint:

      pip install pylint
      
    2. 打开设置:Ctrl+,

    3. 搜索 "linting"

    4. 启用 "Python → Linting: Enabled"

    5. 选择 "Python → Linting: Pylint Enabled"


    1.7 运行OneForAll

    1.7.1 验证环境配置

    # 1. 激活虚拟环境
    # Windows
    venv\Scripts\activate
    
    # macOS/Linux
    source venv/bin/activate
    
    # 2. 检查Python版本
    python --version
    # 应显示:Python 3.6.x 或更高版本
    
    # 3. 检查pip版本
    pip --version
    
    # 4. 检查依赖是否安装
    pip list | findstr requests  # Windows
    pip list | grep requests   # macOS/Linux
    

    1.7.2 运行OneForAll帮助命令

    # 查看帮助信息
    python oneforall.py --help
    
    # 或
    python3 oneforall.py --help
    

    预期输出:

    NAME
        oneforall.py - OneForAll帮助信息
    
    SYNOPSIS
        oneforall.py COMMAND | --target=TARGET <flags>
    
    DESCRIPTION
        OneForAll是一款功能强大的子域收集工具
    
        Example:
            python3 oneforall.py version
            python3 oneforall.py --target example.com run
            python3 oneforall.py --targets ./domains.txt run
    

    1.7.3 运行OneForAll版本信息

    # 查看版本信息
    python oneforall.py version
    

    预期输出:

                  ___             _ _ 
     ___ ___ ___|  _|___ ___ ___| | | {v0.4.5 #dev}
    | . |   | -_|  _| . |  _| .'| | | 
    |___|_|_|___|_| |___|_| |__,|_|_| git.io/fjHT1
    
    OneForAll is under development, please update before each use!
    

    1.7.4 运行第一个示例

    # 对example.com进行子域名收集
    python oneforall.py --target example.com run
    
    # 注意:这只是示例,实际使用时会连接多个数据源
    # 首次运行可能需要较长时间
    

    运行过程说明:

    1. 显示OneForAll banner
    2. 开始子域名收集
    3. 各模块并发执行
    4. 显示进度条
    5. 保存结果到results目录

    1.7.5 查看运行结果

    # 进入结果目录
    cd results
    
    # 查看生成的文件
    dir  # Windows
    ls   # macOS/Linux
    

    预期文件:

    example.com.csv                    # 该主域的子域名结果
    all_subdomain_result_xxxxxxxx.csv  # 所有收集到的子域名汇总
    result.sqlite3                     # SQLite数据库结果
    

    1.8 项目目录结构详解

    1.8.1 整体目录结构

    OneForAll-0.4.5/
    ├── .github/                    # GitHub相关文件
    │   ├── ISSUE_TEMPLATE/         # Issue模板
    │   └── workflows/              # GitHub Actions工作流
    │
    ├── common/                     # 公共调用模块
    │   ├── crawl.py               # 爬虫公共模块
    │   ├── database.py            # 数据库操作模块
    │   ├── domain.py              # 域名处理模块
    │   ├── lookup.py              # DNS查询模块
    │   ├── module.py              # 模块基类
    │   ├── query.py               # 查询公共模块
    │   ├── request.py             # HTTP请求模块
    │   ├── resolve.py             # DNS解析模块
    │   ├── search.py              # 搜索公共模块
    │   ├── utils.py               # 工具函数模块
    │   └── __init__.py
    │
    ├── config/                     # 配置目录
    │   ├── api.py                 # API配置文件
    │   ├── default.py             # 默认配置
    │   ├── log.py                 # 日志配置
    │   └── setting.py             # 主配置文件
    │
    ├── data/                       # 数据文件目录
    │   ├── authoritative_dns.txt  # 泛解析权威DNS列表
    │   ├── fingerprints.json      # 子域接管指纹
    │   ├── nameservers.txt        # 全球名称服务器
    │   ├── nameservers_cn.txt     # 中国名称服务器
    │   ├── public_suffix_list.dat # 公共后缀列表
    │   ├── srv_prefixes.json      # SRV记录前缀
    │   ├── subnames.txt           # 子域爆破字典
    │   ├── subnames_big.7z        # 大型子域字典
    │   └── subnames_next.txt      # 递归爆破字典
    │
    ├── docs/                       # 文档目录
    │   ├── changes.md             # 变更记录
    │   ├── collection_modules.md  # 收集模块说明
    │   ├── contributors.md        # 贡献者列表
    │   ├── directory_structure.md # 目录结构说明
    │   ├── dictionary_source.md   # 字典来源说明
    │   ├── en-us/                 # 英文文档
    │   ├── installation_dependency.md # 安装依赖说明
    │   ├── todo.md                # 开发计划
    │   ├── troubleshooting.md     # 故障排除
    │   └── usage_help.md          # 使用帮助
    │
    ├── images/                     # 图片资源
    │   ├── Database.png
    │   ├── Donate.png
    │   └── Result.png
    │
    ├── modules/                    # 功能模块目录
    │   ├── autotake/              # 自动接管模块
    │   │   └── github.py
    │   │
    │   ├── certificates/          # 证书透明度模块
    │   │   ├── censys_api.py
    │   │   ├── certspotter.py
    │   │   ├── crtsh.py
    │   │   ├── entrust.py
    │   │   ├── google.py
    │   │   └── spyse_api.py
    │   │
    │   ├── check/                 # 常规检查模块
    │   │   ├── axfr.py
    │   │   ├── cdx.py
    │   │   ├── cert.py
    │   │   ├── csp.py
    │   │   ├── robots.py
    │   │   └── sitemap.py
    │   │
    │   ├── crawl/                 # 爬虫档案模块
    │   │   ├── archivecrawl.py
    │   │   └── commoncrawl.py
    │   │
    │   ├── datasets/              # DNS数据集模块
    │   │   ├── binaryedge_api.py
    │   │   ├── bufferover.py
    │   │   ├── cebaidu.py
    │   │   ├── chinaz.py
    │   │   ├── chinaz_api.py
    │   │   ├── circl_api.py
    │   │   ├── cloudflare.py
    │   │   ├── dnsdb_api.py
    │   │   ├── dnsdumpster.py
    │   │   ├── hackertarget.py
    │   │   ├── ip138.py
    │   │   ├── ipv4info_api.py
    │   │   ├── netcraft.py
    │   │   ├── passivedns_api.py
    │   │   ├── ptrarchive.py
    │   │   ├── qianxun.py
    │   │   ├── rapiddns.py
    │   │   ├── riddler.py
    │   │   ├── robtex.py
    │   │   ├── securitytrails_api.py
    │   │   ├── sitedossier.py
    │   │   ┑── threatcrowd.py
    │   │
    │   ├── dnsquery/              # DNS查询模块
    │   │   ├── mx.py
    │   │   ├── ns.py
    │   │   ├── soa.py
    │   │   ├── srv.py
    │   │   └── txt.py
    │   │
    │   ├── intelligence/          # 威胁情报模块
    │   │   ├── alienvault.py
    │   │   ├── riskiq_api.py
    │   │   ├── threatbook_api.py
    │   │   ├── threatminer.py
    │   │   ├── virustotal.py
    │   │   └── virustotal_api.py
    │   │
    │   ├── search/                # 搜索引擎模块
    │   │   ├── ask.py
    │   │   ├── baidu.py
    │   │   ├── bing.py
    │   │   ├── bing_api.py
    │   │   ├── exalead.py
    │   │   ├── fofa_api.py
    │   │   ├── gitee.py
    │   │   ├── github.py
    │   │   ├── github_api.py
    │   │   ├── google.py
    │   │   ├── google_api.py
    │   │   ├── shodan_api.py
    │   │   ├── so.py
    │   │   ├── sogou.py
    │   │   ├── yahoo.py
    │   │   ├── yandex.py
    │   │   └── zoomeye_api.py
    │   │
    │   ├── altdns.py              # 子域置换模块
    │   ├── collect.py             # 收集模块调度
    │   ├── enrich.py              # 信息丰富化模块
    │   ├── finder.py              # 子域查找模块
    │   ├── srv.py                 # SRV记录爆破模块
    │   └── wildcard.py            # 泛解析处理模块
    │
    ├── results/                    # 结果输出目录(运行后生成)
    │   ├── example.com.csv
    │   ├── all_subdomain_result_xxxxxxxx.csv
    │   └── result.sqlite3
    │
    ├── thirdparty/                 # 第三方工具
    │   └── massdns/               # massdns工具
    │       ├── massdns_linux_x86_64
    │       ├── massdns_windows_amd64.exe
    │       └── ...
    │
    ├── Tutorial/                   # 教程目录(本课程文档)
    │   ├── OneForAll学习指南.md
    │   ├── 课程大纲.md
    │   └── 第1课-课程介绍与环境搭建.md
    │
    ├── brute.py                    # 子域爆破模块(可独立运行)
    ├── export.py                   # 数据导出模块
    ├── oneforall.py                # 主程序入口
    ├── takeover.py                 # 子域接管检测模块
    ├── test.py                     # 测试文件
    ├── requirements.txt            # Python依赖列表
    ├── README.md                   # 项目说明文档
    ├── LICENSE                     # 开源协议
    ├── .gitignore                  # Git忽略文件配置
    ├── .travis.yml                 # CI配置
    ├── Dockerfile                  # Docker配置
    ├── Pipfile                     # Pipenv配置
    └── Pipfile.lock                # Pipenv锁文件
    

    1.8.2 重要目录说明

    1. common/ - 公共模块

    • 包含所有模块共用的基础类和函数
    • module.py:所有收集模块的基类
    • database.py:数据库操作封装
    • request.py:HTTP请求封装
    • resolve.py:DNS解析功能

    2. config/ - 配置文件

    • setting.py:主配置文件,控制模块开关和参数
    • api.py:第三方API密钥配置
    • log.py:日志配置

    3. modules/ - 功能模块

    • 按功能分类的子目录
    • 每个子目录包含特定功能的收集模块
    • 所有模块都继承自common/module.py

    4. data/ - 数据文件

    • 字典文件(子域爆破字典)
    • 指纹库(子域接管检测)
    • DNS服务器列表

    5. results/ - 结果目录

    • 运行后自动生成
    • 包含CSV和SQLite格式的结果

    1.9 常见问题与解决方案

    1.9.1 Python安装问题

    问题1:提示"python不是内部或外部命令"

    原因: Python未添加到系统PATH

    解决方案:

    1. 重新安装Python,确保勾选"Add Python to PATH"
    2. 或手动添加环境变量(参考1.3.3节)

    问题2:安装Python时出现权限错误

    解决方案:

    • Windows:以管理员身份运行安装程序
    • macOS/Linux:使用sudo命令

    1.9.2 虚拟环境问题

    问题1:激活虚拟环境失败

    解决方案:

    # Windows:确保使用正确的路径
    venv\Scripts\activate
    
    # macOS/Linux:确保使用bash或zsh
    source venv/bin/activate
    
    # 如果报错权限问题,给予执行权限
    chmod +x venv/bin/activate
    

    问题2:虚拟环境中pip无法使用

    解决方案:

    # 重新安装pip
    python -m ensurepip --upgrade
    python -m pip install --upgrade pip
    

    1.9.3 依赖安装问题

    问题1:pip安装速度太慢

    解决方案: 使用国内镜像源

    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
    

    问题2:某个依赖安装失败

    解决方案:

    # 1. 升级pip
    python -m pip install --upgrade pip
    
    # 2. 单独安装失败的包,查看详细错误
    pip install 包名 -v
    
    # 3. 尝试使用预编译包
    pip install 包名 --only-binary :all:
    
    # 4. 查看是否需要编译工具
    # Windows:安装Visual Studio Build Tools
    # Linux:sudo apt install build-essential
    

    问题3:出现"Microsoft Visual C++ 14.0 is required"错误

    解决方案:

    1. 下载并安装 "Microsoft Visual C++ Build Tools"
    2. 或使用预编译的wheel文件

    1.9.4 OneForAll运行问题

    问题1:运行oneforall.py时提示"No module named 'xxx'"

    解决方案:

    # 检查虚拟环境是否激活
    # Windows
    venv\Scripts\activate
    
    # macOS/Linux
    source venv/bin/activate
    
    # 重新安装依赖
    pip install -r requirements.txt
    

    问题2:运行时出现编码错误

    解决方案:

    # Windows CMD可能需要设置编码
    chcp 65001
    
    # 或使用PowerShell运行
    

    问题3:数据库创建失败

    解决方案:

    # 检查results目录权限
    # Windows:确保有写入权限
    # macOS/Linux:chmod +w results
    

    1.10 实践任务

    任务1:完成开发环境搭建

    目标: 在你的系统上完成OneForAll开发环境的完整搭建

    步骤:

    1. ✅ 安装Python 3.6或更高版本
    2. ✅ 验证Python和pip安装成功
    3. ✅ 创建虚拟环境
    4. ✅ 激活虚拟环境
    5. ✅ 安装项目依赖
    6. ✅ 验证所有依赖安装成功

    验证标准:

    # 运行以下命令,都应该成功
    python --version
    pip --version
    pip list | findstr requests
    

    任务2:成功运行OneForAll

    目标: 成功运行OneForAll并查看帮助信息

    步骤:

    1. ✅ 激活虚拟环境
    2. ✅ 运行帮助命令:python oneforall.py --help
    3. ✅ 运行版本命令:python oneforall.py version
    4. ✅ 运行示例:python oneforall.py --target example.com run
    5. ✅ 查看生成的结果文件

    验证标准:

    • 能够看到OneForAll的banner
    • 能够正常执行帮助命令
    • results目录中生成结果文件

    任务3:理解项目目录结构

    目标: 理解OneForAll项目的目录结构和各部分作用

    步骤:

    1. ✅ 使用tree命令或文件浏览器查看目录结构
    2. ✅ 阅读每个主要目录下的文件
    3. ✅ 理解common、modules、config、data目录的作用
    4. ✅ 查看配置文件config/setting.py
    5. ✅ 查看主入口文件oneforall.py

    验证标准:

    • 能够说出主要目录的作用
    • 理解配置文件的位置和作用
    • 知道如何修改配置

    任务4:配置开发工具

    目标: 配置好你的开发环境(VS Code或PyCharm)

    步骤:

    1. ✅ 安装VS Code或PyCharm
    2. ✅ 安装必要的插件
    3. ✅ 配置Python解释器指向虚拟环境
    4. ✅ 配置代码格式化工具
    5. ✅ 配置代码检查工具
    6. ✅ 在编辑器中打开oneforall.py文件

    验证标准:

    • 编辑器能够识别Python语法
    • 代码提示和补全正常工作
    • 能够在编辑器中运行Python代码

    任务5:阅读README文档

    目标: 深入理解OneForAll项目

    步骤:

    1. ✅ 阅读README.md文档
    2. ✅ 理解项目的功能特性
    3. ✅ 了解使用方法和参数
    4. ✅ 查看示例输出
    5. ✅ 记录不理解的概念

    验证标准:

    • 能够说出OneForAll的三大特性
    • 理解基本的命令行参数
    • 知道如何查看帮助信息

    1.11 本课总结

    本课重点内容回顾

    1. OneForAll项目简介

    • 一款功能强大的子域名收集工具
    • 集成60+个收集模块
    • 支持爆破、验证、爬取、接管检测等多种功能
    • 高性能:多线程、异步协程、massdns

    2. 子域名收集的重要性

    • 扩大攻击面
    • 发现隐藏资产
    • 了解业务架构
    • 安全评估需求

    3. 开发环境搭建

    • Python 3.6+安装
    • 虚拟环境配置(venv/pipenv)
    • 项目依赖安装
    • 开发工具配置

    4. 项目目录结构

    • common/:公共模块
    • modules/:功能模块
    • config/:配置文件
    • data/:数据文件
    • results/:结果目录

    下节课预告

    第2课:Python基础回顾

    • 面向对象编程
    • 模块和包
    • 装饰器
    • 生成器与迭代器
    • 异常处理

    课后思考

    1. OneForAll为什么要使用虚拟环境?
    2. 为什么需要安装这么多的依赖包?
    3. 项目为什么要采用模块化的设计?
    4. 如何根据自己的需求修改OneForAll的配置?

    推荐阅读


    1.12 附录

    附录A:常用命令速查表

    # Python环境检查
    python --version
    pip --version
    
    # 虚拟环境操作
    python -m venv venv              # 创建虚拟环境
    venv\Scripts\activate            # Windows激活
    source venv/bin/activate         # macOS/Linux激活
    deactivate                       # 退出虚拟环境
    
    # 依赖管理
    pip install -r requirements.txt  # 安装依赖
    pip list                         # 查看已安装包
    pip freeze > requirements.txt     # 导出依赖
    
    # OneForAll命令
    python oneforall.py --help       # 查看帮助
    python oneforall.py version      # 查看版本
    python oneforall.py --target example.com run  # 运行示例
    

    附录B:环境检查清单


    附录C:故障排除流程图

    遇到问题
        ↓
    是否为Python安装问题?
        ├─ 是 → 重新安装Python,添加到PATH
        └─ 否 → 继续
               ↓
           是否为虚拟环境问题?
               ├─ 是 → 检查激活命令,使用绝对路径
               └─ 否 → 继续
                      ↓
                  是否为依赖安装问题?
                      ├─ 是 → 使用镜像源,单独安装失败包
                      └─ 否 → 继续
                             ↓
                         是否为OneForAll运行问题?
                             ├─ 是 → 检查虚拟环境,重新安装依赖
                             └─ 否 → 查看详细错误信息,搜索解决方案
    

    恭喜你完成了第1课的学习!🎉

    现在你已经搭建好了开发环境,对OneForAll项目有了初步的了解。在下一课中,我们将深入复习Python基础知识,为后续的学习打下坚实的基础。

    记住: 学习编程最重要的是动手实践,一定要完成所有的实践任务!

    继续加油,我们下节课见!💪

    posted @ 2026-04-20 16:52  羽弥YUMI  阅读(68)  评论(0)    收藏  举报