Skip to content

Nmap 是一个开源的网络连接端扫描软件,用来扫描计算机开放的网络连接端,确定哪些服务运行在哪些连接端,并推断计算机运行哪个操作系统。另外,它也用于评估网络系统安全。

https://nmap.org/

Zenmap 是 Nmap 的图形化界面。

1. 探测主机信息

Nmap 支持多种扫描方式,包括 TCP Syn、TCP Connect、 TCP ACK、TCP FIN/Xmas/NULL、UDP 等。

参数 说明
-sT TCP connect()扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息
-sS 半开扫描,很少有系统能够把它记入系统日志。不过,需要 root 权限
-sF -sN 秘密 FIN 数据包扫描、Xmas Tree、Null 扫描模式
-sP ping 扫描,Nmap 在扫描端口时,默认都会使用 ping 扫描,只有主机存活,Nmap 才会继续扫描
-sU UDP 扫描,但 UDP 扫描是不可靠的
-sA 这项高级的扫描方法通常用来穿过防火墙的规则集
-sV 探测端口服务版本
-P0 扫描之前不需要用 ping 命令,有些防火墙禁止用 ping 命令。可以使用此选项进行扫描
-v 显示扫描过程,推荐使用
-h 帮助选项,是最清楚的帮助文档
-p 指定端口,如“1~65536、1433、135、22、80”等
-O 启用远程操作系统检测,存在误报
-A 全面系统检测、启用脚本检测、扫描等
-oN/-oX/-oG 将报告写入文件,分别是正常、XML、grepable 三种格式
-T4 针对 TCP 端口禁止动态扫描延迟超过 10ms
-iL 读取主机列表,例如,“-iL C:\ip.txt”

案例一:扫描指定 IP 所开放的端口

sudo nmap -sS -p 1-65535 -v 指定IP

案例二:网段存活主机发现

nmap -sP 指定IP/24

对目标域名解析 IP 所在的 C 段(/24 -- 子网掩码 255.255.255.0)执行 Ping 扫描,快速探测该网段内的存活主机,且不进行端口扫描

  • 在较新的 Nmap 版本中,官方建议使用 -sn 来代替 -sP(意思更明确:Ping Scan, No Port Scan),虽然 -sP 为了兼容性依然能用,但 -sn 是更规范的写法。

案例三:指定端口扫描

nmap -p 80,1433,22,1521 指定IP

案例四:探测主机操作系统

sudo nmap -O www.xxxxx.com

案例五:全面的系统探测

nmap -v -A www.xxxxx.com

  • nmap 默认扫描主机 1000 个高危端口,若需要全面检测端口,则需加入 -p 1-65535 或 -p-

案例六:穿透防火墙进行扫描

nmap -Pn -A 指定IP

跳过主机存活检测(Ping)(一些防火墙禁用 ping),强制对目标主机执行包含操作系统探测、服务版本识别、脚本扫描及路由追踪的强力综合扫描。


2. Nmap 脚本引擎

Nmap 不仅用于端口扫描、服务检测,还有强大的脚本引擎 -- Nmap Script。

nmap 安装目录下存在 scripts 文件夹,其中有许多以 .nse 为后缀名的文本文件,即 nmap 自带的脚本引擎。也可以自己编写 Nmap script。

  • Nmap Script 可以实现漏洞扫描、漏洞利用、目录扫描等实用功能。

  • 使用脚本引擎只需添加命令 --script=脚本名称

案例一:扫描 Web 敏感目录

nmap -p 80 --script=http-enum.nse 指定IP

  • 调用 Nmap 脚本引擎(NSE)中的 http-enum 脚本。

  • 脚本原理: 这个脚本内部内置了一个包含大量常见目录(如 /admin, /login, /test, /backup)和指纹的字典。它会向服务器发送 HTTP 请求,尝试访问这些路径,根据返回结果(如 200 OK 或 401 Unauthorized)来判断这些目录是否存在。

  • Nmap 版的“目录扫描器”(轻量级的 Dirbuster 或 Gobuster)。

案例二:扫描 SqlInjection

扫描 SQL 注射漏洞,用到 http-sql-injection.nse 脚本文件。

nmap -p 80 --script=http-sql-injection.nse 指定IP

案例三:使用所有的脚本进行扫描

nmap --script all 指定IP

  • 此命令非常耗时,最好把记录保存到文档中。

案例四:使用通配符扫描

nmap --script "http-*" 指定IP 表示使用所有以 http- 开头的脚本扫描。脚本参数必须用双引号引起来,保护 Shell 的通配符。

Nmap 还可以用来检测主机漏洞、密码暴力破解等,详见官网。