nmap简介

nmap网络探测端口扫描和安全审核工具(跨平台工具)
https://nmap.org/
https://nmap.org/man/zh/
Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个 主机也没有问题。

  • Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,
  • 那些 主机提供什么服务(应用程序名和版本),
  • 那些服务运行在什么操作系统(包括版本信息),
  • 它们使用什么类型的报文过滤器/防火墙,
  • 以及一堆其它功能。

虽然Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务升级计划,以及监视主机和服务的运行。

Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。 “所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。
许多传统的端口扫描器只列出所有端口是开放还是关闭的, Nmap的信息粒度比它们要细得多。 它把端口分成六个状态: open(开放的), closed(关闭的),filtered(被过滤的), unfiltered(未被过滤的), open|filtered(开放或者被过滤的),或者 closed|filtered(关闭或者被过滤的)。
> open(开放的) 意味着目标机器上的应用程序正在该端口监听连接/报文。
应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。
> closed(关闭的) 端口没有应用程序在它上面监听,但是他们随时可能开放。
关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。 系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为被过滤的状态,下面讨论。
> filtered(被过滤的)
由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。 这使得扫描速度明显变慢。
> unfiltered(未被过滤的)
未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。
> open|filtered(开放或者被过滤的)
当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。
> closed|filtered(关闭或者被过滤的)
该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。

当要求进行版本探测时,端口表也可以包含软件的版本信息。
当要求进行IP协议扫描时 (-sO),Nmap提供关于所支持的IP协议而不是正在监听的端口的信息。
虽然Nmap努力产生正确的结果,但请记住所有结果都是基于目标机器(或者它们前面的防火墙)返回的报文的。这些主机也许是不值得信任的,它们可能响应以迷惑或误导Nmap的报文。更普遍的是非RFC兼容的主机以不正确的方式响应Nmap探测。FIN,Null和Xmas扫描 特别容易遇到这个问题。这些是特定扫描类型的问题,因此我们在个别扫描类型里讨论它们。

nmap帮助

$ nmap -h
== TARGET SPECIFICATION 目标说明
可用: 主机名, Ipv4, IPv6, CIDR, 八位字节范围, 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 file //排除<文件>中的列表
== HOST DISCOVERY 主机发现
-sL: List Scan - simply list targets to scan //列表扫描,仅列出网络上的主机,不发送任何报文。
-sn: Ping Scan - disable port scan //ping,不扫描端口。
-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 host
== SCAN TECHNIQUEShttps://nmap.org/man/zh/man-port-scanning-techniques.html
-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 //定制的TCP扫描
-sI <zombie host[:probeport]>: Idle scan //https://nmap.org/book/idlescan.html
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan //IP协议扫描
-b <FTP relay host>: FTP bounce scan //FTP弹跳扫描
== PORT 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 //快速扫描:nmap-services约1200个
-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 服务和版本探测
nmap-service-probes 数据库包含查询不同服务的探测报文 和解析识别响应的匹配表达式。
-sV: Probe open ports to determine service/version info //版本探测(-A的一部分)
--version-intensity <level>: Set from 0 (light) to 9 (try all probes) //设置版本扫描强度,默认7
--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) //跟踪版本扫描活动,--packet-trace的子集
== 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 //启用操作系统检测(-A的一部分)
--osscan-limit: Limit OS detection to promising targets //针对指定的目标进行操作系统检测
--osscan-guess: Guess OS more aggressively //推测操作系统检测结果
== TIMING 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) //设置时间模板,T4 可以加快执行速度
  paranoid (0)sneaky (1)polite (2)normal(3)aggressive (4)insane (5)

  • -T0: paranoid (0)模式用于IDS躲避,在一个时间只能扫描一个端口, 每个探测报文的发送间隔为5分钟。
  • -T1: sneaky (1) 模式用于IDS躲避,T1T2选项比较类似, 探测报文间隔分别为15秒和0.4秒。
  • -T2: Polite (2) 模式降低了扫描 速度以使用更少的带宽和目标主机资源。
  • -T3: Normal (3) (默认模式),因此-T3 实际上是未做任何优化。包含了并行扫描。
  • -T4: Aggressive (4) 模式假设用户具有合适及可靠的网络从而加速 扫描。最大TCP扫描延迟为10ms
  • -T5: Insane (5) 模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。最大延迟为5ms

  T4选项与 --max-rtt-timeout 1250 --initial-rtt-timeout 500 等价,
  T5等价于 --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --host-timeout 900000
--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 second
== FIREWALL/IDS EVASION AND SPOOFING 防火墙/IDS躲避和哄骗
-f; --mtu <val>: fragment packets (optionally w/given MTU) //报文分段,--mtu,使用指定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 //设置IP time-to-live域
--spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address //MAC地址哄骗
--badsum: Send packets with a bogus TCP/UDP/SCTP checksum
== OUTPUT 输出
-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3, and Grepable format, respectively, to the given filename. //oN,标准输出; oX,XML输出; oS,脚本输出; oG,Grep输出
-oA <basename>: Output in the three major formats at once //标准.nmap, .xml, .gnamp文件中
-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 //设置XSL样式
--webxml: Reference stylesheet from Nmap.Org for more portable XML
--no-stylesheet: Prevent associating of XSL stylesheet w/XML output //忽略XML声明的XSL样式
== MISC 杂项
-6: Enable IPv6 scanning //启用IPv6扫描
-A: Enable OS detection, version detection, script scanning, and traceroute //激烈扫描模式选项
--datadir <dirname>: Specify custom Nmap data file location //说明用户Nmap数据文件位置
--send-eth/--send-ip: Send using raw ethernet frames or IP packets //使用原以太网帧发送或IP包
--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 80:
SEE THE MAN PAGE: nmap.org/book/man.html
注:这里红色字体是下面实例中用到的选项,也是常用选项 

nmap实例

原文:https://nmap.org/man/zh/man-examples.html
下面给出一些实例,简单的、复杂的到深奥的。为更具体,一 些例子使用了实际的IP地址和域名。在这些位置,可以使用你自己网络 的地址/域名替换。注意,扫描其它网络不一定合法,一些网络管理员不愿看到 未申请过的扫描,会产生报怨。因此,先获得允许是最好的办法。

如果是为了测试,scanme.nmap.org 允许被扫描。但仅允许使用Nmap扫描并禁止测试漏洞或进行DoS攻击。为 保证带宽,对该主机的扫描每天不要超过12次。如果这个免费扫描服务被 滥用,系统将崩溃而且Nmap将报告解析 指定的主机名/IP地址失败:scanme.nmap.org。这些免 费扫描要求也适用于scanme2.nmap.org、 scanme3.nmap.org等等,虽然这些 主机目前还不存在。

nmap -v scanme.nmap.org
这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口。选项-v启用细节模式。

nmap -sS -O scanme.nmap.org/24
进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测,这个扫描需要有根权限。

nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开,将使用版本检测来确定哪种应用在运行。

nmap -v -iR 100000 -P0 -p 80
随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段 发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因 此使用-P0禁止对主机列表。

nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20
扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存。

host -l company.com | cut -d -f 4 | nmap -v -iL -
进行DNS区域传输,以发现company.com中的主机,然后将IP地址提供给 Nmap。上述命令用于GNU/Linux -- 其它系统进行区域传输时有不同的命令。

Windows版本提供的几个默认配置

命令 配置 说明
nmap -sn Ping scan 只ping, 不扫描端口
nmap -sn --traceroute Quick traceroute 只ping, 不扫描端口, 但跟踪路由
nmap -T4 -F Quick scan 快速扫描, 约1200端口
nmap Regular scan 标准扫描, 约1600端口
nmap -sV -T4 -O -F --version-light Quick scan plus 轻量级, 快速, 版本+OS探测
nmap -T4 -A -v -Pn Intense scan, no ping 标准端口扫描, 版本+OS探测, 详细显示, 跳过主机发现
nmap -T4 -A -v Intense scan 标准端口扫描, 版本+OS探测, 详细显示
nmap -sS -sU -T4 -A -v Intense scan plus UDP 标准TCP+UDP扫描, 版本+OS探测, 详细显示
nmap -p 1-65535 -T4 -A -v Intense scan, all TCP ports 所有TCP扫描, 版本+OS探测, 详细显示

Slow comprehensive scan: nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 --script "default or (discovery and safe)"
注:不难看出,这几个配置大致从上往下,扫描项目增加,耗时也会增加。