
Smap v1.0.0-beta
一个由shodan.io驱动的Nmap即插即用替代品
由 shodan.io 驱动的 nmap 替代品

Smap 是一款基于 shodan.io 免费 API 构建的被动端口扫描器。它接受与 Nmap 相同的命令行参数,并产生相同的输出,因此可以作为 Nmap 的直接替代品。
功能
- 每秒扫描 200 台主机
- 无需任何账户/API 密钥
- 漏洞检测
- 支持 nmap 的输出格式
- 服务与版本指纹识别
- 在被动模式下不与目标进行任何接触
- 可选:使用 Shodan 报告的端口加速 nmap
安装
二进制文件
你可以从 这里 下载预构建的二进制文件并立即使用。
手动安装
go install -v github.com/s0md3v/smap/cmd/smap@latest
感到困惑或遇到问题?如需更详细的说明,点击这里
AUR 软件包
Smap 在 AUR 中可用作 smap-git(从源码构建)和 smap-bin(预构建二进制文件)。
Homebrew/Mac
Smap 也可在 Homebrew 上获得。
brew update
brew install smap
用法
Smap 接受与 Nmap 相同的参数,但在被动模式下,除 -p、-h、-V、-o*、-iL、--concurrency 和 --append-output 之外的选项都会被忽略。在被动端口发现之后,使用 --nmap 将 Nmap 选项传递给真实的 Nmap 扫描。如果你不熟悉 Nmap,下面介绍如何使用 Smap。
指定目标
smap 127.0.0.1 127.0.0.2
你也可以使用以换行符分隔的目标列表。
smap -iL targets.txt
支持的格式
1.1.1.1 // IPv4 address
example.com // hostname
178.23.56.0/8 // CIDR
1.1.1.1-20 // IPv4 range
输出
Smap 支持 7 种输出格式,可通过 -o* 使用,如下所示:
smap example.com -oX output.xml
如果你想将输出打印到终端,请使用连字符(-)作为文件名。
支持的格式
oX // nmap's xml format
oG // nmap's greppable format
oN // nmap's default format
oA // output in all 3 formats above at once
oP // IP:PORT pairs separated by newlines
oS // custom smap format
oJ // json
注意:由于 Nmap 不会扫描/显示漏洞和标签,这些数据在 nmap 的格式中不可用。请使用
-oS查看这些信息。
指定端口
Smap 默认扫描这些 约 4000 个端口。如果只想显示特定端口的结果,请使用 -p 选项。
smap -p21-30,80,443 -iL targets.txt
Nmap 加速
使用 --nmap 通过本地 nmap 缩小扫描范围。Smap 首先收集 Shodan 报告的端口并集,然后以该较小的端口范围对原始目标运行一次 Nmap。
smap --nmap -Pn -sV --version-light 1.1.1.1
除 --nmap 和 --concurrency 外,提供的参数都会传递给 Nmap。Smap 会用 Shodan 候选端口替换端口范围;如果你指定了 -p,它会先将候选端口限制在该范围内。Nmap 直接处理扫描和输出,因此其选项和输出格式表现正常。诸如 -sL 和 -sn 之类的纯主机操作会直接传递,不进行被动端口发现。
Smap 的自定义输出格式是被动模式的特性;使用 --nmap 时,输出选项具有其正常的 Nmap 含义。如果 Shodan 未报告任何候选端口,则不会运行 Nmap。
如果被动数据足以满足你的使用场景,这可以节省时间。
控制并发
Smap 默认使用 3 个工作线程,以避免对 Shodan 造成过大的访问压力。你可以通过 --concurrency 更改该值。
smap --concurrency 5 -iL targets.txt
注意事项
由于 Smap 只是从 shodan.io 获取现有的端口数据,因此它非常快,但不仅如此。如果满足以下情况,你应该使用 Smap:
你想要
- 漏洞检测
- 超快的端口扫描器
- 不需要与目标建立连接
你可以接受
- 无法扫描 IPv6 地址
- 结果最长已有 7 天
- 被动模式下一些罕见的不可靠软件检测
注意:如果你使用
--nmap,Smap 将对目标运行nmap并进行主动连接。由于 Shodan 的数据可能已过期或不完整,将其用作端口过滤器可能会遗漏开放端口。
