0xPwn3z/rusty-port-scanner
GitHub: 0xPwn3z/rusty-port-scanner
一款基于 Rust 和 Tokio 的异步 TCP 端口扫描器,支持并发控制和超时配置,可快速发现目标主机的开放端口。
Stars: 0 | Forks: 0
# Rusty 端口扫描器
一个使用 Rust 编写的快速、异步 TCP 端口扫描器。
`rusty-port-scanner` 可以通过扫描单个端口或一定范围的端口,帮助你快速检查目标主机上哪些 TCP 端口处于开放状态,支持配置超时时间和并发数。
## 功能特性
- 使用 `tokio` 进行异步 TCP 扫描
- 可配置扫描范围(`start-port` 到 `end-port`)
- 可调节每次连接尝试的超时时间
- 使用信号量 (Semaphore) 控制最大并发数
- 由 `clap` 驱动的简洁 CLI
## 环境要求
- Rust 工具链 (stable, recent)
- Cargo (随 Rust 附带)
如果需要,请安装 Rust:
```
winget install Rustlang.Rustup
```
## 安装说明
### 方式 1:从源码运行
```
git clone https://github.com/0xPwn3z/rusty-port-scanner.git
Set-Location rusty-port-scanner
cargo run -- --help
```
### 方式 2:构建 release 二进制文件
```
Set-Location rusty-port-scanner
cargo build --release
```
二进制文件位置:
- Windows: `target\release\rusty-port-scanner.exe`
- Linux/macOS: `target/release/rusty-port-scanner`
### 方式 3:使用 Cargo 本地安装
```
Set-Location rusty-port-scanner
cargo install --path .
```
然后运行:
```
rusty-port-scanner --help
```
## 使用方法
```
rusty-port-scanner [OPTIONS] --address --start-port
```
### CLI 选项
| 选项 | 类型 | 必填 | 默认值 | 描述 |
| --- | --- | --- | --- | --- |
| `-a, --address ` | string | 是 | - | 目标 IP 或主机名 |
| `-s, --start-port ` | u16 | 是 | - | 起始扫描端口 |
| `-e, --end-port ` | u16 | 否 | `start-port` | 结束扫描端口 |
| `-t, --timeout ` | u64 | 否 | `5` | 每次连接的超时时间(秒) |
| `-c, --concurrency ` | usize | 否 | `30` | 最大并发连接尝试数 |
| `-h, --help` | flag | 否 | - | 显示帮助信息 |
## 示例
### 扫描单个端口
```
rusty-port-scanner --address 127.0.0.1 --start-port 22
```
### 扫描端口范围
```
rusty-port-scanner --address scanme.nmap.org --start-port 1 --end-port 1024
```
### 提高并发数以增加速度
```
rusty-port-scanner --address 192.168.1.10 --start-port 1 --end-port 1000 --concurrency 200
```
### 使用更短的超时时间
```
rusty-port-scanner --address 10.0.0.5 --start-port 1 --end-port 65535 --timeout 2
```
## 工作原理
扫描器执行以下步骤:
1. 使用 `clap` 解析 CLI 参数。
2. 遍历请求的端口范围。
3. 使用 `tokio` 生成异步任务。
4. 使用 `Semaphore` 限制活动任务数量(`--concurrency`)。
5. 通过 `tokio::time::timeout` 尝试对每个端口建立 TCP 连接。
6. 打印开放的端口,并在所有任务完成后退出。
## 局限性
- 仅扫描 TCP 端口。
- 执行连接扫描(非 SYN/半开扫描)。
- 输出较为简单,不导出为文件格式 (JSON/CSV)。
- 过高的并发度可能导致本地资源紧张(套接字/CPU)。
- 网络防火墙和 IDS/IPS 可能会限制或阻止扫描结果。
## 安全与道德规范
未经授权的端口扫描可能被视为恶意行为。
- 仅扫描你拥有或被授权测试的资产。
- 优先在受控的实验环境中进行。
- 遵守当地法律、组织政策和交战规则。
## 开发
### 项目结构
- `src/main.rs`: CLI 解析和扫描逻辑
- `Cargo.toml`: 包元数据和依赖项
### 构建与检查
```
cargo fmt
cargo clippy -- -D warnings
cargo build
cargo test
```
## 故障排除
- `connection timed out`:增加 `--timeout`,减少 `--concurrency`,检查网络路径。
- `no open ports found`:确认目标主机可达且有服务在监听。
- DNS/主机名问题:使用直接 IP 进行测试以排除名称解析问题。
- 权限或终端保护问题:在允许的环境中运行并检查本地安全控制。
## 许可证
本项目采用 MIT 许可证授权。
完整文本请参阅 `LICENSE`。
## 作者
版权所有 (c) 2026 `0xPwn3z`
标签:Clap, Rust, TCP协议, Tokio, 二进制发布, 可视化界面, 并发控制, 开源工具, 异步编程, 插件系统, 数据统计, 端口扫描, 网络安全, 网络流量审计, 通知系统, 隐私保护