1. 概述
Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。
一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。
2. Nmap特点
主机探测:探测网络上的主机,例如列出响应TCP和ICMP请求、icmp请求、开放特别端口的主机。
- 端口扫描:探测目标主机所开放的端口。
- 版本检测:探测目标主机的网络服务,判断其服务名称及版本号。
- 系统检测:探测目标主机的操作系统及网络设备的硬件特性。
3. Nmap用途
- 通过对设备或者防火墙的探测来审计它的安全性。
- 测目标主机所开放的端口。
- 网络存储,网络映射,维护和资产管理。
- 通过识别新的服务器审计网络的安全性。
- 探测网络上的主机。
4. Nmap安装
4.1 环境准备
- 操作系统:centos
- 环境工具:Nmap7.40
- 环境依赖 gcc编译器
4.2. 环境检测
靶机IP:10.20.65.175
主机IP:10.20.65.176
用户名:root
密码:password
如果在线下本地环境中安装Nmap时,先安装gcc编译器,否则编译时会出现错误,centos安装命令:yum install gcc-c++,ubuntu安装命令:apt-get build-depgcc
使用ls命令查看nmap是否在当前目录下,如下图:
使用解压命令tar -zxvf将nmap-7.40.tgz包进行解压,如下图:
解压成功之后,进入到nmap目录,使用命令cd nmap-7.40,如下图:
对nmap进行安装,使用./configure命令进行检测,./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,如下图:
4.3. 源码编译
使用make命令进行nmap源代码编译,生成目标文件,可执行文件。当 make 命令第一次执行时,它扫描 Makefile 找到目标以及其依赖。如果这些依赖自身也是目标,继续为这些依赖扫描 Makefile 建立其依赖关系,然后编译它们,如下图:
4.4. 源码安装
编译完成之后,使用make install进行安装,make install命令是将生成后的目标可执行文件进行安装,如下图:
当安装结束会提示NMAP SUCCESSFULLY INSTALLED 表示nmap安装成功,如下图:
2.4. Nmap验证
使用nmap –v命令进行验证nmap是否安装成功,运行nmap -v会返回nmap的版本及相关信息,如下图:
使用nmap –h 可以看到nmap的相关帮助信息,其中列出了nmap的所有命令,使用这些命令可以进行主机探测,端口扫描等操作,如下图:
5. Nmap语法
5.1. 主机发现
- -sL (列表扫描):列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机,不发送任何报文到目标主机。
- -sP (Ping扫描):该选项告诉Nmap仅仅进行ping扫描 (主机发现),然后打印出对扫描做出响应的那些主机。
- -A (复合参数)同时探测操作系统指纹和版本检测
- -P0/Pn (无ping):该选项完全跳过Nmap主机发现阶段,通常Nmap在进行高强度的扫描时用它确定正在运行的机器。
- -sn (Ping Scan) 只进行主机发现,不进行端口扫描。
- -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
- -PE/PP/PM: 使用ICMP echo,timestamp,and netmask 请求包发现主机。
- -PU (portlist) (UDP Ping):使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
- -n (不用域名解析):-n表示不进行DNS解析;-R表示总是进行DNS解析。
- --system-dns (使用系统域名解析器):指定使用系统的DNS服务器。
- --traceroute: 追踪每个路由节点。
5.2. 端口状态
- Open (开放的):应用程序正在该端口接收TCP 连接或者UDP报文。
- Closed (关闭的):关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。
- Filtered (被过滤的):由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。
- Unfiltered (未被过滤的):未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。
- open|filtered(开放或者被过滤的):当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。
- closed|filtered(关闭或者被过滤的):该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。
5.3. 端口扫描
- -sS/sT/sA/sW/sM:指定使用TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。
- -sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。
- -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。
- -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
- -sO: 使用IP protocol 扫描确定目标机支持的协议类型。
- -p
: 只扫描指定的端口。 - -F: 快速 (有限的端口) 扫描。
- -r:不要按随机顺序扫描端口。
- --scanflags: 定制TCP包的flags。
5.4. 服务和版本探测
- -sV (版本探测):打开版本探测,也可以用-A同时打开操作系统探测和版本探测。
- --allports:不为版本探测排除任何端口。
- --version-intensity
:设置版本扫描强度。 - --version-light:打开轻量级模式。
5.5. 操作系统探测
- -O:启用操作系统检测,也可以使用-A来同时启用操作系统检测和版本检测。
- --osscan-limit: 针对指定的目标进行操作系统检测,如果发现一个打开和关闭的TCP端口时,操作系统检测会更有效。
- --osscan-guess;--fuzzy:推测操作系统检测结果,当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配。
5.6. 状态输出和保存
- -v :详细输出扫描状态
- -oN :标准输出,将标准的输出直接写入指定文件。
- -oX :XML输出,以XML输出格式直接写入指定文件。
- -oA :所有格式输出,将所有格式以指定文件名进行输出。
6. Nmap扫描
6.1. 主机扫描
nmap –sL 192.168.90.100-150 //列表扫描
支持IP列表和C段扫描,范围可自定义1/24扫描整个C段。
nmap -sP 192.168.90.100-150 //ping扫描
nmap -sP 192.168.90.0/24 //寻找网络内所有在线主机
-sP方式是先对主机进行ping测试,Ping 指定范围内的 IP 地址。
nmap -P0 192.168.90.213 //无ping扫描
-P0方式是无需ping直接对目标进行扫描。
nmap –sn 192.168.90.100-110 //只进行主机扫描
–sn方式只对主机进行扫描获取主机名,不扫描其端口。
6.2. 端口扫描
nmap –sS 192.168.90.213 //TCP sys方式扫描,快速和隐蔽的扫描。
使用-sS方式可以快速和隐蔽的扫描,不易被主机发现。
nmap –sU 192.168.90.213 //使用UDP扫描方式
nmap –sN 192.168.90.218 //探测对方TCP端口状态
nmap -p 80 192.168.90.213 //指定端口扫描,如多个端口中间用,逗号分隔
nmap –F 192.168.90.213 //快速扫描
6.3. 服务和版本探测
nmap -sV 192.168.90.213 //版本探测
使用-sV可以探测出主机的端口服务类型,具体版本等
6.4. 操作系统探测
nmap –O 192.168.90.213 //操作系统扫描
-O方式是扫描主机的操作系统,获取主机具体的操作系统及版本。
6.5. 综合扫描方式
nmap -sS -P0 -sV -O 192.168.90.213
-sS TCP SYN 扫描 (又称半开放,或隐身扫描)
-P0 允许你关闭 ICMP pings,不进行主机发现,直接扫描
-sV 打开系统版本检测
-O 尝试识别远程操作系统
进行隐蔽扫描,探测主机的端口安装服务及服务具体版本,探测出主机所使用的操作系统版本。
nmap -sS -P0 -A -v 192.168.90.213
使用隐秘扫描模式,不进行主机发现,直接进行扫描,使用复合参数扫描模式对目标主机进行探测。
6.6. 状态输出及保存
nmap -sS -v 192.168.90.213 -oN /root/text
输出正在扫描的状态,并将扫描结果以普通文本格式保存到指定的文件中。
使用linux命令查看文件中的内容 cat /root/text