Nmap+Fofa 一体化信息搜集工具打造

Nmap+Fofa 一体化信息搜集工具打造

从零打造Nmap+Fofa一体化信息搜集工具:支持C段扫描、存活提取、域名解析

引言

在渗透测试、网络运维或信息搜集场景中,Nmap是端口扫描与主机探测的核心工具,而Fofa作为网络空间搜索引擎,能快速获取目标的公开网络资产信息。但实际使用中,我们常面临这些痛点:手动执行Nmap命令后需单独过滤存活主机、Fofa查询结果字段错位、域名查询无法直接获取对应IP、配置繁琐且容易出错。

基于此,本文将分享一款由本人在日常网络安全渗透中自研的Nmap+Fofa一体化信息搜集工具的开发与使用过程。该工具整合了Nmap的C段扫描能力与Fofa API的资产查询能力,支持自动提取存活主机、域名自动解析IP、结果规范输出等核心功能,彻底解决手动操作的低效问题,适用于渗透测试前期信息搜集、网络资产盘点等场景。

一、工具核心功能

这款工具的核心目标是「简化操作、整合能力、规范输出」,主要功能如下:

  1. Nmap扫描模块

    • 支持17种常用扫描类型(存活探测、快速扫描、全端口扫描、系统探测等)

    • 固定生成 Discovery.gnmap 扫描文件,自动执行 grep+cut 命令提取存活主机(生成 liveHosts.txt

    • 支持C段/单个IP扫描,结果自动保存至 scan_results 目录

    • 跨平台兼容:Linux/Mac默认调用系统命令,Windows自动使用Python兜底逻辑

  2. Fofa API查询模块

    • 支持纯IP、域名、Fofa原生语法(如 title="后台" && port=8080)查询

    • 域名自动解析为IP,解决Fofa返回域名无对应IP的问题

    • 字段自动对齐:修复IP/端口/协议错位问题,自动映射常见端口协议(80→tcp、123→udp)

    • 结果以表格形式展示,同时保存为文本文件,方便后续分析

  3. 通用增强功能

    • 详细的命令行帮助提示,新手友好

    • 自动创建输出目录,无需手动维护

    • 完善的异常处理(配置错误、文件缺失、网络异常等)

    • 结果去重、过长内容截断,保证输出整洁

二、环境准备

2.1 依赖软件

  • Python 3.8+(推荐3.10版本)

  • Nmap 7.90+(需配置环境变量,确保终端可直接执行 nmap 命令)

  • 网络环境:能访问互联网(Fofa API查询需联网)

2.2 依赖Python库

工具依赖的Python库已整理至 requirements.txt,内容如下:

Plain 复制代码
python-nmap==0.7.1
requests==2.31.0
configparser==5.3.0
prettytable==3.9.0
argparse==1.4.0

2.3 Fofa API准备

  1. 注册并登录 Fofa平台

  2. 进入「个人中心」→「API信息」,获取 emailapi_key(需实名认证才能使用API)

三、工具安装与配置

3.1 代码下载

(可将工具代码上传至GitHub/Gitee,此处提供下载链接)

Bash 复制代码
# 克隆代码仓库(示例)
git clone https://github.com/lxw1973/nmap-fofa-info-gather
cd nmap-fofa-tool

3.2 依赖安装

在工具根目录执行以下命令,安装所需Python库:

Bash 复制代码
# 创建虚拟环境(可选,推荐)
python -m venv .venv
# 激活虚拟环境(Windows:.venv\Scripts\activate;Mac/Linux:source .venv/bin/activate)
source .venv/bin/activate
# 安装依赖
pip install -r requirements.txt

3.3 配置Fofa API

工具首次运行会自动生成 config.ini 配置文件,需手动配置Fofa信息,或通过命令行快速配置:

Bash 复制代码
# 配置Fofa email
python main.py --config fofa.email 你的Fofa注册邮箱
# 配置Fofa api_key
python main.py --config fofa.api_key 你的Fofa API密钥

配置完成后,config.ini 文件内容如下:

3.4 验证环境

执行以下命令,验证Nmap和Fofa配置是否正常:

Bash 复制代码
# 查看支持的Nmap扫描类型
python main.py --list-scans
# 验证Fofa配置(无报错即正常)
python main.py --target 127.0.0.1 --fofa

四、核心功能详解

4.1 Nmap扫描功能:从扫描到存活提取全自动化

4.1.1 支持的扫描类型

工具内置17种常用扫描类型,覆盖从快速探测到深度扫描的全场景,执行 python main.py --list-scans 可查看详细说明:

扫描类型 适用场景 核心特点
live_hosts 存活主机探测 仅探测存活状态,生成Discovery.gnmap文件
quick_scan 初步信息搜集 扫描1-1000端口,平衡速度与信息密度
full_port 全面端口探测 扫描0-65535全端口,信息完整
web_ports Web服务探测 仅扫描80/443/8080等Web相关端口
os_detect 操作系统识别 探测目标操作系统类型
complete_scan 深度渗透测试 全端口+系统+服务+默认脚本,最全面
4.1.2 存活主机自动提取逻辑

执行 live_hosts 扫描后,工具会自动触发以下流程:

  1. Nmap扫描生成 scan_results/Discovery.gnmap(固定文件名,与手动执行命令一致)

  2. 优先执行用户指定命令:grep "Status: Up" ./scan_results/Discovery.gnmap | cut -f 2 -d ' ' > ./scan_results/liveHosts.txt

  3. 若命令执行失败(如Windows无grep/cut),自动使用Python内置逻辑兜底,确保 liveHosts.txt 必生成

  4. 结果去重、IP格式验证,最终生成纯IP列表(每行1个存活主机)

shell 复制代码
(.venv) (base) liuxiaowei@xiaoweiM3 nmap_fofo_tool % python main.py --target 192.168.1.0/24 --scan-type live_hosts

    ==================================================
    ||              Nmap-Fofa 信息搜集工具          ||
    ||         集成Nmap扫描与Fofa API查询功能       ||
    ||         2025-12-25    By:Bruce_liu           || 
    ==================================================
    
开始扫描 192.168.1.0/24,类型:live_hosts
执行命令:nmap -sn -v -T4 -oG scan_results/Discovery.gnmap 192.168.1.0/24
扫描完成,固定文件已保存至:scan_results/Discovery.gnmap

✅ Nmap扫描完成!目标:192.168.1.0/24,扫描类型:live_hosts
+---------------+------+----------+----------+----------+
|     IP地址    | 状态 | 开放端口 | 操作系统 | 服务信息 |
+---------------+------+----------+----------+----------+
|  192.168.1.0  | down |    无    |   未知   |    无    |
|  192.168.1.1  |  up  |    无    |   未知   |    无    |
|  192.168.1.10 |  up  |    无    |   未知   |    无    |
| 192.168.1.100 | down |    无    |   未知   |    无    |
.........
| 192.168.1.121 | down |    无    |   未知   |    无    |
| 192.168.1.122 |  up  |    无    |   未知   |    无    |
| 192.168.1.123 | down |    无    |   未知   |    无    |
| 192.168.1.124 | down |    无    |   未知   |    无    |
| 192.168.1.125 | down |    无    |   未知   |    无    |
| 192.168.1.126 | down |    无    |   未知   |    无    |
| 192.168.1.127 | down |    无    |   未知   |    无    |
| 192.168.1.128 | down |    无    |   未知   |    无    |
| 192.168.1.129 | down |    无    |   未知   |    无    |
.......
.......
|  192.168.1.95 | down |    无    |   未知   |    无    |
|  192.168.1.96 | down |    无    |   未知   |    无    |
|  192.168.1.97 | down |    无    |   未知   |    无    |
|  192.168.1.98 | down |    无    |   未知   |    无    |
|  192.168.1.99 | down |    无    |   未知   |    无    |
+---------------+------+----------+----------+----------+
✅ 命令执行成功!已生成文件:./scan_results/liveHosts.txt
(.venv) (base) liuxiaowei@xiaoweiM3 nmap_fofo_tool % 

4.2 Fofa API查询功能:字段对齐+域名自动解析

4.2.1 支持的查询类型

工具支持3种Fofa查询方式,无需手动拼接Fofa语法:

  1. 纯IP查询:直接输入IP(如 111.26.xx.xx),自动补全为 ip=111.26.xx.xx

  2. 纯域名查询:直接输入域名(如 xxx.com),自动补全为 domain=xxx.com 并解析对应IP

  3. 原生语法查询:支持Fofa复杂语法(如 title="后台管理" && port=8080 && country="CN"

4.2.2 核心优化点
  • 字段对齐:修复原Fofa结果中IP带端口、协议显示端口号的问题,严格映射为「IP+端口+协议」

  • 域名解析:输入域名查询时,自动调用 socket 模块解析对应IPv4地址,IP列显示实际IP而非域名

  • 协议自动映射:根据常见端口自动补充协议(80→tcp、123→udp),解决Fofa协议字段缺失问题

  • 结果保存:自动生成带时间戳的结果文件,包含查询语句、总记录数、格式化表格

五、实战使用示例

示例1:Nmap探测C段存活主机

场景:探测内网<192.168.1.0/24>网段的存活主机,自动生成liveHosts.txt

Bash 复制代码
# 执行命令
python main.py --target 192.168.1.0/24 --scan-type live_hosts

执行流程:

  1. 生成 scan_results/Discovery.gnmap 扫描文件

  2. 自动执行grep+cut命令(或Python兜底)

  3. 生成 scan_results/liveHosts.txt 存活IP列表

  4. 终端输出存活主机数量和文件路径

示例2:Fofa查询域名对应的IP和资产信息

场景:查询 jlbcwhg.com 对应的IP、开放端口、服务器信息

Bash 复制代码
# 执行命令
python main.py --target xxx.com --fofa

预期结果:

  • IP列显示解析后的实际IP(如<111.26.xxx.xxx>)

  • 端口列显示开放端口(如80)

  • 协议列自动映射为tcp

  • 结果保存至 scan_results/fofa_result_xxx.txt

示例3:Nmap快速扫描单个IP的常用端口

场景:扫描<111.26.xx.xx>的常用服务端口(21/22/80/443等)

Bash 复制代码
# 执行命令
python main.py --target 111.26.xx.xx --scan-type service_ports

预期结果:

  • 终端以表格形式展示开放端口、服务名称、版本信息

  • 结果文件保存至 scan_results/service_ports_xxx.txt

示例4:Fofa复杂语法查询

场景:查询标题包含「后台」且开放8080端口的国内资产

Bash 复制代码
# 执行命令(注意语法引号转义)
python main.py --target 'title="后台" && port=8080 && country="CN"' --fofa

预期结果:

  • 终端展示符合条件的资产列表(IP、端口、域名、标题等)

  • 自动过滤无效数据,空值显示为「-」

六、常见问题与解决方案

Q1:执行Fofa查询时提示「args未定义」

  • 原因:命令行参数解析逻辑顺序错误,未先解析参数就使用args变量

  • 解决方案:确保main.py中先执行 args = parser.parse_args(),再使用 args.fofa 等变量(参考工具最终版代码)

Q2:Nmap扫描后未生成liveHosts.txt

  • 原因1:Discovery.gnmap中无「Status: Up」的存活主机(换<127.0.0.1>测试)

  • 原因2:路径问题(工具需在根目录执行,确保 ./scan_results 存在)

  • 解决方案:执行 python main.py --target 127.0.0.1 --scan-type live_hosts 测试,查看终端日志排查

Q3:Fofa查询结果字段错位(IP带端口、协议显示数字)

  • 原因:Fofa API返回字段索引映射错误,未处理「IP:端口」格式

  • 解决方案:确保工具使用最新版<main.py>,已实现「IP:端口」分割和协议自动映射

Q4:域名查询时IP解析失败

  • 原因:网络环境无法解析域名(如内网无DNS)或域名不存在

  • 解决方案:手动验证域名解析(ping xxx.com),或更换网络环境

七、工具扩展方向

当前工具已覆盖核心使用场景,后续可根据需求扩展:

  1. 新增Nmap脚本扫描功能(如漏洞探测脚本、弱口令检测)

  2. 结果可视化(生成HTML报告,包含扫描拓扑、资产分布)

  3. 批量扫描功能(读取IP列表文件,批量执行扫描/查询)

  4. 存活主机后续联动(自动对liveHosts.txt中的IP执行端口扫描)

  5. 多线程/异步优化(提升大C段扫描和批量查询效率)

八、总结

这款Nmap+Fofa一体化工具整合了两大核心信息搜集工具的能力,解决了手动操作繁琐、结果格式混乱、配置复杂等痛点。通过本文的安装配置和使用示例,无论是渗透测试工程师、网络运维人员,还是安全爱好者,都能快速上手使用,高效完成网络资产信息搜集工作。

工具的所有代码已优化至稳定版本,支持跨平台使用,后续会持续更新维护。如果在使用过程中遇到问题或有功能建议,欢迎在评论区留言交流~

【工具代码仓库地址】

https://github.com/lxw1973/nmap-fofa-info-gather

相关推荐
智航GIS2 小时前
5.1 if语句基础
开发语言·python
Xの哲學2 小时前
Linux SLAB分配器深度解剖
linux·服务器·网络·算法·边缘计算
bu_shuo2 小时前
MATLAB中的转置操作及其必要性
开发语言·算法·matlab
KoalaShane2 小时前
El-slider 增加鼠标滚动滑块事件
开发语言·前端·javascript
iconball2 小时前
个人用云计算学习笔记 --24 虚拟化、KVM 基础使用与热迁移实验、VMware ESXi笔记
运维·笔记·学习·云计算
智算菩萨2 小时前
【Python进阶】搭建AI工程:Python模块、包与版本控制
开发语言·人工智能·python
C_心欲无痕3 小时前
vue3 - watchSyncEffect同步执行的响应式副作用
开发语言·前端·javascript·vue.js·vue3
墨雪不会编程3 小时前
C++【string篇1遍历方式】:从零开始到熟悉使用string类
java·开发语言·c++
特立独行的猫a3 小时前
QT开发鸿蒙PC应用:环境搭建及第一个HelloWorld
开发语言·qt·harmonyos·环境搭建·鸿蒙pc