CyberClarity/nmap-port-scanner
GitHub: CyberClarity/nmap-port-scanner
基于 python-nmap 的自动化扫描工具,将 Nmap 端口扫描与 NSE 漏洞脚本检测结果整理为易读的漏洞摘要和结构化 JSON。
Stars: 0 | Forks: 0
# 使用 Nmap 进行端口扫描与漏洞检测
## 目标
学习主动侦察,通过识别目标主机上的开放端口、运行的服务以及已知漏洞,并使用 Nmap 的 Python 包装器实现该流程的自动化。
本项目在基础 Nmap 端口扫描的基础上,结合了 Nmap 的 NSE (Nmap Scripting Engine) 漏洞检测脚本,能够生成清晰易读的漏洞摘要,而非原始扫描输出。
## 使用工具
- [Nmap](https://nmap.org/) — 网络扫描器
- [python-nmap](https://pypi.org/project/python-nmap/) — Nmap 的 Python 包装器
- Nmap NSE 脚本:`vuln` 和 `vulners` 类别
## ⚠️ 法律与道德声明
请仅对你拥有或获得明确授权的系统(例如你自己的实验 VM、Metasploitable,或你控制的家庭网络设备)运行此工具。在大多数司法管辖区,未经许可扫描系统是违法的。
## 环境配置
### 1. 安装 Nmap
```
# Debian/Ubuntu/Kali
sudo apt update && sudo apt install nmap -y
# macOS
brew install nmap
```
### 2. 安装 Python 依赖
```
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install python-nmap
```
### 3. 设置目标
使用你拥有的系统或实验 VM,例如运行在隔离的 VirtualBox/VMware 网络中的 [Metasploitable 2](https://sourceforge.net/projects/metasploitable/)。
## 用法
```
python3 nmap-portscanner.py
# 示例
python3 nmap-portscanner.py 192.168.10.1
```
如果在某些扫描类型中遇到权限错误,请使用提升的权限运行:
```
sudo python3 nmap-portscanner.py 192.168.10.1
```
## 工作原理
1. 运行 Nmap 扫描 (`-sV -T4`) 以检测开放端口、服务和版本。
2. 针对检测到的服务运行 Nmap 的 NSE `vuln` 和 `vulners` 脚本类别,以标记已知漏洞。
3. 将扫描结果解析为清晰的 Python 字典。
4. 打印终端摘要,显示每个端口上哪些 NSE 漏洞脚本返回了命中结果。
5. 将完整的结构化结果(包括原始 NSE 脚本输出)保存到 `examples/sample_output.json` 中,以供日后参考。
## 示例输出
```
============================================================
VULNERABILITY SUMMARY
============================================================
[!] 192.168.10.1:21 (ftp 1.9.4)
- vulners
[ ] 192.168.10.1:22 (ssh) - no known issues flagged
[ ] 192.168.10.1:23 (telnet) - no known issues flagged
[!] 192.168.10.1:53 (domain 2.80)
- vulners
[!] 192.168.10.1:80 (tcpwrapped)
- http-server-header
- http-majordomo2-dir-traversal
- http-vuln-cve2017-1001000
- http-trane-info
- http-dombased-xss
- http-csrf
- http-stored-xss
- http-vuln-cve2010-0738
[!] 192.168.10.1:443 (tcpwrapped)
- http-aspnet-debug
- http-csrf
- http-stored-xss
- http-vuln-cve2014-3704
- http-dombased-xss
- ssl-poodle
```
完整的 JSON 输出(包括原始 NSE 脚本详细信息)将保存到 `examples/sample_output.json`。
## 项目结构
```
01-port-scanning-nmap/
├── README.md
├── scripts/
│ └── nmap-portscanner.py
└── examples/
└── sample_output.json
```
## 我学到了什么
- 如何运行并解读 Nmap 服务/版本检测扫描 (`-sV`)
- Nmap 的脚本引擎 (NSE) 如何利用 `vuln` 和 `vulners` 脚本类别将扫描范围扩展到漏洞检测
- 如何使用 `python-nmap` 以编程方式解析和构建原始扫描数据
- 为什么 `tcpwrapped` 并不总意味着服务无法识别,以及脚本探测如何在此类端口上依然揭示有用的发现
- 过滤/摘要工具输出的重要性——原始 NSE 输出非常冗长,需要进行后处理才能在报告中发挥作用
标签:CTI, Nmap, Python, 插件系统, 数据统计, 无后门, 端口扫描, 虚拟驱动器, 逆向工具