
Smap 是一款基于 shodan.io 免费 API 构建的被动端口扫描器。它接受与 Nmap 相同的命令行参数,并产生相同的输出,因此可以作为 Nmap 的直接替代品。
你可以从 这里 下载预构建的二进制文件并立即使用。
go install -v github.com/s0md3v/smap/cmd/smap@latest
感到困惑或遇到问题?如需更详细的说明,点击这里
Smap 在 AUR 中可用作 smap-git(从源码构建)和 smap-bin(预构建二进制文件)。
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 缩小扫描范围。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:
注意:如果你使用
--nmap,Smap 将对目标运行nmap并进行主动连接。由于 Shodan 的数据可能已过期或不完整,将其用作端口过滤器可能会遗漏开放端口。