文章目录
Linux Nmap 命令解析简介Nmap 的核心功能主机发现端口扫描服务版本检测OS 指纹识别(操作系统指纹识别)脚本扫描 安装 NmapNmap 命令结构Nmap 命令文档英文中文 主机发现Ping 扫描(`nmap -sn`)ARP 扫描(`nmap -PR`)关于`nmap -PR`(ARP Ping Scan)和`nmap -Pn`(No Ping Scan)`-PR` ARP Ping Scan`-Pn` No Ping Scan示例总结 端口扫描常见的端口扫描类型(`-sT、-sS、-sU、-sA、-sN、-sP`)示例:SYN 扫描(`nmap -sS`) 服务版本检测(`nmap -sV`)OS 指纹识别(操作系统识别)(`nmap -O`)使用 Nmap 脚本引擎 (NSE)(`nmap --script=xxx`)输出和报告文本输出XML 输出Grepable 输出 高级技术防火墙绕过时间和性能脚本参数 安全性和合法性结语
Linux Nmap 命令解析
简介
Nmap(Network Mapper)是一款开源的网络探测和安全审核工具。它设计用于快速扫描大型网络,但也适合对单个主机进行各种检查。Nmap 由 Gordon Lyon(又名 Fyodor)编写,并首次发布于 1997 年。
Nmap 的核心功能
主机发现
主机发现是确定哪些主机在网络上活跃并响应的过程。
端口扫描
端口扫描用于发现目标主机上开放的 TCP 和 UDP 端口。
服务版本检测
服务版本检测可以确定端口上运行的应用程序及其版本信息。
OS 指纹识别(操作系统指纹识别)
通过发送特定的数据包序列并分析响应,Nmap 能够推断出目标系统可能运行的操作系统。
操作系统指纹识别,具体参考:nmap os detection原理及golang实现
脚本扫描
Nmap 提供了一个强大的脚本引擎(NSE),可以使用特定的脚本来发现额外的网络信息,或者检测和利用漏洞。
安装 Nmap
Nmap 在大多数 Linux 发行版中都可以通过包管理器轻松安装:
# Debian/Ubuntu 系统:sudo apt-get install nmap# Red Hat/CentOS 系统:sudo yum install nmap# Fedora 系统:sudo dnf install nmap
Nmap 命令结构
基本命令格式如下:
nmap [扫描类型...] [选项] {目标规范}
其中,“扫描类型”定义了将执行的扫描方法,“选项”可用于进一步定制扫描,而“目标规范”指定了要扫描的目标。
Nmap 命令文档
nmap -h
英文
Nmap 7.80 ( https://nmap.org )Usage: nmap [Scan Type(s)] [Options] {target specification}TARGET SPECIFICATION: Can pass hostnames, IP addresses, networks, etc. Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254 -iL <inputfilename>: Input from list of hosts/networks -iR <num hosts>: Choose random targets --exclude <host1[,host2][,host3],...>: Exclude hosts/networks --excludefile <exclude_file>: Exclude list from fileHOST DISCOVERY: -sL: List Scan - simply list targets to scan -sn: Ping Scan - disable port scan -Pn: Treat all hosts as online -- skip host discovery -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes -PO[protocol list]: IP Protocol Ping -n/-R: Never do DNS resolution/Always resolve [default: sometimes] --dns-servers <serv1[,serv2],...>: Specify custom DNS servers --system-dns: Use OS's DNS resolver --traceroute: Trace hop path to each hostSCAN TECHNIQUES: -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans -sU: UDP Scan -sN/sF/sX: TCP Null, FIN, and Xmas scans --scanflags <flags>: Customize TCP scan flags -sI <zombie host[:probeport]>: Idle scan -sY/sZ: SCTP INIT/COOKIE-ECHO scans -sO: IP protocol scan -b <FTP relay host>: FTP bounce scanPORT SPECIFICATION AND SCAN ORDER: -p <port ranges>: Only scan specified ports Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9 --exclude-ports <port ranges>: Exclude the specified ports from scanning -F: Fast mode - Scan fewer ports than the default scan -r: Scan ports consecutively - don't randomize --top-ports <number>: Scan <number> most common ports --port-ratio <ratio>: Scan ports more common than <ratio>SERVICE/VERSION DETECTION: -sV: Probe open ports to determine service/version info --version-intensity <level>: Set from 0 (light) to 9 (try all probes) --version-light: Limit to most likely probes (intensity 2) --version-all: Try every single probe (intensity 9) --version-trace: Show detailed version scan activity (for debugging)SCRIPT SCAN: -sC: equivalent to --script=default --script=<Lua scripts>: <Lua scripts> is a comma separated list of directories, script-files or script-categories --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts --script-args-file=filename: provide NSE script args in a file --script-trace: Show all data sent and received --script-updatedb: Update the script database. --script-help=<Lua scripts>: Show help about scripts. <Lua scripts> is a comma-separated list of script-files or script-categories.OS DETECTION: -O: Enable OS detection --osscan-limit: Limit OS detection to promising targets --osscan-guess: Guess OS more aggressivelyTIMING AND PERFORMANCE: Options which take <time> are in seconds, or append 'ms' (milliseconds), 's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m). -T<0-5>: Set timing template (higher is faster) --min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes --min-parallelism/max-parallelism <numprobes>: Probe parallelization --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies probe round trip time. --max-retries <tries>: Caps number of port scan probe retransmissions. --host-timeout <time>: Give up on target after this long --scan-delay/--max-scan-delay <time>: Adjust delay between probes --min-rate <number>: Send packets no slower than <number> per second --max-rate <number>: Send packets no faster than <number> per secondFIREWALL/IDS EVASION AND SPOOFING: -f; --mtu <val>: fragment packets (optionally w/given MTU) -D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys -S <IP_Address>: Spoof source address -e <iface>: Use specified interface -g/--source-port <portnum>: Use given port number --proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies --data <hex string>: Append a custom payload to sent packets --data-string <string>: Append a custom ASCII string to sent packets --data-length <num>: Append random data to sent packets --ip-options <options>: Send packets with specified ip options --ttl <val>: Set IP time-to-live field --spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address --badsum: Send packets with a bogus TCP/UDP/SCTP checksumOUTPUT: -oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3, and Grepable format, respectively, to the given filename. -oA <basename>: Output in the three major formats at once -v: Increase verbosity level (use -vv or more for greater effect) -d: Increase debugging level (use -dd or more for greater effect) --reason: Display the reason a port is in a particular state --open: Only show open (or possibly open) ports --packet-trace: Show all packets sent and received --iflist: Print host interfaces and routes (for debugging) --append-output: Append to rather than clobber specified output files --resume <filename>: Resume an aborted scan --stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML --webxml: Reference stylesheet from Nmap.Org for more portable XML --no-stylesheet: Prevent associating of XSL stylesheet w/XML outputMISC: -6: Enable IPv6 scanning -A: Enable OS detection, version detection, script scanning, and traceroute --datadir <dirname>: Specify custom Nmap data file location --send-eth/--send-ip: Send using raw ethernet frames or IP packets --privileged: Assume that the user is fully privileged --unprivileged: Assume the user lacks raw socket privileges -V: Print version number -h: Print this help summary page.EXAMPLES: nmap -v -A scanme.nmap.org nmap -v -sn 192.168.0.0/16 10.0.0.0/8 nmap -v -iR 10000 -Pn -p 80SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES
中文
Nmap 7.80 ( https://nmap.org )用法:nmap [扫描类型] [选项] {目标指定}目标指定: 可以传递主机名、IP地址、网络等。 例如:scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254 -iL <输入文件名>:从主机/网络列表中输入 -iR <主机数>:随机选择目标 --exclude <主机1[,主机2][,主机3],...>:排除主机/网络 --excludefile <排除文件>:从文件中排除列表主机发现: -sL:列表扫描 - 仅列出要扫描的目标 -sn:Ping扫描 - 禁用端口扫描 -Pn:将所有主机视为在线 - 跳过主机发现 -PS/PA/PU/PY[portlist]:对给定端口进行TCP SYN/ACK, UDP或SCTP发现 -PE/PP/PM:ICMP回声请求,时间戳和网络掩码请求探测 -PO[协议列表]:IP协议Ping -n/-R:从不进行DNS解析/总是解析[默认:有时] --dns-servers <服务器1[,服务器2],...>:指定自定义DNS服务器 --system-dns:使用操作系统的DNS解析器 --traceroute:追踪到每个主机的跳点路径扫描技术: -sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon扫描 -sU:UDP扫描 -sN/sF/sX:TCP Null, FIN, 和 Xmas扫描 --scanflags <标志>:自定义TCP扫描标志 -sI <僵尸主机[:探测端口]>:空闲扫描 -sY/sZ:SCTP INIT/COOKIE-ECHO扫描 -sO:IP协议扫描 -b <FTP中继主机>:FTP弹跳扫描端口规范和扫描顺序: -p <端口范围>:仅扫描指定端口 例如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9 --exclude-ports <端口范围>:从扫描中排除指定端口 -F:快速模式 - 扫描的端口少于默认扫描 -r:连续扫描端口 - 不随机化 --top-ports <数字>:扫描最常见的<数字>个端口 --port-ratio <比率>:扫描比<比率>更常见的端口服务/版本检测: -sV:探测开放端口以确定服务/版本信息 --version-intensity <级别>:从0(轻量)到9(尝试所有探针)设置 --version-light:限制最可能的探针(强度2) --version-all:尝试每一个探针(强度9) --version-trace:显示详细的版本扫描活动(用于调试)脚本扫描: -sC:相当于 --script=default --script=<Lua脚本>:<Lua脚本>是一个以逗号分隔的目录、脚本文件或脚本类别列表 --script-args=<n1=v1,[n2=v2,...]>:向脚本提供参数 --script-args-file=filename:在文件中提供NSE脚本参数 --script-trace:显示发送和接收的所有数据 --script-updatedb:更新脚本数据库。 --script-help=<Lua脚本>:显示关于脚本的帮助。 <Lua脚本>是一个以逗号分隔的脚本文件或脚本类别列表。操作系统检测: -O:启用操作系统检测 --osscan-limit:将操作系统检测限制为有希望的目标 --osscan-guess:更积极地猜测操作系统计时和性能: 接受<time>的选项单位是秒,或者在数值后面添加'ms'(毫秒)、's'(秒)、'm'(分钟)或'h'(小时),例如30m。 -T<0-5>:设置计时模板(数字越大速度越快) --min-hostgroup/max-hostgroup <size>:并行主机扫描组的大小 --min-parallelism/max-parallelism <numprobes>:探针并行化 --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>:指定探针往返时间。 --max-retries <tries>:限制端口扫描探针重传的次数。 --host-timeout <time>:在这段时间后放弃目标主机 --scan-delay/--max-scan-delay <time>:调整探针之间的延迟 --min-rate <number>:发送包的速度不低于每秒<number>个 --max-rate <number>:发送包的速度不高于每秒<number>个防火墙/IDS规避与伪装: -f; --mtu <val>:分片数据包(可选择给定MTU) -D <decoy1,decoy2[,ME],...>:使用诱饵隐藏扫描 -S <IP_Address>:伪造源地址 -e <iface>:使用指定接口 -g/--source-port <portnum>:使用指定端口号 --proxies <url1,[url2],...>:通过HTTP/SOCKS4代理转发连接 --data <hex string>:向发送的数据包附加自定义有效载荷 --data-string <string>:向发送的数据包附加自定义ASCII字符串 --data-length <num>:向发送的数据包附加随机数据 --ip-options <options>:发送带有指定IP选项的数据包 --ttl <val>:设置IP生存时间字段 --spoof-mac <mac address/prefix/vendor name>:伪造您的MAC地址 --badsum:发送带有错误的TCP/UDP/SCTP校验和的数据包输出: -oN/-oX/-oS/-oG <file>:分别以普通、XML、s|<rIpt kIddi3、可搜索格式输出扫描结果到指定文件名。 -oA <basename>:同时以三种主要格式输出 -v:提高详细等级(使用-vv或更多获得更大效果) -d:提高调试等级(使用-dd或更多获得更大效果) --reason:显示端口处于特定状态的原因 --open:仅显示开放的(或可能开放的)端口 --packet-trace:显示所有发送和接收的数据包 --iflist:打印主机接口和路由(用于调试) --append-output:附加到指定的输出文件而不是覆盖 --resume <filename>:恢复中断的扫描 --stylesheet <path/URL>:XSL样式表将XML输出转换为HTML --webxml:引用Nmap.Org的样式表以获得更便携的XML --no-stylesheet:阻止将XSL样式表与XML输出关联杂项: -6:启用IPv6扫描 -A:启用操作系统检测、版本检测、脚本扫描和路由追踪 --datadir <dirname>:指定自定义Nmap数据文件位置 --send-eth/--send-ip:使用原始以太网帧或IP数据包发送 --privileged:假设用户具有完全权限 --unprivileged:假设用户缺乏原始套接字权限 -V:打印版本号 -h:打印此帮助摘要页面。示例: nmap -v -A scanme.nmap.org nmap -v -sn 192.168.0.0/16 10.0.0.0/8 nmap -v -iR 10000 -Pn -p 80查看手册页(https://nmap.org/book/man.html)了解更多选项和示例
主机发现
Ping 扫描(nmap -sn
)
Ping 扫描用于确定哪些主机正在响应 ICMP 请求,示例如下:
nmap -sn 192.168.1.0/24
这将对 192.168.1.x 的所有地址执行 Ping 扫描,其中 x 是从 0 到 255 的任意值。
也可以对单个地址扫描:
nmap -sn 192.168.1.116
ARP 扫描(nmap -PR
)
局域网中,ARP(地址解析协议)扫描通常比标准 ICMP ping 更有效,命令如下:
nmap -PR 192.168.1.0/24
对单个地址扫描:
nmap -PR 192.168.1.116
关于nmap -PR
(ARP Ping Scan)和nmap -Pn
(No Ping Scan)
在Nmap中,-PR
和 -Pn
是两个不同的扫描选项,它们用于不同的场景:
-PR
ARP Ping Scan
-PR
选项告诉Nmap使用ARP请求来确定本地网络上的主机是否活跃。这种方法非常适合局域网内部,因为ARP请求无法跨过路由器,所以它只对本地子网有效。当想确认本地网络(同一广播域)中某个IP地址是否被占用时,使用-PR
是合适的。
如果尝试对一个响应ARP但是不响应ICMP的设备进行-PR
扫描,且结果显示"Host seems down",可能是因为该设备设置了防火墙规则来忽略或阻止ARP请求,或者Nmap没有正确地发送或接收ARP回应。这种情况下,可能需要检查你的网络设置或该设备的安全配置。
-Pn
No Ping Scan
-Pn
选项告诉Nmap跳过发现阶段,直接执行端口扫描等后续操作。它假定目标主机是活跃的,不会先检测主机是否在线。这个选项适用于目标主机可能屏蔽了所有类型的ping探针(包括ICMP、ARP、TCP和UDP)的情况。
当使用-Pn
选项时,即使目标主机关闭了对ICMP、ARP等探针的响应,Nmap也会尝试连接目标主机的端口来判断其在线状态。这种方法适用于任何网络环境,包括本地网络和跨越路由器的远程网络。
示例
nmap -Pn 192.168.1.215
此命令将对IP地址192.168.1.215
执行扫描,不管目标主机是否响应任何形式的探针。
总结
如果确定是在本地网络上,并且知道目标主机可能会响应ARP请求,则使用-PR
是合理的。如果-PR
报告说主机看起来已经关闭,而怀疑主机实际上是开着的并且可能只是屏蔽了ARP请求,那么你可以尝试使用-Pn
来绕过主机发现阶段,直接进行端口扫描。这样,即使ARP发现失败,仍然有机会通过观察端口的响应来确定主机是否在线。
端口扫描
常见的端口扫描类型(-sT、-sS、-sU、-sA、-sN、-sP
)
-sT
:TCP 连接扫描-sS
:SYN 扫描-sU
:UDP 扫描-sA
:ACK 扫描-sN
、-sF
、-sX
:NULL、FIN 和 Xmas 扫描-sP
:不扫描端口 示例:SYN 扫描(nmap -sS
)
SYN 扫描是最流行的扫描类型,因为它快速且在网络上的隐蔽性较高:
nmap -sS 192.168.1.1
这将对 IP 地址为 192.168.1.1 的主机执行 SYN 扫描。
服务版本检测(nmap -sV
)
使用 -sV
参数启动服务版本检测:
nmap -sV 192.168.1.1
这会对目标主机进行端口扫描,并尝试确定每个开放端口上运行的服务及其版本。
OS 指纹识别(操作系统识别)(nmap -O
)
OS 指纹识别可以通过 -O
参数启动:
nmap -O 192.168.1.1
这将提供关于目标主机操作系统的猜测。
使用 Nmap 脚本引擎 (NSE)(nmap --script=xxx
)
Nmap 具有广泛的脚本库,可用于进行更复杂的网络探测。运行特定的脚本,可以使用 --script
参数:
nmap --script=http-title 192.168.1.1
这将运行 http-title
脚本,该脚本会抓取 HTTP 服务的标题。
输出和报告
Nmap 支持多种输出格式,包括普通文本、XML 和 grepable 格式。
文本输出
默认情况下,Nmap 以文本形式输出到控制台。
XML 输出
XML 输出可以被许多其他工具用于进一步处理,命令如下:
nmap -oX output.xml 192.168.1.1
Grepable 输出
Grepable 格式便于使用文本处理工具如 grep 进行搜索,命令如下:
nmap -oG output.grep 192.168.1.1
高级技术
防火墙绕过
某些 Nmap 扫描技术可用于绕过防火墙,例如碎片扫描(-f
)或者自定义 MTU(--mtu
)。
时间和性能
调整扫描速度与准确性之间的平衡,可以使用 -T
选项,它接受从 0(最慢)到 5(最快)的值。
脚本参数
向 NSE 脚本传递参数可以使用 --script-args
选项,这样可以定制脚本的行为。
安全性和合法性
使用 Nmap 进行扫描时,必须遵守当地法律和政策。未经授权扫描他人网络或设备可能违反法律。
结语
Nmap 是网络管理员和安全专家的重要工具。它的灵活性和强大功能使其成为评估网络安全状态的理想选择。正确使用 Nmap 可以帮助识别和缓解网络安全风险。