NickCirv/port-scanner
GitHub: NickCirv/port-scanner
基于 Node.js 原生模块的零依赖 TCP 端口扫描器,支持服务识别、Banner 抓取和 CIDR 主机发现。
Stars: 0 | Forks: 0
# port-scanner
具备服务检测和 Banner 抓取功能的快速 TCP 端口扫描器。**零外部依赖** — 完全基于 Node.js 内置模块(`net`、`dns`、`os`、`crypto`)构建。
```
PORT STATE SERVICE BANNER
──────────────────────────────────────────────────────────────────────
22/tcp open SSH
80/tcp open HTTP
443/tcp open HTTPS
3000/tcp open Node.js/Grafana
──────────────────────────────────────────────────────────────────────
4 open 12 filtered 84 closed — 1.24s
```
## 环境要求
- Node.js >= 18
- 无需 `npm install` — 零依赖
## 安装
```
npm install -g port-scanner
```
或者直接运行(无需安装):
```
npx port-scanner
```
或者克隆并运行:
```
git clone https://github.com/NickCirv/port-scanner.git
cd port-scanner
node index.js
```
## 使用方法
```
port-scanner [options]
pscan [options] # short alias
```
### 选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `--ports ` | 端口范围(`1-1024`)或列表(`22,80,443`) | 前 100 个 |
| `--top ` | 扫描前 N 个常用端口(内置 1000 个列表) | `100` |
| `--timeout ` | 单个端口连接超时时间(毫秒) | `1000` |
| `--concurrency ` | 并行 TCP 连接数 | `100` |
| `--host-discovery ` | 对 CIDR 范围进行 TCP ping 扫描 | — |
| `--banner` | 抓取服务 Banner 的前 256 字节 | 关闭 |
| `--open` | 仅显示开放端口(隐藏被过滤的) | 关闭 |
| `--json` | 以 JSON 格式输出结果 | 关闭 |
| `-h, --help` | 显示帮助信息 | — |
| `-v, --version` | 显示版本号 | — |
## 示例
```
# 扫描前 100 个常用端口 (默认)
port-scanner example.com
# 扫描端口范围
port-scanner 192.168.1.1 --ports 1-1024
# 扫描指定端口
port-scanner example.com --ports 22,80,443,3000,8080
# Top 500 端口,2s 超时
port-scanner 10.0.0.1 --top 500 --timeout 2000
# Banner grabbing
port-scanner example.com --ports 22,80,443 --banner
# 仅开放端口,JSON 输出
port-scanner example.com --open --json
# Host discovery — 子网 TCP ping 扫描
port-scanner --host-discovery 192.168.1.0/24
# 高并发快速扫描
port-scanner example.com --top 1000 --concurrency 200 --timeout 500
```
## 功能特性
- **内置前 1000 个常用端口** — 无需配置
- **200+ 服务映射** — SSH、HTTP、MySQL、Redis、MongoDB、Kubernetes、Docker、Elasticsearch 等
- **并发池** — 可配置限制,并行扫描数百个端口
- **进度条** — 扫描期间实时显示 `X/Total` 计数器
- **彩色输出** — 绿色=开放,黄色=被过滤,灰色=关闭
- **Banner 抓取** — 从开放端口读取前 256 字节
- **主机发现** — 针对 CIDR /16 到 /30 范围的基于 TCP 的 ping 扫描
- **JSON 输出** — 便于管道传输的结构化结果
- **零依赖** — 仅包含 `index.js` 和 `package.json`
## 输出
### 默认(彩色表格)
```
Scanning example.com (93.184.216.34) — 100 ports
PORT STATE SERVICE BANNER
──────────────────────────────────────────────────────────────────────
80/tcp open HTTP
443/tcp open HTTPS
──────────────────────────────────────────────────────────────────────
2 open 3 filtered 95 closed — 2.11s
```
### JSON (`--json`)
```
{
"host": "example.com",
"ip": "93.184.216.34",
"scannedAt": "2026-03-03T09:00:00.000Z",
"scanTime": 2110,
"summary": { "open": 2, "filtered": 3, "closed": 95 },
"ports": [
{ "port": 80, "status": "open", "banner": null, "service": "HTTP" },
{ "port": 443, "status": "open", "banner": null, "service": "HTTPS" }
]
}
```
## 安全性
- 零外部依赖 — 无供应链风险
- 使用 `net.createConnection()` — 无需原始套接字,无需 root 权限
- 无 shell 执行 — 所有操作均通过 Node.js API 完成
- 敏感值仅通过 `process.env` 传递
## 道德使用声明
**仅扫描您拥有或获得明确书面授权扫描的主机和网络。**
未经授权的端口扫描可能会:
- 违反您所在司法管辖区的计算机欺诈和滥用法
- 违反网络和托管服务商的服务条款
- 构成对计算机系统的非法访问
作者不对本工具的滥用行为承担任何责任。
## 许可证
MIT
标签:AES-256, Banner抓取, Facebook API, GitHub, GNU通用公共许可证, MITM代理, Node.js, TCP连接, URL短链接分析, 密码管理, 局域网扫描, 并发处理, 插件系统, 数据统计, 服务器安全, 服务探测, 漏洞评估, 端口扫描, 网络安全, 网络工具, 自定义脚本, 自定义脚本, 隐私保护, 零依赖