TARGET SPECIFICATION(指定扫描的目标):
# 可以传递主机名、IP地址、网络等。例如:scanme.nmap.org, microsoft.com/24, 192.168.0.1;10.0.0-255.1-254
-iL <inputfilename> # 从文件中读取扫描目标。
-iR <num hosts> # 选择随机目标。
--exclude <host1[,host2][,host3],...> # 排除主机/网络。
--excludefile <exclude_file> # 排除文件中的目标。
HOST DISCOVERY(主机发现):
-sL # 简单地列出要扫描的目标(仅列出指定目标不进行扫描)。
-sn # 只进行主机发现,不进行端口扫描。
-Pn # (将所有主机视为存活) -- 跳过主机发现。
-PS/PA/PU/PY[portlist] # 使用 TCP SYN/ACK, UDP or SCTP 扫描指定端口状态来主机发现。
-PE/PP/PM # 使用 ICMP echo, timestamp(时间戳), and netmask request(子网掩码请求)等探针发现目标。
-PO[protocol list] # 发送IP数据包,在其IP头中设置了指定的协议号。如果不指定协议,缺省情况下则发送多个ICMP(协议1)、IGMP(协议2)和IP-in-IP(协议4)的IP报文。
-n # 不做DNS解析。
-R # 为所有目标解析域名。
--dns-servers <serv1[,serv2],...> # 指定自定义DNS服务器。
--system-dns # 使用操作系统的DNS解析器。
--traceroute # 跟踪每台主机的跳路径(跟踪路由)。
SCAN TECHNIQUES(端口扫描):
-sS/sT/sA/sW/sM # 使用 TCP SYN/Connect()/ACK/Window/Maimon 扫描。
-sU # 使用 UDP 扫描。
-sN/sF/sX # 使用 TCP Null, FIN, Xmas 扫描。
--scanflags <flags> # 自定义TCP扫描标志(URG,ACK,PSH,RST,SYN,FIN)。
-sI <zombie host[:probeport]> # Idle scan(使用指定的肉鸡对目标进行Idle扫描)。
-sY/sZ # 使用 SCTP INIT/COOKIE-ECHO 扫描。
-sO # 扫描目标主机支持哪些IP协议。
-b <FTP relay host> # FTP 跳转扫描(使用ftp代理去扫描目标,隐蔽性好)。
PORT SPECIFICATION AND SCAN ORDER(端口扫描顺序):
-p <port ranges> # 只扫描指定端口。
# 例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <port ranges> # 排除指定端口的扫描。
-F # (快速模式) - 扫描比默认扫描更少的端口。
-r # 按顺序扫描端口-不要随机。
--top-ports <number> # 扫描 <number> 个最常用端口。
--port-ratio <ratio> # 用大于 <ratio> 的比率扫描nmap-services文件中的所有端口。<ratio>必须介于0.0和1.0之间。
SERVICE/VERSION DETECTION (服务/版本检测):
-sV # 探测打开的端口以确定服务/版本信息。
--version-intensity <level> # 设置从 0-9 的探测强度,强度越高服务越准,时间也更长,默认为7。
--version-light # 轻量级模式 --version-intensity 2的方便的别名(intensity 2 轻量级)。
--version-all # 保证对每个端口尝试每个探测报文 --version-intensity 9的别名(intensity 9 尝试每个探测报文)。
--version-trace # 显示详细的版本扫描活动(用于调试)。
SCRIPT SCAN(脚本扫描):
-sC # 相当于 --script=default 使用默认脚本扫描。
--script=<Lua scripts> # 指定扫描使用的脚本。<Lua scripts> 是一个逗号分隔的列表目录, 脚本文件或脚本类别。
--script-args=<n1=v1,[n2=v2,...]> # 为脚本提供参数。
--script-args-file=filename # 在文件中提供NSE脚本参数。
--script-trace # 显示所有发送和接收的数据。
--script-updatedb # 更新脚本数据库。
--script-help=<Lua scripts> # 显示关于脚本的帮助。<Lua scripts> 是一个以逗号分隔的脚本文件列表或脚本类别。
OS DETECTION(操作系统检测):
-O # 启用操作系统检测。
--osscan-limit # 针对指定的目标进行操作系统检测。
--osscan-guess; --fuzzy # 推测操作系统检测结果。
TIMING AND PERFORMANCE(时间和性能):
# 耗时<time>的选项以秒为单位,或者附加'ms'(毫秒),'s'(秒),'m'(分钟),或'h'(小时)的值(例如30m)。
# 模板名称有paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)。
# 前两种模式用于IDS躲避,Polite模式降低了扫描速度以使用更少的带宽和目标主机资源。
# 默认模式为Normal,因此 -T3 实际上是未做任何优化。
# Aggressive模式假设用户具有合适及可靠的网络从而加速扫描。
# Insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。
-T<0-5> # 设置定时模板(paranoid (0)、sneaky (1)、polite (2)、normal(3)、aggressive (4)、insane (5))。
--min-hostgroup <numhosts> # 指定并行扫描组中最小主机数。
--max-hostgroup <numhosts> # 指定并行扫描组中最大主机数。
--min-parallelism <numprobes> # 指定探测报文的最小并行度。
--max-parallelism <numprobes> # 指定探测报文的最大并行度。
--min-rtt-timeout <time> # 指定探测报文往返最小超时时间(rtt: Round-Trip Time),设置超时时间的下限。
--max-rtt-timeout <time> # 指定探测报文往返最大超时时间,设置超时时间的上限。
--initial-rtt-timeout <time> # 指定探测报文往返初始超时时间。
--max-retries <tries> # 端口扫描探针重传的最大次数。
--host-timeout <time> # 当主机扫描时间超过 <time> 则放弃扫描该主机。
--scan-delay / --max-scan-delay <time> # 调整探测报文的时间间隔, 控制针对一个主机发送探测报文的等待时间(毫秒)。
# --scan-delay 的另一个用途是躲闭基于阈值的入侵检测系统(IDS)和预防系统(IPS)。
--min-rate <number> # 每秒发送数据包的个数不低于 <number>。
--max-rate <number> # 每秒发送数据包的个数不超过 <number>。
FIREWALL/IDS EVASION AND SPOOFING(防火墙/IDS躲避和哄骗):
-f; --mtu <value(必须是8的倍数)> # 将TCP头分段在几个包中,使得包过滤器、 IDS以及其它工具的检测更加困难。
-D <decoy1,decoy2[,ME],...> # 用一组诱饵IP来掩盖扫描者的IP(诱饵ip中会参杂扫描者的IP)。
# 例1: nmap -D RND:5 -n 192.168.1.1 随机选5个诱饵IP来掩盖扫描。
# 例2: nmap -D 1.1.1.1,2.2.2.2,3.3.3.3 -n 192.168.1.1 指定诱饵IP来掩盖扫描。
-S <IP_Address> # 伪造源地址。
-e <iface> # 使用指定网卡接口。
-g/--source-port <portnum> # 使用指定的端口号进行源端口哄骗。
--proxies <url1,[url2],...> # 通过HTTP/SOCKS4代理进行中继连接。
--data <hex string> # 向发送的数据包中附加自定义二进制数据。
--data-string <string> # 向发送的数据包附加自定义ASCII字符串。
--data-length <num> # 在发送的数据包中附加<num>字节的随机数据。
# "R" -> 记录路由 (9 slots availble)
# "T" -> 记录互联网时间戳 (9 slots)
# "U" -> 记录时间戳和IP地址 (4 slots)
# "L <hop_ip> ..." -> 松散源路由 (8 slots)
# "S <hop_ip> ..." -> 严格源路由 (8 slots)
--ip-options <S|R [route]|L [route]|T|U ... >; --ip-options <hex string> # 发送带有指定ip选项的报文。
--ttl <value> # 发送数据包中的IPv4存活时间字段(TTL)设置为指定的值。
--spoof-mac <MAC address, prefix, or vendor name> # 伪造MAC地址。
--badsum # 对发送到目标主机的数据包使用无效的TCP、UDP或SCTP校验和。几乎所有的主机IP栈都正确地丢弃了这些数据包,因此接收到的任何响应都可能来自防火墙或IDS。
OUTPUT(输出):
-oN/-oX/-oS/-oG <file> # 扫描的输出使用 normal(普通文本), XML, sCRiPt KiDDi3 和 Grepable 格式写入指定文件中。
-oA <basename> # 同时输出三种主要格式(normal, XML, Grepable)的文件, 这三种文件分别是<basename>.nmap, <basename>.xml, <basename>.gnmap。
-v # 提高输出信息的详细度, 可使用-vv获得更多的详细信息,也可直接给出详细等级来获得详细信息: -v3。
-d # 提高调试级别(使用-dd获得更高调试级别), 最高调试级别: -d9。
--reason # 显示将每个端口设置为特定状态的原因以及每个主机处于启动或关闭状态的原因。
--open # 扫描的结果只显示打开(或可能打开)的端口。
--packet-trace # 显示所有在扫描时发送和接收的数据包。
--iflist # 列出Nmap在当前主机的接口列表和系统路由。
--append-output # 输出追加到指定文件中,而不是覆写。
# 例: nmap -T4 -sn -n 192.168.1.1 --append-output -oN 1.nmap
--resume <filename> # 恢复中止的扫描(Ctrl+C 中止)。
# 例: nmap -T4 -n 192.168.1.1 192.168.1.2 -oN abc.nmap
# Ctrl+C
# nmap --resume abc.nmap
# 运行时交互:
# v / V 增加/减少详细级别
# d / D 增加/降低调试级别
# p / P 打开/关闭数据包跟踪
# ? 打印运行时交互帮助屏幕
# 其他按键 打印状态
--noninteractive # 运行时禁用键盘交互。
--stylesheet <path/URL> # XSL样式表将XML输出转换为HTML。
--webxml # 从Nmap.org引用更多可移植的XML样式表。
--no-stylesheet # 防止XSL样式表与XML输出相关联, 省略XML中的XSL样式表声明。
Miscellaneous Options(其他选项):
-6 # 启用IPv6扫描
-A # 开启操作系统检测、版本检测、脚本扫描和traceroute功能(全面扫描,由于使用默认设置的脚本扫描所以易被发现)。
--datadir <dirname> # 指定自定义Nmap数据文件位置。
--servicedb <services file> # 指定自定义服务文件。
--versiondb <service probes file> # 指定自定义服务探测文件。
--send-eth # 使用原始以太网发送, 要求Nmap在原始以太网(数据链路)层而不是更高的IP(网络)层发送数据包。
--send-ip # 在原始IP级别发送, 要求Nmap通过原始IP套接字发送数据包,而不是发送较低级别的以太网帧。
--privileged # 当用户不是根用户或管理员的情况下依旧执行需具有完全特权才能执行的操作。
--unprivileged # 让拥有原始套接字权限的用户缺乏原始套接字权限。
-V; --version # 显示版本号。
-h; --help # 打印带有最常用命令标志的简短帮助屏幕, 不带任何参数地运行Nmap也会做同样的事情。
参考手册(中文版):https://nmap.org/man/zh/index.html
参考手册(英文版):https://nmap.org/book/man.html