一个优秀的端口扫描工具,最核心功能就是可以百分之百将开放的端口识别出来,无论是通过 TCP SYN 扫描还是通过全连接扫描。接下来就总结一下有哪些开源工具可用。
1. 业界冠军:Nmap
nmap 是最古老的端口扫描工具,也是如今使用最多最为广泛的工具,无论是安全从业者还是运维、研发人员,都知道它并且在实际的工作中使用它来验证远程服务是否正常,端口是否开放等。
经历了多年的发展,它不仅仅验证端口是否开放,而且还可以根据不同的端口发送特定 payload 来抓取端口返回信息,从而识别端口指纹,判断其运行的服务类型,除此之外还集成了脚本引擎,可以做一些漏洞探测的工作,直接实现从端口扫描到漏洞检测的完整流程。
nmap 官方网站:https://nmap.org/
2. 业界新秀:masscan
masscan 是以互联网全端口扫描而诞生,扫描速度极快,它的核心思想是异步扫描,与 Nmap 的同步扫描相反,异步扫描可以同时发送和处理多个网络连接。
理论上一次最多可以处理 1000 万个数据包,限制在于 TCP/IP 的堆栈处理能力,以及运行扫描工作的主机系统能力。
其优点是扫描速度快以及独特的探针随机化功能,其缺点是只能扫描 IP 或者 IP 段,无法指定域名目标。
项目地址:https://github.com/robertdavidgraham/masscan
3. Naabu
Naabu 是一款比较新的扫描器,是由一家开源软件公司开发,其专注于 web 应用程序安全和漏洞狩猎。Naabu 是用 GO 语言编写,毕竟 Go 工具往往拥有运行速度快和出色的稳定性。
该工具的特点是其设计考虑到了功能,他的目标在于与 Project Discovery 库中的其他工具以及 Nmap 等常用工具结合使用,所以输出的结果非常灵活。
除此之外,它还可以通过端口扫描自动将 IP 的重复数据删除来减少扫描资源的浪费,这对于 web 渗透来说是非常有用的,而且还集成了 nmap 的端口服务指纹识别能力。
项目地址:https://github.com/projectdiscovery/naabu
4. Rustscan
Rustscan 被称为现代端口扫描器,使用 Rust 语言编写,速度极快,能够在三秒内将一个 IP 的全端口(65535)扫描完成。
虽然只是简单的 SYN 和 Connect 扫描,但是它拥有完整的脚本引擎支持结果导出到 nmap 来进行详细的扫描。其还有个特点是在不改变参数的情况下,可以根据系统的性能来自动调整扫描速度,从而达到一个最佳扫描状态。
其扫描原理是通过对内部线程的管理,为了实现异步扫描的功能,在扫描过程中,每个端口扫描创建一个线程,每次可以创建数千个线程,而线程的多少取决于系统允许打开的最大文件数。
项目地址:https://github.com/RustScan/RustScan
5. 其他小工具
(1) Scanrand ,最早的异步扫描工具之一,其开发了两个独立的进程,一个用于发送探测包,一个用于接受探测包,不幸的是这个工具很久没有更新了。
(2) Knocker,写于 2002 年,通过引入多线程处理的端口扫描器,同样是很长时间不更新。
https://github.com/gabgio/knocker
(3) PNScan,与 Knocker 类似,它的特点是可以根据系统性能动态调整线程的数量来获得最佳扫描状态。
https://github.com/ptrrkssn/pnscan
(4) Unicornscan,相对较新的端口扫描器,理论上,通过将端口扫描相关的网络连接处理从内核转移到用户分配的处理资源,从而获得更好的性能,其拥有可以 Nmap 相媲美的功能,但是该工具已不再维护。
6. 特殊场景的扫描器
(1) Zmap,专门为了全网端口扫描而设计的工具,Zmap 工具本身可用于短时间内对大量网络地址进行特定端口的扫描,而且可以与 Zgrab2 结合使用,后者可以获取端口的指纹信息,缺点是只能针对单端口,而不像其他工具那些对多个端口。
https://github.com/zmap/zmap
(2) AngryIP Scanner,该工具一审计为重点,无需安装就可以使用,因为有大量黑客使用,从而导致它出现在大量设备的黑名单中,它也是少数具有 GUI 界面的端口扫描工具,能够输出优质的扫描报告。
https://angryip.org/
(3) Scantron,集成 nmap 和 masscan 的分布式扫描器,利用 SSH 隧道来实现分布式控制扫描节点
https://github.com/opsdisk/scantron
(4) Scanless,一个命令行工具,调用第三方端口扫描服务的 API 来实现间接端口扫描
https://github.com/vesche/scanless
(5) Unimap,针对大量子域进行端口扫描时,有非常多的域名指向相同的 IP,那么就会出现重复扫描的情况,使用这个工具可以先通过解析获取 IP,去重之后再发送给 Nmap 进行扫描,从而提高扫描的速度。
https://github.com/Edu4rdSHL/unimap
(6) Advanced Port Scanner,windows 下的一款 GUI 版端口扫描器。
https://www.advanced-port-scanner.com/
7. 总结
其实做端口扫描,使用 nmap 可以解决大部分场景的工作,而其他的一些工具会有一些特殊场景使用,比如单个目标,使用 nmap 用不了多久就可以扫描完成,而如果你要扫描的是几千,几万甚至百万级目标,还能只使用 nmap 吗,一定是要先使用类似 zmap、masscan 等快速扫描工具,确定端口开放,然后再使用 namp 做进一步的验证以及指纹识别,从而提升扫描速度。
以上不是所有端口扫描工具的合集,还有非常多其他优秀的扫描工具,比如 goby 等,还有一些自定的脚本,当然自己也可以编写属于自己的脚本和工具,集成到自己的自动化系统中。更多有意思的功能,还需大家在使用的时候进行挖掘。
参考网站:https://s0cm0nkey.gitbook.io/port-scanner-shootout/port-scanner-shootout-part-2-the-contenders