demirgitbuh/PacPortscanner

GitHub: demirgitbuh/PacPortscanner

一个基于 Textual 构建的现代 TUI 端口扫描器,通过自动后端回退与异步并发,提供快速、低门槛的端口探测与导出能力。

Stars: 1 | Forks: 0

### ⚡ 一个基于 [Textual](https://textual.textualize.io) 构建的现代极速 **TUI 端口扫描器**。 *自动选择最佳后端 —— **Nmap → Scapy → 原始套接字** —— 无论是否有 root 权限,均可在任何环境运行。*

[安装](#-install) • [快速开始](#-quick-start) • [功能特性](#-features) • [后端引擎](#-backend-auto-fallback) • [按键绑定](#️-keybindings) • [导出功能](#-exports) • [命令行接口](#️-cli) • [架构设计](#️-architecture) ## ✨ 功能特性
#### 🎯  扫描功能 - 单个 **IP**、**主机名** 或 **CIDR** 范围 - 端口预设:`top100`、`top1000`、`all` 或自定义 - **流式** 结果输出 —— 无需批量等待 - 服务识别 + **横幅抓取** - 可选 **Ping 探测** 以跳过不可达主机 - **并发** 最高支持 500 个套接字 #### 🛡️  智能识别 - **OS 指纹识别**(Nmap) + TTL 回退机制 - 通过 [cve.circl.lu](https://cve.circl.lu) 与 NVD 进行 **CVE 查询** - 从横幅中提取版本与 CPE 信息 - 严重等级高亮(CRITICAL → LOW) - **无需 API 密钥** - 内存缓存避免重复请求
#### 🎨  界面设计 - 基于 Textual 的现代化 **TUI** - **橙黑主题** (`#FF6B00`) - 实时更新的结果 **表格** - 行级滑入 **详情抽屉** - 实时日志与状态栏显示 **pps / ETA** - 完整键盘快捷键 + **帮助覆盖层** #### 📦  导出输出 - **JSON** — 结构化数据,包含所有字段 - **CSV** — 便于导入电子表格 - **HTML** — 带样式的自包含报告 - 自动保存至 `./data/` 并附加时间戳 - 4 种预设 **配置文件**(Stealth → Vuln) - 命令行参数预填充,便于脚本启动
## 📸 预览 ``` ┌── ⊙ pacPortScanner ──────────────────────────────────────────────────────┐ │ Target: 192.168.1.0/24 │ HOST PORT STATE SERVICE │ │ Ports : top1000 │ 192.168.1.1 22/tcp open ssh │ │ Profile: vulnerability │ 192.168.1.1 80/tcp open http │ │ [✓] ping sweep │ 192.168.1.5 443/tcp open https │ │ [✓] banner grab │ 192.168.1.5 3306 open mysql ⚠3 │ │ [✓] CVE lookup │ 192.168.1.7 22/tcp open ssh │ │ │ │ │ ▶ Start scan (s) │ │ ├─────────────────────────────────┴───────────────────────────────────────┤ │ backend: nmap · ports/s: 842 · open: 12 · elapsed: 4.2s · ██████░░ 74% │ └─────────────────────────────────────────────────────────────────────────┘ ``` ## 📦 安装指南
🛠️ 从源码构建 ``` git clone https://github.com/demirgitbuh/pacPortScanner.git cd pacPortScanner pip install -e ".[full]" ```
🪟 Windows(PowerShell) ``` git clone https://github.com/demirgitbuh/pacPortScanner.git cd pacPortScanner pip install -e ".[full]" pacportscanner ``` ## 🚀 快速开始 ``` # 启动 TUI pacportscanner # 预填充目标和配置文件 pacports scanme.nmap.org -p top1000 --profile vulnerability # 强制使用特定后端 pacports 10.0.0.0/24 --backend socket --no-cve ```
📝 逐步操作 1. 启动程序:`pacportscanner` 2. 在左侧面板输入目标(IP、主机名或 CIDR) 3. 选择端口预设或输入自定义规格(如 `22,80,443` 或 `1-1024`) 4. 选择配置文件并按 **`s`** 开始扫描 5. 结果实时流式显示在表格中;按 **`Enter`** 查看行详情 6. 按 **`e`** 导出 —— 三个报告将生成在 `./data/` 中
## 🔌 后端自动回退 启动时,pacPortScanner 按优先级探测可用后端: | # | 后端 | 依赖 | SYN | UDP | 操作系统识别 | 需要 Root | |:-:|:-------:|:-----:|:---:|:---:|:---------:|:----:| | 1 | **Nmap** | `python-nmap` + `nmap` 二进制 | ✅ | ✅ | ✅ | 可选 | | 2 | **Scapy** | `scapy` | ✅ | ❌ | ❌ | ✅ 必需 | | 3 | **Socket** | 标准库 | ❌ (connect) | ❌ | ❌ | ❌ 不需要 |
``` flowchart LR A[Start] --> B{Nmap available?} B -- yes --> N[🟠 Nmap backend] B -- no --> C{Scapy + root?} C -- yes --> S[🟠 Scapy backend] C -- no --> K[🟠 Socket backend] N --> R[(Streaming results)] S --> R K --> R ``` 当前活动后端显示在 **状态栏** 中,也可通过 `--backend` 强制指定。 ## 🎛️ 扫描配置文件 | 配置文件 | 端口范围 | 扫描技术 | |:------------------|:-----------:|:-----------------------------------------------| | 🥷 `stealth` | 前 100 端口 | SYN(若可用)· 慢速时序 | | ⚡ `fast` | 前 100 端口 | 连接扫描 · 激进时序 | | 🔬 `full` | 1–65535 | 连接扫描 · 服务识别 + 横幅抓取 | | 🛡️ `vulnerability` | 前 1000 端口 | 完整扫描 + OS 识别 + **CVE 查询** |
## ⌨️ 按键绑定 | 按键 | 操作 | |:---:|:-------| | s | 开始 / 停止当前扫描 | | e | 导出结果(JSON + CSV + HTML) | | p | 切换扫描配置文件 | | d | 切换详情抽屉 | | l | 切换实时日志面板 | | Enter | 在选中行打开详情抽屉 | | Tab | 在控件间切换焦点 | | ? | 显示帮助覆盖层 | | q | 退出程序 | ## 📁 导出文件 按下 e 将在工作目录的 `data/` 文件夹中生成 **三个** 文件: ``` data/ ├── pacportscanner_20260418_142301.json # structured, every field ├── pacportscanner_20260418_142301.csv # spreadsheet-friendly └── pacportscanner_20260418_142301.html # styled standalone report ``` ``` { "tool": "pacPortScanner", "generated_at": "2026-04-18T14:23:01Z", "backend": "nmap", "config": { "targets": ["192.168.1.0/24"], "profile": "vulnerability" }, "summary": { "total": 24, "open": 12, "closed": 8, "filtered": 4, "with_cves": 3 }, "results": [ { "host": "192.168.1.5", "port": 3306, "state": "open", "service": "mysql", "version": "MySQL 5.7.32", "banner": "5.7.32-0ubuntu0.18.04.1", "cves": ["CVE-2021-2144", "CVE-2021-2154", "CVE-2021-2166"] } ] } ``` ## 🖥️ 命令行接口 ``` pacportscanner [target] [options] positional: target Prefill target (IP, hostname, or CIDR) options: -p, --ports SPEC Port spec (top100 / top1000 / all / 1-1024 / 22,80,443) --profile PROFILE stealth | fast | full | vulnerability --backend BACKEND auto | nmap | scapy | socket --no-cve Disable CVE lookup --version Print version -h, --help Show help ``` ## ⚙️ 配置(可选) 可在 `~/.config/pacportscanner/config.toml` 中放置配置文件: ``` [defaults] profile = "fast" timeout = 1.5 concurrency = 500 ping_sweep = true [cve] enabled = true api = "https://cve.circl.lu/api" ``` ## 🏛️ 架构设计 ``` pacportscanner/ ├── 🔍 scanner/ backend ABC + engine + nmap/scapy/socket implementations │ ├── engine.py auto-fallback + streaming AsyncIterator[PortResult] │ ├── nmap_backend.py │ ├── scapy_backend.py │ └── socket_backend.py ├── 🎨 ui/ Textual App, screens, widgets, and TCSS theme │ ├── screens/ │ ├── widgets/ │ └── pacportscanner.tcss ├── 🛡️ cve/ async CVE lookup (cve.circl.lu + NVD fallback) ├── 📦 export/ JSON / CSV / HTML exporters └── main.py CLI entry point ``` ## 📜 许可证 根据 **[MIT 许可证](LICENSE)** 发布 —— 可自由使用、分发、修改与修复。 ## ⚖️ 道德使用 pacPortScanner 仅适用于 **授权安全测试、CTF 竞赛以及自有基础设施学习**。未经授权的扫描在大多数司法管辖区属非法行为。作者不承担任何滥用责任。
### ⭐ 若您发现 pacPortScanner 有用,请为仓库点赞 —— 这将极大帮助项目发展!
使用 🐍 Python · 🎨 Textual · ⚡ asyncio · ☕ Coffee 构建

⬆ 返回顶部
标签:Banner抓取, CIDR扫描, CTI, IP扫描, Nmap, Ping探测, Python, Scapy, Textual, TUI, URL短链接分析, 二进制发布, 原始套接字, 多后端, 并发扫描, 开源工具, 异步IO, 恶意行为检测, 数据统计, 无API密钥, 无后门, 无需root, 服务探测, 流式结果, 现代终端, 端口扫描, 类型提示, 网络安全, 虚拟驱动器, 计算机取证, 逆向工具, 隐私保护, 高并发