此工具由天禄实验室开发
TL-Rustscan 是一款基于 Rust 编写的高性能、高并发端口扫描命令行工具。专为攻防演练、资产摸排和渗透测试设计,旨在提供快速、稳定且易于集成的端口探测能力。
严禁未授权扫描!
本工具仅允许在取得明确授权的前提下,用于内部资产管理、安全自查、攻防演练等合法场景。
- 禁止对互联网上非授权目标进行扫描。
- 使用者需自行承担因违规使用本工具而产生的一切法律责任。
- 极速扫描: 基于 Tokio 异步运行时,支持数千并发连接,秒级完成常见端口探测。
- 实时反馈: 发现开放端口立即输出,无需等待扫描结束。
- 全端口覆盖: 默认扫描 1-65535 全端口,不放过任何隐蔽服务。
- 代理支持: 支持 SOCKS5 代理 (
--proxy),轻松穿透防火墙或隐藏扫描来源。 - UDP 增强: 内置 DNS, NTP, SNMP 等常见协议的专用探测载荷,大幅提升 UDP 端口识别准确率。
- 红队模式: 提供
--rscan参数,集成弱口令爆破(SSH, SMB, RDP 等)与高危漏洞检测(MS17-010, WebLogic 等),实现一键式内网打点。 - 智能协议识别: 支持 RTSP, SOCKS5, MQTT, AMQP 等协议的主动探测,在无 Banner 时自动识别。
- 上下文感知爆破: Web 目录扫描会根据识别到的指纹(如 Spring, PHP)自动加载特定敏感路径。
- TLS 深度解析: 自动提取 HTTPS 证书中的 SANs (多域名) 信息,辅助发现隐藏资产。
- 多目标支持: 完美支持单 IP、域名、CIDR 网段(如
192.168.1.0/24)及文件导入。 - 结构化输出: 支持标准 JSON 输出,方便对接资产管理平台或后续自动化脚本。
- IPv6 Ready: 完美支持 IPv6 环境下的扫描与插件探测,自动处理地址格式兼容性。
- 跨平台: 单一可执行文件,无依赖运行于 Windows, Linux, macOS。
作为一款安全工具,我们深知“误报”和“漏报”是最大的痛点。TL-Rustscan 在设计之初就将精准度作为核心指标,通过以下底层机制保障扫描结果的可靠性:
-
智能碎片重组 (Smart Fragmentation Reassembly):
- 针对 SSH, MySQL 等协议,自动处理 TCP 数据包分片问题。
- 引入动态缓冲区与超时窗口,确保在网络抖动或高延迟环境下也能完整读取 Banner,避免因数据截断导致的识别失败。
-
无连接 UDP 探测 (Connectionless UDP):
- 摒弃传统的
connect()调用,采用send_to/recv_from原生套接字模型。 - 能够捕获中间网关返回的 ICMP (Port Unreachable) 消息,精准区分
Closed(有响应) 和Filtered(无响应/被拦截) 状态,解决多宿主环境下的漏报问题。
- 摒弃传统的
-
Web 目录 Soft 404 动态基线:
- 在扫描前自动探测目标的 404 响应特征(状态码、页面长度、重定向行为)。
- 支持 Chunked Encoding 流式读取,即使服务器不返回
Content-Length也能通过计算实际包体大小来精准过滤伪造的 200 OK 页面。
-
Windows 异步 IO 优化:
- 针对 Windows 操作系统内核的 Socket 限制,实现了基于
Blocking Task的连接池模型。 - 彻底解决了在 Windows 下高并发扫描导致的
OS Error 10055(缓冲区空间不足) 和连接假死问题。
- 针对 Windows 操作系统内核的 Socket 限制,实现了基于
直接运行 dist/TL-Rustscan.exe 即可。
如果你只有源代码,请确保已安装 Rust 环境,然后运行:
Windows:
双击运行项目根目录下的 build.bat。
Linux/macOS:
cargo build --release编译产物位于 target/release/TL-Rustscan。
只输入目标 IP 或域名,默认扫描 1-65535 所有端口,并实时显示结果。
TL-Rustscan 192.168.1.10
TL-Rustscan example.com如果你只想扫描特定端口,可以使用 -p 参数。
- 单端口:
-p 80 - 多端口:
-p 22,80,443 - 端口范围:
-p 1-1000 - 混合使用:
-p 80,8000-8100,3389
TL-Rustscan 192.168.1.10 -p 22,80,443,3389支持自动解析 CIDR 格式,批量扫描网段内的主机。
# 扫描整个 C 段的 Web 端口
TL-Rustscan 192.168.1.0/24 -p 80,443支持通过 SOCKS5 代理进行扫描,隐藏真实 IP 或访问内网目标。
TL-Rustscan 192.168.1.10 --proxy socks5://127.0.0.1:1080当目标较多时,可以将目标写入文本文件(每行一个 IP、域名或网段),使用 -L 加载。
targets.txt 内容示例:
192.168.1.10
10.0.0.0/24
db-server.local
命令:
TL-Rustscan -L targets.txt -p 1-1000使用 --json 参数将结果以 JSON 格式输出,适合程序解析。
TL-Rustscan 192.168.1.10 -p 80 --json或者直接保存到文件:
TL-Rustscan 192.168.1.10 -o result.json- 并发数 (
-C): 默认为 200。网络状况好时可调高至 1000-2000 以加快速度。 - 超时时间 (
-t): 默认为 500ms。内网环境可调低(如 200ms),公网或高延迟环境建议调高(如 1000ms)。 - 跳过复查 (
-x): 默认情况下,工具会对超时端口进行智能复查以防止漏报。如果你追求极致速度,可以使用-x关闭此功能。
# 高并发极速扫描 (关闭复查)
TL-Rustscan 10.0.0.0/16 -p 80 -C 2000 -t 200 -x使用 -b 或 --banner 参数,工具会:
- 尝试读取服务欢迎语(如 SSH, FTP, MySQL, PostgreSQL, RDP)。
- 如果是 Web 服务,会自动发送请求并提取 网页标题 (Title) 以及 Web 框架指纹 (如 Spring Boot, Laravel, Vue 等)。
TL-Rustscan 192.168.1.10 -p 80,8080,22,3306 -b输出示例:
192.168.1.10:80 is open (Title: 某某公司OA系统 | Frameworks: Spring Boot)
192.168.1.10:22 is open (SSH-2.0-OpenSSH_8.2p1)
192.168.1.10:3306 is open (MySQL 5.7.33-log)
使用 --output-markdown <FILE> 参数,可以将扫描结果保存为美观的 Markdown 格式,方便直接复制到笔记或报告中。
TL-Rustscan 192.168.1.0/24 -p 80,443 -b --output-markdown report.md使用 --udp 参数开启 UDP 扫描模式。
注意:UDP 扫描速度较慢且不可靠,建议只针对特定端口(如 DNS 53, NTP 123, SNMP 161)使用。
TL-Rustscan 192.168.1.1 -p 53,123,161 --udp使用 --check 参数,在扫描端口前先对目标进行存活检测(Ping/Connect)。
这对于扫描大网段非常有用,可以自动跳过不在线的主机,大幅节省时间。
# 扫描整个 B 段,但只扫描在线的主机
TL-Rustscan 10.0.0.0/16 -p 80 --check使用 --dir 参数开启 Web 目录爆破功能。
当扫描到 Web 端口 (80, 443, 8080 等) 时,会自动尝试探测常见路径(内置 300,000+ 条高价值字典,涵盖 /admin, /login, /backup 及各类备份文件)。
TL-Rustscan 192.168.1.10 -p 80,8080 --dir你也可以使用 --paths 指定自定义字典文件:
TL-Rustscan 192.168.1.10 -p 80 --dir --paths my_dict.txt你也可以使用 --dir-concurrency 控制目录扫描的并发数(默认 50):
TL-Rustscan 192.168.1.10 -p 80 --dir --dir-concurrency 100如果你想在非标准端口(如 12345)上启用目录爆破,可以使用 --dir-ports:
TL-Rustscan 192.168.1.10 -p 12345 --dir --dir-ports 12345使用 --deep 参数开启深度扫描模式。
在此模式下,如果扫描器识别出特定的前端框架(如 Vue.js, RuoYi),会尝试主动探测后端 API 接口以获取更详细的系统信息(如系统标题)。
注意:此模式会发送额外的 HTTP 请求,可能会增加被防火墙拦截的风险。
TL-Rustscan 192.168.1.10 -p 80 -b --deep使用 --rscan (或 -r) 参数开启红队全功能模式。此模式专为内网渗透设计,集成了类似 fscan 的强力功能。
开启此模式后,工具将在端口扫描和服务识别的基础上,自动执行:
- 弱口令爆破: 对 SSH, SMB, FTP, MySQL, MSSQL, Postgres, Redis, MongoDB, Telnet 等服务进行弱口令尝试。
- 高危漏洞扫描: 检测 MS17-010 (永恒之蓝), SMBGhost, WebLogic, SpringBoot, Docker Registry, PHPMyAdmin 等高危漏洞。
- 敏感信息泄露: 检测 NetBIOS 主机名, SNMP 团体名, Oracle TNS 等信息。
注意: 此模式具有攻击性,请务必在授权范围内使用!
# 开启红队模式,扫描 C 段
TL-Rustscan 192.168.1.0/24 -r
# 开启红队模式,但不进行暴力破解 (只扫漏洞)
TL-Rustscan 192.168.1.10 -r --no-brute
# 开启红队模式,但不进行漏洞验证 (只爆破)
TL-Rustscan 192.168.1.10 -r --no-poc目前 TL-Rustscan 在红队模式下支持以下协议和漏洞的深度检测:
弱口令爆破 (Brute-force):
- SSH: 22 端口
- SMB: 445 端口
- FTP: 21 端口
- Telnet: 23 端口
- MySQL: 3306 端口
- MSSQL: 1433 端口
- PostgreSQL: 5432 端口
- Redis: 6379 端口
- MongoDB: 27017 端口
- Tomcat: 8080 端口 (Web 管理后台)
漏洞与POC (Vulnerabilities):
- Windows: MS17-010 (永恒之蓝)
- WebLogic: CVE-2017-10271, CVE-2019-2725, Console 弱口令
- SpringBoot: Actuator 未授权访问
- Nacos: 未授权访问
- Docker Registry: 未授权访问
- PHPMyAdmin: 弱口令/未授权
- Hikvision: 海康威视摄像头弱口令/漏洞
- Prometheus: 未授权访问
- CouchDB: 未授权访问
- JDWP: Java 远程调试漏洞
- FCGI: FastCGI 未授权访问
- VNC: 5900 端口未授权/弱口令
- LDAP: 389 端口匿名访问
- Zookeeper: 未授权访问
- Elasticsearch: 未授权访问
基础指纹识别 (原有功能): 基础服务:
- SSH (Port 22): 识别版本号 (e.g., OpenSSH 8.2p1)
- MySQL (Port 3306): 识别版本号 (e.g., MySQL 5.7.33)
- PostgreSQL (Port 5432): 识别服务存在
- MSSQL (Port 1433): 识别 Microsoft SQL Server
- Oracle (Port 1521): 识别 Oracle TNS Listener
- MongoDB (Port 27017): 识别 MongoDB 版本
- Redis (Port 6379): 识别 Redis 及是否需要认证
- Memcached (Port 11211): 识别 Memcached 服务
- ElasticSearch (Port 9200): 识别集群名和版本号
- SMB (Port 445): 识别 Windows SMB 服务版本
远程管理:
- RDP (Port 3389): 识别 Microsoft RDP 服务
- VNC (Port 5900): 识别 RFB 协议版本
- Telnet (Port 23): 识别 Telnet 服务
Web 技术指纹 (16000+): TL-Rustscan 集成了 Wappalyzer, Nuclei 和 Recog 的指纹库,支持识别超过 16000 种 Web 技术,涵盖:
- Web 框架: Spring Boot, Laravel, Django, Flask, ThinkPHP, ASP.NET, Ruby on Rails, Gin, Beego 等。
- 前端技术: Vue.js, React, Angular, jQuery, Bootstrap, Webpack 等。
- CMS & OA: WordPress, Drupal, Joomla, Discuz!, 泛微 OA, 致远 OA, 用友 NC, 通达 OA, 蓝凌 OA 等。
- Favicon 识别: 支持计算并匹配网站图标 Hash (Murmur3),精准识别特定应用 (如 Seeyon OA)。
- 智能净化: 自动过滤通用噪音指纹 (如 "Nginx", "Wappalyzer"),只展示高价值结果。
- 中间件: Tomcat, Nginx, Apache, IIS, Jetty, WebLogic, WebSphere, JBoss 等。
- 安全设备: 识别 100+ 种 WAF (Cloudflare, AWS WAF, 阿里云 WAF, 长亭雷池等) 及防火墙设备。
- DevOps: Kubernetes, Docker, Jenkins, Grafana, Prometheus, GitLab 等。
- 其他: 各种数据库管理后台、VPN 入口、虚拟化平台等。
深度探测 (主动识别):
- RuoYi / Vue Admin: 配合
--deep参数,主动探测后端 API 获取系统标题。
TL-Rustscan 内置了丰富的指纹库,同时也支持用户自定义和规避检测。
- 随机 User-Agent: 使用
--random-ua参数,工具会在发送 HTTP 请求时随机选择 User-Agent,以规避基于 UA 的特征检测。 - 自动加载: 如果当前运行目录下存在
fingerprints.json文件,工具会自动加载它并替代内置指纹库。 - 手动指定: 使用
--fingerprints <FILE>参数可以指定任意路径的指纹文件。 - 导出内置: 使用
--dump-json参数可以将内置的指纹库导出到当前目录下的fingerprints.json文件中,方便您在此基础上进行修改和扩充。 - 合并导入: 使用
scripts/import_fingerprints.py脚本可以将外部指纹数据(如 Ehole/Finger 格式)合并到内置指纹库中。
# 使用随机 UA 进行扫描
TL-Rustscan 192.168.1.10 -p 80 -b --random-ua
# 导出内置指纹库
TL-Rustscan --dump-json| 参数 | 简写 | 说明 | 默认值 |
|---|---|---|---|
TARGET |
- | 目标 IP、域名或 CIDR | - |
--target-list |
-L |
从文件读取目标列表 | - |
--ports |
-p |
扫描端口范围 | 1-65535 |
--concurrency |
-C |
最大并发连接数 | 200 |
--timeout |
-t |
连接超时时间 (毫秒) | 500 |
--banner |
-b |
开启服务指纹识别 | false |
--rscan |
-r |
开启红队模式 (爆破+漏洞) | false |
--no-brute |
- | 红队模式下禁用爆破 | false |
--no-poc |
- | 红队模式下禁用漏洞验证 | false |
--deep |
- | 开启深度扫描 (API 探测) | false |
--udp |
- | 使用 UDP 扫描模式 | false |
--check |
- | 扫描前进行主机存活检测 | false |
--dir |
- | 开启 Web 目录爆破 | false |
--paths |
- | 指定目录爆破字典文件 | 内置字典 |
--dir-ports |
- | 指定进行 Web 探测的端口 | 80,443... |
--random-ua |
- | 使用随机 User-Agent | false |
--fingerprints |
- | 指定外部指纹库文件 (JSON) | - |
--dump-json |
- | 导出内置指纹库到文件 | false |
--json |
- | 输出 JSON 格式结果 | false |
--output-json |
-o |
将 JSON 结果保存到文件 | - |
--output-markdown |
- | 将结果输出为 Markdown 文件 | - |
--output-csv |
- | 将结果输出为 CSV 文件 | - |
--output-html |
- | 将结果输出为 HTML 文件 | - |
--show-closed |
- | 显示关闭/过滤的端口 | false |
--retry |
- | 失败重试次数 | 1 |
--rate |
- | 扫描速率限制 (请求/秒) | 0 (无限制) |
--random |
- | 随机化目标和端口顺序 | false |
--exclude-hosts |
- | 排除特定主机 | - |
--exclude-ports |
- | 排除特定端口 | - |
--help |
-h |
显示帮助信息 | - |
TL-Rustscan/
├── .github/ # GitHub 配置
│ ├── workflows/ # GitHub Actions 工作流
│ │ └── build.yml # 自动编译多平台可执行文件
│ ├── ISSUE_TEMPLATE/ # Issue 模板
│ └── PULL_REQUEST_TEMPLATE.md # PR 模板
├── src/ # Rust 源代码目录
│ ├── scanner/ # 核心扫描模块
│ │ ├── mod.rs # 扫描器主模块
│ │ ├── tcp_connect.rs # TCP 端口扫描实现
│ │ ├── udp_scan.rs # UDP 端口扫描实现
│ │ ├── udp_config.rs # UDP 扫描配置
│ │ ├── probes.rs # 服务指纹探测与识别
│ │ ├── web_dir.rs # Web 目录爆破
│ │ ├── fingerprint_db.rs # 指纹数据库管理
│ │ ├── host_discovery.rs # 主机存活检测
│ │ ├── adaptive.rs # 自适应并发控制
│ │ ├── connection_pool.rs # TCP 连接池
│ │ ├── scan_cache.rs # 扫描结果缓存
│ │ ├── checkpoint.rs # 断点续扫
│ │ ├── streaming_output.rs # 流式输出
│ │ ├── service_map.rs # 服务映射
│ │ └── constants.rs # 常量定义
│ ├── plugins/ # 插件模块
│ │ ├── mod.rs # 插件管理器
│ │ ├── ssh.rs # SSH 弱口令爆破
│ │ ├── redis.rs # Redis 未授权/弱口令
│ │ ├── mysql.rs # MySQL 弱口令
│ │ ├── mssql.rs # MSSQL 弱口令
│ │ ├── postgres.rs # PostgreSQL 弱口令
│ │ ├── mongodb.rs # MongoDB 未授权/弱口令
│ │ ├── ftp.rs # FTP 弱口令
│ │ ├── telnet.rs # Telnet 弱口令
│ │ ├── smb.rs # SMB 弱口令
│ │ ├── rdp.rs # RDP 检测
│ │ ├── vnc.rs # VNC 弱口令
│ │ ├── ms17010.rs # MS17-010 漏洞检测
│ │ ├── web_pocs.rs # Web 漏洞 POC
│ │ ├── web_fingerprints.rs # Web 指纹识别
│ │ ├── webtitle.rs # Web 标题获取
│ │ ├── memcached.rs # Memcached 检测
│ │ ├── elasticsearch.rs # Elasticsearch 检测
│ │ ├── zookeeper.rs # Zookeeper 检测
│ │ ├── docker.rs # Docker 检测
│ │ ├── netbios.rs # NetBIOS 信息收集
│ │ ├── snmp.rs # SNMP 检测
│ │ ├── oracle.rs # Oracle 检测
│ │ ├── fcgi.rs # FastCGI 检测
│ │ ├── ldap.rs # LDAP 检测
│ │ ├── jdwp.rs # JDWP 检测
│ │ └── dicts.rs # 弱口令字典
│ ├── config.rs # 命令行参数解析与配置管理
│ ├── main.rs # 程序入口
│ ├── output.rs # 多格式结果输出 (JSON, CSV, HTML, Markdown)
│ ├── target.rs # 目标解析逻辑 (CIDR, 域名, IP范围)
│ └── error.rs # 错误处理模块
├── docs/ # 文档目录
│ ├── FEATURES.md # 功能特性文档
│ ├── DEVELOPMENT.md # 开发指南
│ └── TESTING.md # 测试指南
├── scripts/ # 辅助工具脚本
│ ├── update_fingerprints.py # 指纹库更新脚本 (Wappalyzer/Nuclei/Recog)
│ ├── import_fingerprints.py # 自定义指纹导入脚本 (支持 Finger/Ehole 格式)
│ └── fetch_and_merge.py # 指纹数据获取与合并
├── imports/ # 导入数据目录
│ └── finger_custom.json # 自定义指纹数据
├── tests/ # 测试用例
│ └── integration_test.py # 集成测试
├── Cargo.toml # 项目依赖配置
├── Cargo.lock # 依赖锁定文件
├── build.rs # 构建脚本
├── build.bat # Windows 快速构建脚本
├── build.sh # Linux/macOS 快速构建脚本
├── Dockerfile # Docker 部署文件
├── LICENSE # MIT 许可证
├── README.md # 中文说明文档
├── README_EN.md # 英文说明文档
├── CHANGELOG.md # 中文更新日志
├── CHANGELOG_EN.md # 英文更新日志
├── CONTRIBUTING.md # 中文贡献指南
├── CONTRIBUTING_EN.md # 英文贡献指南
├── fingerprints.json # 指纹数据库文件
└── .gitignore # Git 忽略规则
Q: 扫描速度太慢怎么办?
A: 尝试增加并发数 -C 1000,或者如果是在内网,减小超时时间 -t 200。
Q: 为什么扫不到某些端口? A: 目标可能开启了防火墙。本工具目前仅支持 TCP Connect 扫描,会被防火墙记录或拦截。
Q: 扫描结果太多刷屏怎么办?
A: 建议使用 --json 或 -o result.json 将结果保存到文件查看。
Q: Windows 下扫描大量端口时报错?
A: 本工具已针对 Windows 做了优化,但如果并发过高仍可能受限于系统 TCP 连接数限制。尝试降低并发数 -C 500。
更多详细信息请参考 docs/ 目录下的文档: