cristiensen/portscanner
GitHub: cristiensen/portscanner
基于 Next.js 和 FastAPI 构建的 Web 端口扫描应用,提供可视化操作界面和实时扫描结果推送,让用户在浏览器中即可完成本地网络的端口探测与资产发现。
Stars: 0 | Forks: 0
# PortScanner
一个基于 Web 的网络端口扫描应用,作为网络安全方向的实战作品集项目而构建。扫描主机、检测开放端口并探索你的本地网络——这一切都可以在浏览器中完成。
## 功能介绍
PortScanner 为你提供了一个用于端口扫描的图形界面,此类操作通常是在命令行中使用 `nmap` 完成的。你只需输入目标(一个 IP、子网或范围),选择要扫描的端口,应用就会返回所有主机及其状态。
主要功能:
- 支持扫描单个 IP、逗号分隔的 IP 列表、CIDR 子网(例如 `192.168.1.0/24`)或 IP 范围(例如 `192.168.1.10-192.168.1.50`)
- 支持扫描单个端口、端口列表、端口范围或其组合形式(例如 `22,80,443,8000-8100`)
- 实时查看扫描结果
- 可随时中止正在运行的扫描
- 按主机、端口、服务或状态对搜索结果进行过滤和排序
- 将结果导出为 CSV
所有操作均在本地运行。无需连接云服务,不依赖外部服务,数据不会离开你的设备。
## 技术栈
| 层级 | 技术 |
| ---------- | -------------------------- |
| Frontend | Next.js, React, TypeScript |
| 样式 | 原生 CSS + Tailwind |
| Backend | Python 3.11, FastAPI |
| 扫描引擎 | Python `asyncio` |
| 容器化 | Docker + Docker Compose |
| 扫描代理 | Python stdlib HTTP server |
## 扫描预设
| 预设 | 端口 | 最适用场景 |
| ---------- | ----------------------- | ------------------------------------ |
| Quick | 22, 80, 443, 3389, 8080 | 快速检查最常用的服务 |
| Common | 前 ~20 个常用端口 | 通用网络资产盘点 |
| Discovery | — | 仅检测主机存活状态,不进行端口扫描 |
| Custom | 自定义输入 | 完全自主控制 |
## 端口状态
| 状态 | 含义 |
| ------------- | ------------------------------------------------------------- |
| `open` | TCP 握手成功 — 有服务正在监听 |
| `closed` | 连接被拒绝 — 主机存活但该端口无任何服务 |
| `timeout` | 在超时时间窗口内未收到响应 — 可能被过滤或主机响应缓慢 |
| `unreachable` | 网络层错误 — 主机或路由不存在 |
| `reachable` | 探测模式:主机至少响应了一个探测请求 |
| `host_down` | 探测模式:所有探测请求均超时 — 主机可能处于离线状态 |
## 输入格式
**目标** — 仅接受 IPv4:
```
192.168.1.1 single IP
192.168.1.1, 192.168.1.5 comma-separated IPs
192.168.1.0/24 CIDR subnet (max /22 = 1024 hosts)
192.168.1.10-192.168.1.50 full range
192.168.1.10-50 short-form range
```
不支持主机名。输入框会进行实时校验,如果格式有误会变为红色。
**端口:**
```
80 single port
22,80,443 comma-separated
1-1024 range
22,80,8000-8100 combination
```
## 运行方式
### 前置条件
- [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/)
- [Python 3.11+](https://www.python.org/downloads/)(用于运行扫描代理)
- Git
### 启动
```
git clone https://github.com/cristiensen/portscanner.git
cd portscanner
#Make sure that Docker is running and run the following command
```powershell
.\start.bat
```
在浏览器中打开 **http://localhost:3000**。
## 项目结构
```
portscanner/
├── backend/
│ ├── app/
│ │ ├── main.py FastAPI app, CORS, startup
│ │ ├── scanner.py Async scan engine, job management
│ │ ├── models.py Pydantic data models
│ │ ├── database.py SQLite: presets and history
│ │ └── routes/
│ │ ├── scan.py Scan endpoints + WebSocket
│ │ ├── presets.py Preset CRUD
│ │ └── history.py History endpoints
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/
│ ├── app/
│ │ ├── page.tsx Entire UI
│ │ ├── layout.tsx Root layout
│ │ └── globals.css Terminal aesthetic CSS
│ ├── lib/
│ │ └── api.ts Typed API client
│ ├── next.config.ts API proxy config
│ └── Dockerfile
├── scan-agent/
│ └── agent.py Native Windows scan agent
├── docker-compose.yml
├── start.bat One-click start
└── README.md
```
## 道德与法律声明
本工具仅供**教育目的**使用。
仅扫描你拥有或**获得授权**扫描的系统与网络。未经授权的端口扫描在你所在的司法管辖区可能是违法行为,并且违反了大多数网络和托管服务商的服务条款。
作者不对本软件的任何误用,或因使用本软件而可能导致的任何损害、数据丢失或法律后果承担责任。
标签:AV绕过, CIDR扫描, Docker, FastAPI, IP扫描, Nmap替代, Python, React, Syscalls, Tailwind CSS, TypeScript, URL短链接分析, 全栈项目, 后端开发, 安全插件, 安全防御评估, 局域网扫描, 开源安全工具, 异步IO, 恶意行为检测, 插件系统, 攻击路径可视化, 数据统计, 无后门, 服务探测, 本地网络扫描, 漏洞赏金平台, 端口扫描, 网络安全, 网络安全项目作品集, 网络扫描器, 网络盘点, 计算机取证, 请求拦截, 逆向工具, 逆向工程平台, 隐私保护, 黑客工具