Nmap是一款用于网络发现和安全审计的网络安全工具,以下是关于它的详细介绍:
基本信息
- 创建者:由Gordon Lyon(化名Fyodor Vaskovich)创建.
- 首次发布时间:1997年9月.
- 支持的操作系统:跨平台工具,可在Linux、Windows、macOS、BSD等系统上使用.
- 开源性质:开源软件,其代码由C、C++、Python、Lua等语言编写,社区的帮助和贡献推动了其不断发展.
主要功能
- 主机发现:通过发送ICMP请求、TCP SYN包等多种探测方式,确定目标网络中哪些主机处于活动状态,类似Ping命令的功能,但更为强大和灵活。例如
nmap -sp 192.168.1.0/24
可以扫描该网段内的存活主机. - 端口扫描:能够扫描目标主机上的端口状态,识别端口为开放(Open)、关闭(Closed)、过滤(Filtered)、未过滤(Unfiltered)等状态 。默认情况下,Nmap会扫描1000个常用的端口,使用
-p
参数可指定扫描特定端口或端口范围,如nmap 192.168.1.1 -p 80,443
将扫描目标主机192.168.1.1的80和443端口. - 版本侦测:可以识别端口上运行的应用程序及其版本号。目前Nmap可以检测数百种应用协议,对于不识别的应用,会打印出其指纹信息,用户可将相关信息提交到社区以完善数据库.
- 操作系统侦测:通过对目标主机网络行为等特征的分析,推断出目标机的操作系统类型、版本编号及设备类型。Nmap拥有上千种操作系统或设备的指纹数据库,能够识别通用PC系统、路由器、交换机等多种设备类型.
- 防火墙/IDS规避:提供多种机制来规避防火墙和入侵检测系统的屏蔽和检查,便于秘密地探查目标机的状况,基本的规避方式包括分片、IP诱骗、IP伪装、MAC地址伪装等.
- NSE脚本引擎:这是Nmap最强大灵活的特性之一,用户可使用Lua编程语言编写NSE脚本,以增强主机发现、端口扫描、版本侦测、操作系统侦测等功能,实现更复杂的网络扫描和安全审计任务.
扫描方式
- TCP Connect()扫描:使用完整的三次握手建立连接来判断端口是否开放,这种方式扫描结果准确,但容易被目标系统记录,不够隐蔽.
- SYN扫描:也称为半开放扫描,只进行两次握手,发送SYN包后,若收到目标主机的SYN-ACK应答,则判定端口开放,并发送RST包中断连接,不建立完整的TCP连接,执行速度快且相对隐蔽.
- UDP扫描:发送空的UDP报头到每个目标端口,根据目标端口的响应情况判断端口是否开放,UDP扫描相对较慢,且结果不够准确,因为很多UDP服务对未授权访问不响应.
- Ping扫描:通过发送ICMP回应请求数据包和TCP应答数据包,确定主机的状态,适合检测指定网段内正在运行的主机数量,但无法获取端口等详细信息.
- 隐秘扫描:适用于Linux系统,向目标主机的端口发送TCP FIN包、XMAS Tree包或NULL包等特殊数据包,根据目标主机的响应来判断端口状态,具有较高的隐蔽性,但在某些情况下可能会被防火墙等设备检测到.
输出格式
- 交互式输出:在命令行运行Nmap时实时呈现和更新扫描结果,用户可在扫描过程中输入各种选项以便于监控.
- XML格式:可被XML工具进一步处理,也可使用XSLT将其转换为HTML报告,方便与其他工具集成或进行数据挖掘等后续操作.
- Grepable格式:适合使用grep、sed、awk等面向行处理的工具进行分析和提取特定信息.
- 普通文本格式:与在命令行运行Nmap时看到的输出类似,但将结果保存到文件中,便于查看和存档.
典型应用场景
- 网络安全评估:网络管理员可利用Nmap扫描内部网络,发现未经授权的服务器、开放的危险端口等安全隐患,评估网络系统的安全性.
- 漏洞扫描前的信息收集:在进行漏洞扫描之前,使用Nmap收集目标网络和主机的详细信息,如开放端口、运行的服务及版本等,为后续的漏洞扫描和分析提供基础数据,业界流行的漏洞扫描工具Nessus等支持导入Nmap的XML格式结果.
- 渗透测试:渗透测试人员借助Nmap的各种功能,深入了解目标网络和系统的情况,制定渗透测试策略,寻找可能的攻击入口.
- 网络设备管理:帮助网络管理员进行网络设备的清查和管理,了解网络中设备的类型、操作系统版本、IP地址等信息,便于进行网络规划和资源调配.