用于有界网络侦察的 Rust CLI:TCP/UDP 端口发现、服务识别、DNS/TLS/HTTP 证据收集,以及带关联分析的公开来源用户名搜索。
侦察与证据引擎
基于 Rust 的有界侦察与证据关联。
RXScan 将网络侦察、公开来源搜索、调查和证据关联整合到一个 CLI 中。
它可以发现主机和端口、识别观测到的服务、收集有界的协议和 Web 证据、搜索公开提供商、关联发现结果,并持久化结果以供后续分析和比较。
RXScan 在报告内容上刻意保持保守。端口号并不标识服务,HTTP 成功本身并不确认账户存在,不完整的覆盖范围与否定结果被明确区分开来。
从仓库构建并安装:
git clone https://github.com/DarkRX1/RXScan.git
cd RXScan
cargo install --path . --locked
检查已安装的构建:
rxscan --version
rxscan --help
运行常规侦察扫描:
rxscan example.test
搜索公开来源:
rxscan search --username exampleuser
调查并关联公开发现:
rxscan investigate --username exampleuser
这些是三个主要入口点:
rxscan TARGET
rxscan search ...
rxscan investigate ...
默认扫描使用 recon 工作流、级别 3 以及均衡的执行设置。
rxscan example.test
指定端口以精确选择端口:
rxscan example.test --ports 22,80,443
rxscan example.test --ports 1-1024
rxscan example.test --ports 22,80,443,8000-8100
扫描完整的 TCP 端口范围:
rxscan example.test --all-ports
UDP 发现是显式的:
rxscan example.test --udp
显示有效计划和额外的执行详情:
rxscan example.test --explain
RXScan 支持:
rxscan example.test --scan-mode auto
rxscan example.test --scan-mode connect
rxscan example.test --scan-mode syn
TCP connect 扫描是 RXScan 当前在其支持平台上使用的可移植扫描路径。
当所需能力可用时,Linux 上的 IPv4 支持原始 SYN 扫描。当请求的 SYN 路径无法使用时,RXScan 会报告实际生效的回退方式,而不是将 connect 扫描静默呈现为 SYN 扫描。
UDP 扫描使用有界原生探测,并且保持为可选启用。
当前协议感知的 UDP 发现包括针对 DNS、NTP 和 SSDP 等服务的小型探测。
UDP 静默不会被报告为端口开放或关闭的证据。RXScan 会保留由此产生的 open|filtered 不确定性。
操作系统检测是显式且基于证据的,绝不会仅凭单一线索进行猜测:
rxscan example.test --os
--os 会针对每个在范围内的主机运行一个有界的探测计划(最多 6 个常规 TCP/ICMP 探测,复用扫描已知的端口),并解释每个候选结果:匹配的证据、冲突的证据、不可用的证据、覆盖范围以及来源。在没有原始数据包能力的情况下,它会诚实地降级为被动证据,并降低置信度。当证据不足时,Unknown 是一等结果。有关证据模型、局限性以及当前语料库实际情况,请参阅 docs/OS_FINGERPRINTING.md。
RXScan 根据观察到的协议行为来识别服务,而不是仅根据端口号来分配服务。
当前的原生识别覆盖常见协议,包括:
根据协议和可用证据的不同,观察结果可能包括产品/版本信息、横幅、HTTP 端点和标题、TLS 证书事实、SSH 身份信息以及归一化的技术证据。
当 RXScan 没有足够的证据来识别未知服务时,它们会保持未知状态。
这些识别探测不需要身份验证。
用户名搜索可通过以下方式使用:
rxscan search --username exampleuser
正常输出侧重于有用的阳性发现和不确定发现,而不是打印每一个阴性提供方结果。
一条发现可以区分已观测到的配置文件、另一个已观测到的资源,以及未确认的候选位置。
例如:
FINDINGS
✓ provider / exampleuser
Profile https://example.test/exampleuser
high · 94% · public profile
? another-provider / exampleuser
Candidate https://example.test/u/exampleuser
low · 25% · weak evidence
这些标签是有意设计的:
| 标签 | 含义 |
|---|---|
Profile | 观测到的特定身份公开资料 |
Resource | 观测到的特定身份资源,不一定是公开资料 |
Candidate | 尚未确认的特定身份位置 |
通用提供商主页或 API 端点不会作为已确认的 资料 URL 呈现。
RXScan 还会将 blocked、rate-limited、unknown、 error 和 unscanned 等提供商结果保持区分,而不是将其转换为假阴性 结果。
使用以下命令显示完整的人类可读结果集:
rxscan search --username exampleuser --all
显示额外的执行与分类详情,使用:
rxscan search --username exampleuser --explain
公开发现可以通过 RXScan 的调查与关联流程进行传递:
rxscan investigate --username exampleuser
默认视图聚焦于账户、有用 URL、置信度和有意义的关系。
静态 JavaScript、样式表、字体和图像等次要 Web 资源在与其底层证据相关时会保留,但不会主导默认的人类可读报告。
详细视图可以展示更多已收集的关系数据。
调查默认保持被动。通过公开证据发现网络目标并不会自动授权或触发网络扫描。
RXScan 将观测结果存储为类型化证据,供其报告、调查、图谱、历史和分析路径使用。
项目中刻意强制执行了若干规则:
200 不能确定存在公开账户;这种观测与解释之间的区分是 RXScan 设计的核心部分。
对于已确认的 Web 服务,RXScan 可以收集有界的 HTTP 观测数据,例如:
robots.txtsitemap.xml工作流和证据还可以允许有界爬取、基线检查、受管内容发现以及上下文 GET 查询跟进。
DNS 观测支持有界记录收集,包括:
TLS 观测记录握手和证书证据。它不是穷尽式的 TLS 密码套件扫描器。
网络活动受 RXScan 的范围策略约束。
可以显式提供额外的允许目标:
rxscan example.test --scope example.test
目标也可以被排除:
rxscan example.test --exclude api.example.test
超出范围的工作会在发生相应网络接触之前被拒绝。
范围强制执行可减少意外接触。它不能替代操作者获得授权的责任。
RXScan 会围绕调度、并发、重试、执行时间、主机扩展、证据收集和后续活动等工作设置限制。
当截止时间或其他执行限制导致工作无法运行时,RXScan 会保留已完成的证据并记录剩余工作,而不是将本次运行呈现为已完全完成。
这也适用于部分网络扫描。
人类可读输出旨在用于交互式使用:
rxscan example.test
当终端适合时,颜色会自动启用,并可通过以下方式控制:
rxscan --color auto example.test
rxscan --color always example.test
rxscan --color never example.test
--explain 会公开额外的规划器、策略、计费和推理信息,这些信息在常规的“发现优先”视图中被有意省略。
机器可读输出可单独获取:
rxscan example.test --format jsonl
rxscan example.test --output scan.jsonl
机器输出不包含终端 ANSI 样式。
扫描还可以写入检查点:
rxscan example.test --checkpoint scan.rxscan
RXScan 支持持久化证据和离线工作流,包括报告、分析、比较和项目图操作。
示例:
rxscan report scan.rxscan
rxscan diff old.rxscan new.rxscan
历史对比会考虑覆盖范围。如果后续扫描未覆盖相同的目标或证据面,仅凭缺失不会被解释为已确认的移除。
RXScan 目前面向 Linux。
原始 SYN 扫描特定于 Linux/IPv4。其他扫描路径和协议功能各有其自身的能力要求。
运行:
rxscan capabilities
以查看当前构建/运行时可以使用什么。
已知限制包括:
rxscan search providers 和 docs/PROVIDER_CONTRACT.md;RXScan 是一个年轻的项目。不应将其视为具备长期成熟的网络扫描器所拥有的协议 覆盖范围、指纹语料库、平台广度或运营历史。
RXScan 是一个侦察工具,而非漏洞利用框架。
它不提供自动化的:
网络扫描仅应针对你拥有或获得明确 授权评估的系统使用。
已发布的 v1.1.0:提供即用型二进制文件,适用于 Windows x86_64
(已进行运行时测试)、Linux x86_64(已进行运行时测试)、Linux ARM64
(仅构建)、macOS ARM64(已进行运行时测试)和 macOS x86_64
(仅构建),以及一个 Android APK(测试版/实验性:已在模拟器上
进行安装/启动测试;物理 ARM64 设备执行尚未验证)。
当前 master(开发分支):可移植核心,在 Linux、Windows 原生、WSL、macOS 和 Android/Termux 上具有显式能力
检测。受限环境仅会失去真正不可用的能力
(原始数据包、特权枚举),并附带一条受控说明和
被动回退。主动操作系统指纹识别为实验性(见
docs/PLATFORMS.md);Termux 尚无已发布的归档。Linux x86_64 已在
本地进行运行时测试。
有关矩阵,请参见 docs/PLATFORMS.md;有关各平台最简单的安装途径,请参见 docs/INSTALLATION.md。
不要将仅存在于 master 的工作视为 v1.1.0 的一部分。
要求:
构建:
cargo build --release --locked
运行:
./target/release/rxscan --help
测试:
cargo test --locked
完整的项目检查由 docs/TESTING.md 负责(规范化的检查项清单)。简要版本如下:
cargo test --locked
cargo run --locked -- search lint
网络测试应使用确定性的本地测试夹具,而不是依赖公共互联网服务。
RXScan 还附带一个仅限回环地址的本地控制台,由二进制文件自身提供服务:
rxscan web
rxscan web --port 8901
rxscan web --no-open
应用位于 /(/app 为其别名),版本化类型化 API 位于同一源上的 /api/v1。绑定默认使用回环地址;远程绑定需要显式指定危险的 --allow-remote 标志,且从不推荐使用。
已发布的版本及其说明可在 GitHub Releases 页面查看。
v1.0.0 和 v1.0.1 标签发布时带有错误的 0.1.0 Cargo 包元数据。这些历史标签被有意保持原样不变。
v1.0.2 是首个版本号正确的 1.x 发布版本(仅源代码归档)。
v1.1.0 是首个附带可直接运行的发行产物的版本:Windows x86_64、Linux x86_64 和 macOS ARM64 已通过运行时测试;Linux ARM64 和 macOS x86_64 仅通过构建;Android APK 为 beta/实验性(已通过模拟器安装/启动测试,物理设备执行未经验证,调试签名)。
master 分支上的开发内容可能包含比最新已发布版本更新的更改。