projects771/portscanner-backend
GitHub: projects771/portscanner-backend
一款基于 Node.js 和 WebSocket 的实时 TCP 端口扫描器后端,提供流式结果推送、服务检测和数据导出功能。
Stars: 0 | Forks: 0
# PortScan — 实时 IP 端口扫描器
一款具备实时流式 UI 的全栈端口扫描工具。前端基于 React + Vite + Tailwind CSS 构建,后端使用 Node.js + Express + Socket.io。
## 功能特性
- **实时流传输** — 端口结果在发现时通过 WebSocket 实时流式传输
- **5 种扫描预设** — Top 20、Top 100、Web、Database、Remote
- **自定义端口范围** — 支持扫描最多 10,000 个端口的任意范围
- **服务检测** — 识别 40 多种已知服务(HTTP、SSH、MySQL、Redis 等)
- **响应时间** — 测量每个端口的延迟
- **导出 CSV** — 下载开放端口的结果
- **实时输出** — 以滚动终端样式输出所有已扫描的端口
- **取消扫描** — 可在扫描过程中随时中止
- **速率限制** — 每个客户端每分钟限制 30 次请求
- **输入验证** — 防范错误的端口范围和无法解析的主机
## 项目结构
```
port-scanner/
├── server/
│ ├── index.js # Express + Socket.io server
│ ├── scanner.js # TCP connect scanner logic
│ └── package.json
├── client/
│ ├── src/
│ │ ├── App.jsx
│ │ ├── hooks/
│ │ │ └── useScanner.js # WebSocket state management
│ │ └── components/
│ │ ├── ScanForm.jsx # Inputs + preset selector
│ │ ├── ProgressBar.jsx # Animated progress
│ │ ├── OpenPortsPanel.jsx # Open ports list + export
│ │ └── LiveFeed.jsx # Scrolling live terminal
│ └── package.json
└── README.md
```
## 本地设置
### 1. 启动后端服务器
```
cd server
npm install
npm run dev # runs on http://localhost:4000
```
### 2. 启动 React 前端
```
cd client
npm install
npm run dev # runs on http://localhost:5173
```
在浏览器中打开 **http://localhost:5173**
## 部署
### 后端 — Railway(推荐)
1. 将 `server/` 文件夹推送到 GitHub 仓库
2. 访问 [railway.app](https://railway.app) → New Project → Deploy from GitHub
3. 设置环境变量:`CLIENT_URL=https://your-vercel-app.vercel.app`
4. Railway 将自动检测 Node.js 并进行部署
### 前端 — Vercel
1. 将 `client/` 文件夹推送到 GitHub
2. 访问 [vercel.com](https://vercel.com) → Import Project
3. 设置环境变量:`VITE_SERVER_URL=https://your-railway-app.up.railway.app`
4. 部署
## 工作原理
扫描器使用 **TCP connect 扫描** —— 这是最可靠的方法,不需要 root/admin 权限:
1. 对于每个端口,Node.js 通过 `net.createConnection` 尝试建立 TCP 连接
2. 如果连接成功 → 端口为 **开放 (open)**
3. 如果服务器立即拒绝 → 端口为 **关闭 (closed)**
4. 如果连接超时 → 端口为 **被过滤 (filtered)**(防火墙丢弃了数据包)
端口扫描的并发数为 150,这意味着任何时候都有 150 个同时进行的连接尝试。这使得在本地网络上扫描 1,000 个端口只需约 2–5 秒。
## 法律与道德声明
请仅扫描您**拥有**或获得**明确书面授权**的 IP 地址和主机。未经授权的端口扫描可能违反法律,包括《计算机欺诈和滥用法》(CFAA)以及其他国家的同等立法。
## 技术栈
| 层级 | 技术 |
|---|---|
| 前端 | React 18, Vite, Tailwind CSS 3 |
| 后端 | Node.js, Express 4 |
| 实时通信 | Socket.io 4 |
| 扫描器 | Node.js `net` 模块 (TCP) |
| 部署 | Vercel (前端) + Railway (后端) |
标签:DNS枚举, GNU通用公共许可证, MITM代理, Node.js, React, Syscall, Syscalls, Websocket, Web开发, 全栈项目, 插件系统, 数据统计, 端口扫描, 网络安全工具, 自定义脚本