sulthonzh/portscan
GitHub: sulthonzh/portscan
一个零依赖的轻量级 Node.js 端口扫描器,提供端口扫描、服务检测和 Banner 抓取功能,旨在作为 nmap 的轻量替代方案。
Stars: 0 | Forks: 0
# portscan
零依赖端口扫描器,具备服务检测、Banner 抓取及多种输出格式功能。
开发它的原因是因为 `nmap` 对于“我的开发服务器上开了哪些端口?”这种需求来说过于大材小用,而大多数 Node 端口扫描器莫名其妙地依赖了 15 个库。
## 安装说明
```
npm install -g portscan
```
## 用法
```
# 扫描常见端口
portscan localhost common
# 扫描特定端口
portscan 192.168.1.1 80,443,8080
# 扫描范围
portscan example.com 3000-4000
# 使用预设进行 banner grabbing
portscan myserver.db common --banner
# 用于脚本的 JSON 输出
portscan localhost web --format json
# 用于报告的 Markdown
portscan 10.0.0.1 db --format markdown
# 仅显示开放端口
portscan localhost top100 --open
# 自定义 timeout 和 concurrency
portscan slow-server.com common --timeout 5000 --concurrency 20
```
## 预设配置
| 预设 | 描述 | 示例端口 |
|--------|-------------|---------------|
| `common` | 常用服务 | 22, 80, 443, 3306, 5432, 8080 |
| `web` | Web 服务器 | 80, 443, 3000, 5000, 8080, 8443 |
| `db` | 数据库 | 3306, 5432, 1433, 27017, 6379, 9200 |
| `mail` | 邮件服务器 | 25, 110, 143, 465, 587, 993, 995 |
| `top100` | 前 100 个端口 | 完整的 nmap 风格前 100 端口 |
## 服务检测
自动将知名端口映射到服务名称:
- `22` → SSH
- `80` → HTTP
- `443` → HTTPS
- `3306` → MySQL
- `5432` → PostgreSQL
- `6379` → Redis
- `27017` → MongoDB
- ……以及其他 20 多个
## Banner 抓取
使用 `--banner` 读取已开放服务的前几个字节。这对于识别实际运行的服务非常有用:
```
$ portscan localhost 80,443 --banner
portscan — localhost
Scanned 2 ports in 45ms
OPEN PORTS (1):
80/tcp [http] — 12ms
└─ nginx/1.24.0
```
## 输出格式
### 文本(默认)
```
portscan — localhost
Scanned 5 ports in 123ms
OPEN PORTS (2):
22/tcp [ssh] — 5ms
80/tcp [http] — 3ms
Summary: 2 open, 2 closed, 1 filtered
```
### JSON (`--format json`)
结构化输出,适用于脚本编写、CI 或通过管道传递给 `jq`。
### Markdown (`--format markdown`)
可通过管道传递至报告、PR 或文档中。
## API
```
import { scan, parsePorts } from 'portscan';
const result = await scan({
host: 'localhost',
ports: parsePorts('80,443,3000-3010'),
timeout: 3000,
concurrency: 50,
grabBanner: true,
serviceDetection: true,
});
console.log(result.summary);
// { total: 12, open: 3, closed: 7, filtered: 2 }
```
## 为什么会有这个项目
我需要一个轻量级的端口扫描器,它必须:
- 既可作为 CLI 也能作为库使用
- 不引入 30 个依赖项
- 告诉我每个端口上运行的是什么服务
- 能够抓取 Banner
- 输出 JSON 以便用于脚本编写
`nmap` 很棒,但它本身就是一个完整的生态系统。有时候你只是想知道端口 5432 是否可以访问。
## 许可证
MIT
标签:GNU通用公共许可证, MITM代理, Node.js, 插件系统, 数据可视化, 数据统计, 暗色界面, 端口扫描, 网络工具, 自动化攻击, 零依赖