Nmap+Fofa 一体化信息搜集工具打造
从零打造Nmap+Fofa一体化信息搜集工具:支持C段扫描、存活提取、域名解析
引言
在渗透测试、网络运维或信息搜集场景中,Nmap是端口扫描与主机探测的核心工具,而Fofa作为网络空间搜索引擎,能快速获取目标的公开网络资产信息。但实际使用中,我们常面临这些痛点:手动执行Nmap命令后需单独过滤存活主机、Fofa查询结果字段错位、域名查询无法直接获取对应IP、配置繁琐且容易出错。
基于此,本文将分享一款由本人在日常网络安全渗透中自研的Nmap+Fofa一体化信息搜集工具的开发与使用过程。该工具整合了Nmap的C段扫描能力与Fofa API的资产查询能力,支持自动提取存活主机、域名自动解析IP、结果规范输出等核心功能,彻底解决手动操作的低效问题,适用于渗透测试前期信息搜集、网络资产盘点等场景。
一、工具核心功能
这款工具的核心目标是「简化操作、整合能力、规范输出」,主要功能如下:
-
Nmap扫描模块
-
支持17种常用扫描类型(存活探测、快速扫描、全端口扫描、系统探测等)
-
固定生成
Discovery.gnmap扫描文件,自动执行grep+cut命令提取存活主机(生成liveHosts.txt) -
支持C段/单个IP扫描,结果自动保存至
scan_results目录 -
跨平台兼容:Linux/Mac默认调用系统命令,Windows自动使用Python兜底逻辑
-
-
Fofa API查询模块
-
支持纯IP、域名、Fofa原生语法(如
title="后台" && port=8080)查询 -
域名自动解析为IP,解决Fofa返回域名无对应IP的问题
-
字段自动对齐:修复IP/端口/协议错位问题,自动映射常见端口协议(80→tcp、123→udp)
-
结果以表格形式展示,同时保存为文本文件,方便后续分析
-
-
通用增强功能
-
详细的命令行帮助提示,新手友好
-
自动创建输出目录,无需手动维护
-
完善的异常处理(配置错误、文件缺失、网络异常等)
-
结果去重、过长内容截断,保证输出整洁
-
二、环境准备
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准备
-
注册并登录 Fofa平台
-
进入「个人中心」→「API信息」,获取
email和api_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 扫描后,工具会自动触发以下流程:
-
Nmap扫描生成
scan_results/Discovery.gnmap(固定文件名,与手动执行命令一致) -
优先执行用户指定命令:
grep "Status: Up" ./scan_results/Discovery.gnmap | cut -f 2 -d ' ' > ./scan_results/liveHosts.txt -
若命令执行失败(如Windows无grep/cut),自动使用Python内置逻辑兜底,确保
liveHosts.txt必生成 -
结果去重、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语法:
-
纯IP查询:直接输入IP(如
111.26.xx.xx),自动补全为ip=111.26.xx.xx -
纯域名查询:直接输入域名(如
xxx.com),自动补全为domain=xxx.com并解析对应IP -
原生语法查询:支持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
执行流程:
-
生成
scan_results/Discovery.gnmap扫描文件 -
自动执行grep+cut命令(或Python兜底)
-
生成
scan_results/liveHosts.txt存活IP列表 -
终端输出存活主机数量和文件路径
示例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),或更换网络环境
七、工具扩展方向
当前工具已覆盖核心使用场景,后续可根据需求扩展:
-
新增Nmap脚本扫描功能(如漏洞探测脚本、弱口令检测)
-
结果可视化(生成HTML报告,包含扫描拓扑、资产分布)
-
批量扫描功能(读取IP列表文件,批量执行扫描/查询)
-
存活主机后续联动(自动对liveHosts.txt中的IP执行端口扫描)
-
多线程/异步优化(提升大C段扫描和批量查询效率)
八、总结
这款Nmap+Fofa一体化工具整合了两大核心信息搜集工具的能力,解决了手动操作繁琐、结果格式混乱、配置复杂等痛点。通过本文的安装配置和使用示例,无论是渗透测试工程师、网络运维人员,还是安全爱好者,都能快速上手使用,高效完成网络资产信息搜集工作。
工具的所有代码已优化至稳定版本,支持跨平台使用,后续会持续更新维护。如果在使用过程中遇到问题或有功能建议,欢迎在评论区留言交流~
【工具代码仓库地址】