做安全测试,拿到目标第一件事就是看它开了哪些端口。但 nmap 扫全端口有多慢,扫过的人都知道:一台机器几千秒起步,一个 C 段下去,可以先泡杯茶、刷两条短视频,再回来看扫完没有。
RustScan 就是来解决这一步的。它不是要取代 nmap,而是给 nmap 装了个火箭推进器:自己只负责“快速找端口”,找到之后自动把结果丢给 nmap 做深度探测。

两阶段设计才是关键
很多人以为 RustScan 只是“并发开得猛”。并发确实是它快的原因之一,但真正的设计是两阶段:
- 第一阶段(RustScan):用极高并发遍历端口范围,默认 batch size 4500,也就是同时开 4500 个 socket,只判断开/关,不做任何服务识别;
- 第二阶段(nmap):把第一阶段找到的开放端口自动作为参数传给 nmap,由 nmap 做版本识别、脚本扫描这些精细活。
这个拆分很聪明。全端口扫描里 99% 的时间花在“确认关着的端口确实关着”上,而这部分逻辑极简单,用 Rust 的异步 IO 批量做,成本可以压到很低。真正需要协议交互的部分交给 nmap,各司其职。

Kali 上装一条命令
sudo apt install rustscan -y
rustscan --version
实测:65535 个端口 1.86 秒
目标是一台内网机器 192.168.50.48,命令就是最朴素的那条:
rustscan -a 192.168.50.48扫完全部 65535 个端口,用时 1.86 秒。RustScan 会把发现的开放端口整理好,自动调用本机的 Nmap 7.99 继续识别。


加上版本探测,对比 nmap
-- 后面的所有内容会原封不动传给 nmap。所以一条命令就能完成“找端口 + 认服务”:
rustscan -a 192.168.50.48 -- -sV -sC -O同一台目标,RustScan + nmap 用时 28 秒;直接用 nmap 做同样的探测,用时 161 秒。差了将近 6 倍,而且这还是在单机上。



参数速查

| 场景 | 命令 |
|---|---|
| 最常用:全端口速扫 | rustscan -a <target> |
| 全端口 + 服务/系统识别 | rustscan -a <target> -- -sV -sC -O |
| 只扫指定端口 | rustscan -a <target> -p 22,80,443 |
| C 段批量摸底 | rustscan -a 192.168.50.0/24 --ulimit 5000 --top -g | tee lan_ports.txt |
| 提高文件描述符上限 | rustscan -a <target> --ulimit 5000 |
| 只输出开放端口列表 | rustscan -a <target> -g |
一个必须注意的坑
一定要加 --ulimit 5000。 默认的文件描述符上限太低,高并发时会拿不到足够的 socket,结果就是漏报端口,同时终端刷满警告。这个参数不是优化项,是正确性项。
另一个容易忽略的点:RustScan 的快只体现在“发现端口”上。如果你后面挂了 -sC 这种脚本扫描,总耗时还是由 nmap 决定。想进一步提速,可以把脚本扫描拆出去,只对确认有服务的高价值端口跑。
什么时候不该用它
RustScan 的默认并发对内网很友好,对公网目标就不一定了。4500 个并发连接打过去,很容易触发目标侧的限流或 IDS 告警,也可能被云厂商当成攻击流量。做授权测试时,把 batch size 调小、加 --ulimit 控制节奏,比事后解释要省事得多。
它解决的是渗透流程里最烦人、最耗时的那一步:把几分钟压到几秒,然后把精细活交回给 nmap。工具本身不复杂,但用对了能省下大量等待时间。
文章评论