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, 插件系统, 数据可视化, 数据统计, 暗色界面, 端口扫描, 网络工具, 自动化攻击, 零依赖