GEETANSH-9/PORT-SCANNER
GitHub: GEETANSH-9/PORT-SCANNER
这是一个集成NVD CVE查询和Streamlit仪表盘的网络漏洞扫描工具,用于自动化识别端口服务并评估安全风险。
Stars: 0 | Forks: 0
# 🔐 网络漏洞扫描器
一个实时网络端口扫描工具,具备**实时CVE查询**、**基于CVSS的风险评分**、**扫描历史记录**和交互式**Streamlit仪表盘**——完全使用Python构建。





## 功能简介
## 仪表盘预览
### 截图
| 扫描结果 | 扫描历史 |
|---|---|
- 显示开放端口表格,包含服务、版本、CVE ID、CVSS评分和风险等级
- 风险分布饼图(严重 / 高危 / 中危 / 低危)
- 差异视图,比较当前扫描与上次扫描(新增端口、关闭的端口、风险变化)
- 完整的扫描历史记录,支持单次扫描详情查看
- 任意两次历史扫描的并排对比
- 可下载的JSON报告
## 核心功能
### 安全感知扫描
- **输入验证**与shell注入防护——在任何扫描运行前,拒绝包含`;`、`&`、`|`、`` ` ``、`$`和其他危险字符的目标
- 支持IPv4、IPv6、CIDR范围和主机名(RFC 1123)
### CVE与CVSS风险评分
- 查询**NVD REST API v2.0**以获取每个服务的最高风险CVE
- 提取CVSS v3.1评分(若不可用则回退到v3.0,然后是v2)
- 内存中的CVE缓存可防止跨端口重复API调用
- 遇到速率限制错误时进行指数退避重试(6秒 → 12秒 → 24秒)
- 当NVD无结果时,针对常见高风险端口使用备用端口提示表:
| 端口 | 默认风险等级 | 原因 |
|------|-------------|--------|
| 23 | 严重 | Telnet — 明文远程访问 |
| 445 | 严重 | SMB — EternalBlue/勒索软件目标 |
| 3389 | 高危 | RDP — 暴露的远程桌面 |
| 21 | 高危 | FTP — 未加密的文件传输 |
| 22 | 中危 | SSH — 暴力破解风险 |
| 443 | 低危 | HTTPS — 加密的Web流量 |
### 扫描历史与差异比较
- 每次扫描都保存到SQLite数据库(`scans` + `scan_results`表)
- `diff_scans()`函数计算任意两次扫描之间的差异:
- 新开放的端口
- 当前已关闭的端口
- 风险等级发生变化的端口
- 每次扫描后,仪表盘自动高亮显示差异
### 三种扫描模式
| 模式 | 速度 | CVE查询 | 适用场景 |
|------|-------|------------|----------|
| 顺序扫描 | 慢 | ✅ 是 | 单个目标,深度扫描 |
| 线程扫描 | 快 | ✅ 是 | 多个目标,并行处理 |
| 超快扫描 | 非常快 | ❌ 否 | 快速侦察,无需CVE信息 |
## 安装
```
git clone https://github.com/GEETANSH-9/PORT-SCANNER.git
cd PORT-SCANNER
pip install -r requirements.txt
```
**您的系统还需要安装Nmap:**
- macOS: `brew install nmap`
- Ubuntu/Debian: `sudo apt install nmap`
- Windows: 从[nmap.org](https://nmap.org/download.html)下载
## NVD API密钥(推荐)
没有API密钥时,NVD会将请求限制为约每30秒5个。要进行完整扫描,请获取免费密钥:
1. 访问 [https://nvd.nist.gov/developers/request-an-api-key](https://nvd.nist.gov/developers/request-an-api-key)
2. 使用您的邮箱注册——密钥会立即发送
3. 打开 `portscanner.py` 并设置:
```
NVD_API_KEY = "your-key-here"
```
## 使用方法
### 选项1 — Streamlit仪表盘(推荐)
```
streamlit run app.py
```
在浏览器中打开 `http://localhost:8501`。输入目标地址,选择扫描模式,点击 **开始扫描**。
### 选项2 — 命令行
```
python portscanner.py
```
系统会提示您选择三种扫描模式之一。结果会打印到终端并保存到 `scan_history.db`。
### 选项3 — 作为模块导入
```
from portscanner import scan_target, threaded_scan, get_scan_history
# 单一目标
results = scan_target("scanme.nmap.org")
# 并行多个目标
results = threaded_scan(["192.168.1.1", "192.168.1.2"])
# 检索历史
history = get_scan_history(limit=10)
```
## 项目结构
```
PORT-SCANNER/
├── portscanner.py # Core engine — scanning, CVE lookup, risk scoring, SQLite history
├── app.py # Streamlit dashboard — UI, charts, history, diff view
├── requirements.txt # Dependencies
└── README.md
```
## 依赖要求
```
python-nmap
requests
streamlit
pandas
matplotlib
```
使用以下命令安装所有依赖:`pip install -r requirements.txt`
## 道德与法律声明
本工具仅用于**授权的安全测试**。只扫描您拥有或获得明确书面许可的系统。未经授权的端口扫描在您所在的司法管辖区可能属非法行为。
使用 `scanme.nmap.org` 进行安全测试——这是Nmap项目专门为此目的提供的公开可用主机。
## 作者
**Geetansh Pasrija**
信息技术学士 — Manipal University Jaipur
[](https://linkedin.com/in/geetansh-pasrija-bb1731259)
[](https://github.com/GEETANSH-9)
[](https://leetcode.com/u/geetansh_18/)
| 扫描结果 | 扫描历史 |
|---|---|
- 显示开放端口表格,包含服务、版本、CVE ID、CVSS评分和风险等级
- 风险分布饼图(严重 / 高危 / 中危 / 低危)
- 差异视图,比较当前扫描与上次扫描(新增端口、关闭的端口、风险变化)
- 完整的扫描历史记录,支持单次扫描详情查看
- 任意两次历史扫描的并排对比
- 可下载的JSON报告
## 核心功能
### 安全感知扫描
- **输入验证**与shell注入防护——在任何扫描运行前,拒绝包含`;`、`&`、`|`、`` ` ``、`$`和其他危险字符的目标
- 支持IPv4、IPv6、CIDR范围和主机名(RFC 1123)
### CVE与CVSS风险评分
- 查询**NVD REST API v2.0**以获取每个服务的最高风险CVE
- 提取CVSS v3.1评分(若不可用则回退到v3.0,然后是v2)
- 内存中的CVE缓存可防止跨端口重复API调用
- 遇到速率限制错误时进行指数退避重试(6秒 → 12秒 → 24秒)
- 当NVD无结果时,针对常见高风险端口使用备用端口提示表:
| 端口 | 默认风险等级 | 原因 |
|------|-------------|--------|
| 23 | 严重 | Telnet — 明文远程访问 |
| 445 | 严重 | SMB — EternalBlue/勒索软件目标 |
| 3389 | 高危 | RDP — 暴露的远程桌面 |
| 21 | 高危 | FTP — 未加密的文件传输 |
| 22 | 中危 | SSH — 暴力破解风险 |
| 443 | 低危 | HTTPS — 加密的Web流量 |
### 扫描历史与差异比较
- 每次扫描都保存到SQLite数据库(`scans` + `scan_results`表)
- `diff_scans()`函数计算任意两次扫描之间的差异:
- 新开放的端口
- 当前已关闭的端口
- 风险等级发生变化的端口
- 每次扫描后,仪表盘自动高亮显示差异
### 三种扫描模式
| 模式 | 速度 | CVE查询 | 适用场景 |
|------|-------|------------|----------|
| 顺序扫描 | 慢 | ✅ 是 | 单个目标,深度扫描 |
| 线程扫描 | 快 | ✅ 是 | 多个目标,并行处理 |
| 超快扫描 | 非常快 | ❌ 否 | 快速侦察,无需CVE信息 |
## 安装
```
git clone https://github.com/GEETANSH-9/PORT-SCANNER.git
cd PORT-SCANNER
pip install -r requirements.txt
```
**您的系统还需要安装Nmap:**
- macOS: `brew install nmap`
- Ubuntu/Debian: `sudo apt install nmap`
- Windows: 从[nmap.org](https://nmap.org/download.html)下载
## NVD API密钥(推荐)
没有API密钥时,NVD会将请求限制为约每30秒5个。要进行完整扫描,请获取免费密钥:
1. 访问 [https://nvd.nist.gov/developers/request-an-api-key](https://nvd.nist.gov/developers/request-an-api-key)
2. 使用您的邮箱注册——密钥会立即发送
3. 打开 `portscanner.py` 并设置:
```
NVD_API_KEY = "your-key-here"
```
## 使用方法
### 选项1 — Streamlit仪表盘(推荐)
```
streamlit run app.py
```
在浏览器中打开 `http://localhost:8501`。输入目标地址,选择扫描模式,点击 **开始扫描**。
### 选项2 — 命令行
```
python portscanner.py
```
系统会提示您选择三种扫描模式之一。结果会打印到终端并保存到 `scan_history.db`。
### 选项3 — 作为模块导入
```
from portscanner import scan_target, threaded_scan, get_scan_history
# 单一目标
results = scan_target("scanme.nmap.org")
# 并行多个目标
results = threaded_scan(["192.168.1.1", "192.168.1.2"])
# 检索历史
history = get_scan_history(limit=10)
```
## 项目结构
```
PORT-SCANNER/
├── portscanner.py # Core engine — scanning, CVE lookup, risk scoring, SQLite history
├── app.py # Streamlit dashboard — UI, charts, history, diff view
├── requirements.txt # Dependencies
└── README.md
```
## 依赖要求
```
python-nmap
requests
streamlit
pandas
matplotlib
```
使用以下命令安装所有依赖:`pip install -r requirements.txt`
## 道德与法律声明
本工具仅用于**授权的安全测试**。只扫描您拥有或获得明确书面许可的系统。未经授权的端口扫描在您所在的司法管辖区可能属非法行为。
使用 `scanme.nmap.org` 进行安全测试——这是Nmap项目专门为此目的提供的公开可用主机。
## 作者
**Geetansh Pasrija**
信息技术学士 — Manipal University Jaipur
[](https://linkedin.com/in/geetansh-pasrija-bb1731259)
[](https://github.com/GEETANSH-9)
[](https://leetcode.com/u/geetansh_18/)标签:CTI, CVE查找, CVSS评分, GPT, JSON报告, Kubernetes, SQLite数据库, Streamlit仪表板, 交互式仪表板, 内核监控, 反取证, 安全扫描, 安全评估, 实时扫描, 差异跟踪, 扫描历史, 数据统计, 时序注入, 漏洞管理, 端口扫描, 系统分析, 网络分析, 网络安全, 逆向工具, 隐私保护, 风险分布, 风险评分