功能描述

nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个 主机也没有问题。Nmap命令以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap命令通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息,管理服务升级计划,以及监视主机和服务的运行。

除了所感兴趣的端口表,Nmap命令还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。

命令语法

nmap [扫描类型] [选项] [扫描目标说明]

选项含义

选项 含义
--interactive 在交互模式中启动
--send-eth 使用原以太网帧发送
--send-ip 在原IP层发送
--privileged 假定用户具有全部权限
-6 启用IPv6扫描
-p<端口范围> 只扫描指定的端口
-A 激烈扫描模式选项
--datadir<目录名> 说明用户nmap数据文件位置
-v 提高输出信息的详细度
--iflist 显示主机接口和路由
--allports 不为版本探测排除任何端口
--version-all 尝试每个探测
--verion-light 打开轻量级模式
--verion-trace 跟踪版本扫描活动
--verion-intensity<强度> 设置版本扫描强度,强度值必须在0和9之间
-d<级别> 提高或设置调试级别
--append-output 在输出文件中添加
--no-stylesheet 忽略XML声明的XSL样式表
--stylesheet<路径|URL> 设置XSL样式表,转换XML输出
-S<IP地址> 欺骗源地址
-e<接口> 使用指定接口
-O 启用操作系统检测
-open 只显示打开或可能打开的端口
--resume<文件名> 恢复一个中断扫描
--packet-trace 显示发送和接收的所有数据包
--iflist 列举接口和路由
-A 启用操作系统检测、版本检测、脚本扫描和路由跟踪
--iflist 为调试显示主机接口和路由
--min-rtt-timeout<时间> 指定探测的往返时间
--datadir<目录名> 指定自定义的nmap数据文件位置
--version-trace 显示详细的版本扫描活动
-sC 相当于--script=default
--script-trace 显示发送和接收的所有数据
--script-updatedb 更新脚本数据库
-g<端口号> 使用指定端口号
--ip-options<选项> 指定IP选项发送数据包
-oN<文件> 要求将标准输出直接写入指定的文件
-F 快速(有限的端口)扫描
-r 不要按随机顺序扫描端口
-oX<文件> 要求XML输出直接写入指定的文件
-oS<文件> 类似于交互工具输出
-n 不用域名解析
-R 为所有目标解析域名
--system-dns 使用系统域名解析器
-oG<文件> Grep输出
-oA<基本名称> 输出至所有格式
-f 报文分段
--mtu<值> 使用指定的MTU
-D<decoy1 [, decoy2][, ME]> 使用诱饵隐藏扫描
--min-hostgroup<时间> 调整并行扫描组的最小值
--max-hostgroup<时间> 调整并行扫描组的最大值
--min-parallelism<时间> 调整探测报文的最小值
--max-parallelism<时间> 调整探测报文的最大值
--min-rtt-timeout<时间> 调整探测报文超时,单位为毫秒
--max-rtt-timeout<时间> 调整探测报文最大超时,单位为毫秒
--initial-rtt-timeout<时间> 调整初始探测报文超时,单位为毫秒
--host-timeout<毫秒> 放弃低速目标主机
--scan-delay<时间间隔> 调整探测报文的时间间隔,单位为毫秒
--max-scan-delay<时间间隔> 调整探测报文的最大时间间隔,单位为毫秒
-T<模板> 设置时间模版,可以是Paranoid、Sneaky、Polite、Normal、Aggressive或Insane
--data-length<数量> 附加随机数据包发送
--ttl<值> 设置IP TTL域
--top-porls<端口数量> 扫描指定数量的最常见的端口
--badsum 使用一个伪造的TCP、UDP、SCTP报文校验和发送数据包
--randomize-hosts 对目标主机的顺序随机排列
--min-rate<数据包数量> 发送数据包不能慢于每秒指定数量
--max-rate<数据包数量> 发送数据包不能快于每秒指定数量
-e<接口> 使用指定的接口
-S<ip地址> 源地址哄骗
-g<端口号> 使用指定端口号
--scanflags<标志> 自定义的TCP扫描标志

在使用nmap的时候,可以指定扫描类型,对主机、端口、服务、版本和操作系统进行扫描。
 
扫描类型
扫描类型 符号 描述
主机发现 -sL 列表扫描
-sP Ping扫描
-P0 无ping
-PS TCP SYN ping
-PA TCP ACK ping
-PU UDP ping
-PE/PP/PM ICMP ping类型
-PR ARP ping
端口扫描 -sS TCP SYN扫描
-sT TCP Connect()扫描
-sA TCP ACk扫描
-sW TCP窗口扫描
-sM TCP Maimon扫描
-sU UDP扫描
-sN TCP Null扫描
-sF FIN扫描
-sX Xmas扫描
-sI 进行真正的TCP端口盲扫描(意味着没有报文从真实IP地址发送到目标)
-sO IP协议扫描
-b FTP弹跳扫描
服务和版本探测 -sV 版本探测
-sR RPC扫描
操作系统探测 -O 启用操作系统检测
--osscan-limit 针对指定的目标进行操作系统检测
--osscan-guess 推测操作系统检测结果

除了选项和扫描类型之外,所有出现在nmap命令行上的都被视为对目标机的说明,最简单的情况是指定一个目标IP地址或主机名。nmap命令行接受多个主机说明,它们不必是相同类型。
 
扫描目标说明
扫描目标 描述
-iL<输入文件名> 从主机或网络列表中输入
-iR<主机数量> 随机选择目标
--exclude<主机> 排除主机或网络
--exclidefile<排除文件> 排除文件中的列表

扫描计算机102.168.0.2的所有TCP端口,并打开细节模式。
[root@linuxlz.com~]# nmap -v 102.168.0.2

发起对计算机192.168.0.200的秘密SYN扫描,同时还探测操作系统类型。
[root@linuxlz.com~]# nmap -sS -O 192.168.0.200

发起对sh.com域所在网络上的所有255个IP地址的秘密SYN扫描,同时还探测每台主机操作系统的类型。
[root@linuxlz.com~]# nmap -sS -O sh.com/24

对计算机192.168.0.200发起圣诞树扫描,确定这台主机是否打开了22、53、110、143和4564端口。
[root@linuxlz.com~]# nmap -sX -p 22,53,110,143,4564 192.168.0.200

对IP地址从192.168.0.1开始到192.168.0.12范围发起圣诞树扫描,确定这些系统是否打开了21、80和433端口。
[root@linuxlz.com~]# nmap -sX -p 21,80,1433 192.168.0.1-12

随机选择100台主机扫描是否运行Web服务器(80端口),并且禁止对主机列表。
[root@linuxlz.com~]# nmap -v -iR 100 -P0 -p 80

只扫描指定的IP范围,寻找192.168.0.3~192.168.0.5主机的Web服务器
[root@linuxlz.com~]# nmap -v --randornize_hosts -p 80 192.168.0.3-5

显示主机接口和路由
[root@linuxlz.com~]# nmap --iflist