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短链接分析, 密码管理, 局域网扫描, 并发处理, 插件系统, 数据统计, 服务器安全, 服务探测, 漏洞评估, 端口扫描, 网络安全, 网络工具, 自定义脚本, 自定义脚本, 隐私保护, 零依赖