nsergej/PortScanner
GitHub: nsergej/PortScanner
一款轻量级的 Windows 多线程 TCP 端口扫描器,支持全端口范围扫描并自动导出多种格式报告。
Stars: 0 | Forks: 0
[](https://github.com/nsergej/PortScanner/releases)
[](LICENSE)
# PortScanner
## 项目描述
PortScanner 是一款适用于 Windows 的带有图形界面的多线程 TCP 端口扫描器。它可以检查一个数字 IPv4 地址上可配置的 TCP 端口范围,列出开放的端口,测量连接响应时间,并生成 HTML、CSV 和 JSON 报告。
## 当前项目状态
当前记录的版本为 **1.0.0**(仓库标签 `V1.0`)。该仓库包含 Delphi VCL 源代码、应用程序资产和示例报告。生成的 Delphi 项目和资源文件未被跟踪,因此在从源代码构建之前,必须配置本地项目资源。
该仓库目前不包含自动构建或自动测试。
## 截图
## 主要功能
- 一次扫描一个数字 IPv4 地址
- 支持从 1 到 65535 的 TCP 端口
- 最多使用 256 个工作线程
- 使用带有固定连接超时的非阻塞 WinSock 连接
- 按端口号升序列出开放端口
- 显示每个开放端口的响应时间
- 显示扫描进度、开放端口数和扫描速度
- 通过同一个“开始/停止”按钮停止正在进行的扫描
- 自动将完成的扫描结果导出为 HTML、CSV 和 JSON
- 根据请求通过 `icanhazip.com` 获取外部 IPv4 地址
## 当前限制
- 仅支持 IPv4;不支持 IPv6
- 仅支持数字 IPv4 地址;不接受 DNS 主机名
- 每次扫描只能有一个目标地址和一个连续的端口范围
- 工作线程数和连接超时时间在源代码中固定
- 仅显示和导出开放的端口
- 报告会自动导出;没有手动导出命令或输出文件夹选择器
- 用户手动停止的扫描不会自动导出
## 系统要求
### 运行 PortScanner
- Windows 10 或更高版本
- 与授权目标的网络连接
- 具有扫描所选系统或网络的权限
- 对包含 `PortScanner.exe` 的目录具有写入权限以便导出报告
- 仅在使用**我的外部 IP** 时需要互联网连接
### 构建 PortScanner
- Embarcadero Delphi 10.4 Sydney
- Windows VCL 开发组件
- 已配置的 32 位 Windows 目标平台
有关完整的设置和构建过程,请参阅 [BUILDING.md](BUILDING.md)。
## 下载
已发布的构建版本可在 [GitHub Releases 页面](https://github.com/nsergej/PortScanner/releases) 获取。
## 安装
PortScanner 不需要安装程序:
1. 从 GitHub Releases 下载可用的发布包。
2. 将文件解压到您的 Windows 帐户具有写入权限的目录中。
3. 启动 `PortScanner.exe`。
如果您希望应用程序将报告导出到其所在目录,请不要将其放置在受保护的目录中。
## 用法
应用程序打开时,地址字段中会显示本地 IPv4 地址,并选中完整的端口范围。界面包含目标地址、起始和结束端口、一个“开始/停止”按钮、开放端口计数器、结果列表、进度条和状态栏。
有关详细的操作说明,请参阅 [docs/USAGE.md](docs/USAGE.md);有关常见错误,请参阅 [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)。
## 开始扫描
1. 输入一个数字 IPv4 地址,例如 `192.168.1.10`。
2. 设置第一个和最后一个 TCP 端口。这两个值必须在 `1` 和 `65535` 之间,并且起始值不能超过结束值。
3. 选择**开始**。
4. 监控进度条、状态栏、开放端口计数器和结果列表。
开始新的扫描会清除之前的屏幕显示结果。
## 停止扫描
扫描进行时,**开始**按钮会变为**停止**。选择该按钮将清空待处理的端口队列,并请求所有工作线程停止。在活动的工作线程完成其当前工作之前,该按钮会暂时禁用。
部分结果仍然可见,但不会为已停止的扫描自动生成报告。
## 导出格式
扫描正常完成后,PortScanner 会自动在运行的可执行文件旁边写入三个 UTF-8 编码的报告文件:
```
portscan_YYYYMMDD_HHMMSS_IP.html
portscan_YYYYMMDD_HHMMSS_IP.csv
portscan_YYYYMMDD_HHMMSS_IP.json
```
文件名中 IPv4 地址的点会被替换为下划线。有关确切的字段和结构,请参阅 [docs/EXPORT_FORMATS.md](docs/EXPORT_FORMATS.md)。
## 示例结果
以下行与 [`docs`](docs) 目录中的所有三个示例文件相匹配:
| 索引 | IPv4 地址 | 端口 | 响应时间 (毫秒) |
|------:|--------------|-----:|-------------------:|
| 1 | 8.8.8.8 | 53 | 157 |
| 2 | 8.8.8.8 | 443 | 125 |
| 3 | 8.8.8.8 | 853 | 31 |
示例报告:
- [CSV 报告](docs/sample_report.csv)
- [HTML 报告](docs/sample_report.html)
- [JSON 报告](docs/sample_report.json)
这些示例描述了对 `8.8.8.8` 进行的一次扫描,端口范围为 `1` 到 `1000`,有三个开放端口。HTML 和 JSON 示例使用的时间戳为 `2026-03-27 01:39:44`,响应时间如上所示。
## 从源代码构建
在 Delphi 10.4 Sydney 中打开 `src/PortScanner.dpr`,并在构建 32 位 Windows 目标之前配置生成的项目资源。该仓库不跟踪 `.dproj` 或 `.res` 文件。
有关所需文件、VCL 样式设置、Debug 和 Release 配置以及输出位置,请遵循 [BUILDING.md](BUILDING.md)。
## 项目结构
```
PortScanner/
|-- .github/ Issue and pull request templates
|-- docs/
| |-- ARCHITECTURE.md Current implementation overview
| |-- EXPORT_FORMATS.md HTML, CSV, and JSON report definitions
| |-- TROUBLESHOOTING.md Common problems and corrective actions
| |-- USAGE.md Detailed operating instructions
| `-- sample_report.* Synchronized sample reports
|-- src/
| |-- PortScanner.dpr Delphi program entry point
| |-- Unit1.pas Form logic, workers, scanning, and export
| |-- Unit1.dfm VCL form definition
| |-- forbidden.ico Application icon asset
| `-- forbidden.png Image asset
|-- BUILDING.md Delphi 10.4 build guide
|-- CHANGELOG.md Version history
|-- CODE_OF_CONDUCT.md Community standards
|-- CONTRIBUTING.md Contribution workflow
|-- LICENSE MIT License
|-- README.md Project overview
`-- SECURITY.md Private security reporting policy
```
有关简明的实现说明,请参阅 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
## 负责任的使用
仅对您拥有或获得明确授权进行测试的系统和网络使用 PortScanner。未经授权的扫描可能会违反法律、合同、可接受使用政策或组织规定。
## 安全
请按照 [SECURITY.md](SECURITY.md) 私下报告潜在的安全问题。请勿在公开的 GitHub Issue 中发布敏感细节。
## 许可证
PortScanner 基于 [MIT 许可证](LICENSE) 提供。
## 主要功能
- 一次扫描一个数字 IPv4 地址
- 支持从 1 到 65535 的 TCP 端口
- 最多使用 256 个工作线程
- 使用带有固定连接超时的非阻塞 WinSock 连接
- 按端口号升序列出开放端口
- 显示每个开放端口的响应时间
- 显示扫描进度、开放端口数和扫描速度
- 通过同一个“开始/停止”按钮停止正在进行的扫描
- 自动将完成的扫描结果导出为 HTML、CSV 和 JSON
- 根据请求通过 `icanhazip.com` 获取外部 IPv4 地址
## 当前限制
- 仅支持 IPv4;不支持 IPv6
- 仅支持数字 IPv4 地址;不接受 DNS 主机名
- 每次扫描只能有一个目标地址和一个连续的端口范围
- 工作线程数和连接超时时间在源代码中固定
- 仅显示和导出开放的端口
- 报告会自动导出;没有手动导出命令或输出文件夹选择器
- 用户手动停止的扫描不会自动导出
## 系统要求
### 运行 PortScanner
- Windows 10 或更高版本
- 与授权目标的网络连接
- 具有扫描所选系统或网络的权限
- 对包含 `PortScanner.exe` 的目录具有写入权限以便导出报告
- 仅在使用**我的外部 IP** 时需要互联网连接
### 构建 PortScanner
- Embarcadero Delphi 10.4 Sydney
- Windows VCL 开发组件
- 已配置的 32 位 Windows 目标平台
有关完整的设置和构建过程,请参阅 [BUILDING.md](BUILDING.md)。
## 下载
已发布的构建版本可在 [GitHub Releases 页面](https://github.com/nsergej/PortScanner/releases) 获取。
## 安装
PortScanner 不需要安装程序:
1. 从 GitHub Releases 下载可用的发布包。
2. 将文件解压到您的 Windows 帐户具有写入权限的目录中。
3. 启动 `PortScanner.exe`。
如果您希望应用程序将报告导出到其所在目录,请不要将其放置在受保护的目录中。
## 用法
应用程序打开时,地址字段中会显示本地 IPv4 地址,并选中完整的端口范围。界面包含目标地址、起始和结束端口、一个“开始/停止”按钮、开放端口计数器、结果列表、进度条和状态栏。
有关详细的操作说明,请参阅 [docs/USAGE.md](docs/USAGE.md);有关常见错误,请参阅 [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)。
## 开始扫描
1. 输入一个数字 IPv4 地址,例如 `192.168.1.10`。
2. 设置第一个和最后一个 TCP 端口。这两个值必须在 `1` 和 `65535` 之间,并且起始值不能超过结束值。
3. 选择**开始**。
4. 监控进度条、状态栏、开放端口计数器和结果列表。
开始新的扫描会清除之前的屏幕显示结果。
## 停止扫描
扫描进行时,**开始**按钮会变为**停止**。选择该按钮将清空待处理的端口队列,并请求所有工作线程停止。在活动的工作线程完成其当前工作之前,该按钮会暂时禁用。
部分结果仍然可见,但不会为已停止的扫描自动生成报告。
## 导出格式
扫描正常完成后,PortScanner 会自动在运行的可执行文件旁边写入三个 UTF-8 编码的报告文件:
```
portscan_YYYYMMDD_HHMMSS_IP.html
portscan_YYYYMMDD_HHMMSS_IP.csv
portscan_YYYYMMDD_HHMMSS_IP.json
```
文件名中 IPv4 地址的点会被替换为下划线。有关确切的字段和结构,请参阅 [docs/EXPORT_FORMATS.md](docs/EXPORT_FORMATS.md)。
## 示例结果
以下行与 [`docs`](docs) 目录中的所有三个示例文件相匹配:
| 索引 | IPv4 地址 | 端口 | 响应时间 (毫秒) |
|------:|--------------|-----:|-------------------:|
| 1 | 8.8.8.8 | 53 | 157 |
| 2 | 8.8.8.8 | 443 | 125 |
| 3 | 8.8.8.8 | 853 | 31 |
示例报告:
- [CSV 报告](docs/sample_report.csv)
- [HTML 报告](docs/sample_report.html)
- [JSON 报告](docs/sample_report.json)
这些示例描述了对 `8.8.8.8` 进行的一次扫描,端口范围为 `1` 到 `1000`,有三个开放端口。HTML 和 JSON 示例使用的时间戳为 `2026-03-27 01:39:44`,响应时间如上所示。
## 从源代码构建
在 Delphi 10.4 Sydney 中打开 `src/PortScanner.dpr`,并在构建 32 位 Windows 目标之前配置生成的项目资源。该仓库不跟踪 `.dproj` 或 `.res` 文件。
有关所需文件、VCL 样式设置、Debug 和 Release 配置以及输出位置,请遵循 [BUILDING.md](BUILDING.md)。
## 项目结构
```
PortScanner/
|-- .github/ Issue and pull request templates
|-- docs/
| |-- ARCHITECTURE.md Current implementation overview
| |-- EXPORT_FORMATS.md HTML, CSV, and JSON report definitions
| |-- TROUBLESHOOTING.md Common problems and corrective actions
| |-- USAGE.md Detailed operating instructions
| `-- sample_report.* Synchronized sample reports
|-- src/
| |-- PortScanner.dpr Delphi program entry point
| |-- Unit1.pas Form logic, workers, scanning, and export
| |-- Unit1.dfm VCL form definition
| |-- forbidden.ico Application icon asset
| `-- forbidden.png Image asset
|-- BUILDING.md Delphi 10.4 build guide
|-- CHANGELOG.md Version history
|-- CODE_OF_CONDUCT.md Community standards
|-- CONTRIBUTING.md Contribution workflow
|-- LICENSE MIT License
|-- README.md Project overview
`-- SECURITY.md Private security reporting policy
```
有关简明的实现说明,请参阅 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
## 负责任的使用
仅对您拥有或获得明确授权进行测试的系统和网络使用 PortScanner。未经授权的扫描可能会违反法律、合同、可接受使用政策或组织规定。
## 安全
请按照 [SECURITY.md](SECURITY.md) 私下报告潜在的安全问题。请勿在公开的 GitHub Issue 中发布敏感细节。
## 许可证
PortScanner 基于 [MIT 许可证](LICENSE) 提供。标签:Delphi, 插件系统, 数据统计, 桌面应用, 端口扫描, 网络工具