标签 nmap 下的文章

“”

使用nmap arp 快速扫描,发现局域网设备的IP地址。

命令:

nmap -sn -PR 192.168.1.0/24

结果:

nmap -sn -PR 192.168.2.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2021-06-29 08:41 CST
Nmap scan report for _gateway (192.168.2.1)
Host is up (0.00086s latency).
Nmap scan report for 192.168.2.8
Host is up (0.00054s latency).
Nmap scan report for hesy-ThinkPad-P15v-Gen-1 (192.168.2.64)
Host is up (0.000040s latency).
Nmap scan report for 192.168.2.170
Host is up (0.00087s latency).
Nmap scan report for 192.168.2.223
Host is up (0.00033s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 2.22 seconds

扫描255台主机,一个C网段,只需要2秒多钟。

参数说明:
-sn: Ping Scan - disable port scan
-PR (ARP Ping)
最常见的Nmap使用场景之一是扫描一个以太局域网。 在大部分局域网上,特别是那些使用基于 RFC1918私有地址范围的网络,在一个给定的时间绝大部分 IP地址都是不使用的。 当Nmap试图发送一个原始IP报文如ICMP回声请求时, 操作系统必须确定对应于目标IP的硬件 地址(ARP),这样它才能把以太帧送往正确的地址。 这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内 对没有运行的机器作几百万次的ARP请求。

当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。 当它收到响应时, Nmap甚至不需要担心基于IP的ping报文,既然它已经知道该主机正在运行了。 这使得ARP扫描比基于IP的扫描更快更可靠。 所以默认情况下,如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描。
参考链接:nmap主机发现 相关文档

nmap 技巧
基本nmap 命令
0x01:无任何附加参数

nmap IP地址

分情况。如果是超级用户,无参数扫描等价于 sS 参数扫描(SYN,半连接);否则,无参数扫描等价于 sT 参数扫描(TCP,完整连接)。

0x02:冗余

nmap -vv IP地址

按照基本法,v 参数通常表示冗余。我们使用两个 v 参数表示将侦测过程原原本本的打印输出出来。

0x03:指定端口号

nmap -p端口号 IP地址

这里 p 参数表示端口,标准写法后面跟的端口号之间没有空格。但是如果写一个空格也并无妨。

0x04:操作系统侦测

nmap -O IP地址
nmap -A IP地址

操作系统侦测有两个参数选项,其一是参数 O,其二是参数 A,后者乃前者的冗余版本。我更多的使用 A 参数,以得到更多的信息。

0x05:只进行主机发现

nmap -sn IP地址

主机发现的手段不下几十种,但是最常用的却是 sn 参数,它表示 “使用 ping 扫描来侦测存活的主机,而不进行端口扫描”。

0x06:跳过主机发现

nmap -Pn IP地址

有时候对方主机开启了防火墙(这是很自然的事情),可能过滤掉了你发送的 ICMP 协议数据包,这样如果想要使用 sn 参数来进行主机发现就不管用了,产生的结果也不可靠。于是你不得不使用 Pn 参数,它假设所有的目标 IP 均为存活,并一个一个主机的进行端口扫描,你懂的这样会牺牲一些时间作为代价。

0x07:扫描和版本号侦测

nmap -sV IP地址

该选项通过侦测开放的端口来判断开放的服务,并试图检测它的版本。虽然 A 选项也能做到,但是要检测开放的服务版本,sV 一定是最合适的。

0x08:UDP 扫描

nmap -sU IP地址

之前我们的扫描都是针对 TCP 的,而有些服务却是建立在 UDP 协议上的。比如 NTP(123端口)、SNMP(161端口)等服务,就必须使用 UDP 协议进行扫描。

nmap隐藏IP地址

namp -D IP地址1,IP地址2... IP地址

你可以使用 D 选项(英文 decoy)跟一些 IP 地址,IP 和 IP 之间用逗号隔开。这样看起来用来侦测而发送的数据包不仅来自于你的 IP 地址,还来自于这些掩体 IP。这就叫做 “混入其中”。

nmap禁用 ping

nmap -P0 IP地址

在 2010 年之后,该选项和 PN 选项被一起合并到 Pn 选项之中。但是如果你愿意,你仍然可以使用 P0 选项(P 后面跟的是零)。

nmap IP 地址伪装

sudo proxychains nmap ...

伪装 IP 地址的方法也有很多,比如你可以使用 prxychains 这款工具来实现匿名代理。

nmap 空闲扫描

nmap -sI 僵尸IP地址[:开放的僵尸端口] IP地址

和 D 选线不同的是,sI 根本不使用你自己的 IP 地址,而是使用空闲的网络资源。这样隐蔽性就更强了。开放的僵尸端口为选填,默认等于 80 端口。具体原理请参考 Nmap 文档。根据这个理论,你不能使用空闲扫描来扫描你自己的主机 IP。在 msfconsole 中,你可以使用 auxiliary/scanner/ip/ipidseq 来完成这个工作。

nmap 指定网卡进行扫描

nmap -e 网卡 IP地址

当你拥有不止一个网卡的时候,这很有用。

nmap 限制扫描时间

nmap --host-timeout 时间 IP地址

限制每个 IP 地址的扫描时间(单位为秒),当要扫描大量的主机 IP 时这很有用。

nmap 指定源 IP 地址

nmap -S 源IP地址 IP地址

使用冒充的 IP 地址进行扫描以增强隐蔽性。这里伪装成的 IP 也可以来自于下线状态的主机地址。

nmap 指定源主机端口

nmap -g 53 IP地址

使用 g 参数,或者 source-port 参数,来手动设定用来扫描的端口。常用的,如 20、53、67 端口。

nmap 数据包分片技术

nmap -f IP地址
nmap --mtu mtu单元大小 IP地址

上面两种方法都可以利用数据包分片技术,某些防火墙为了加快处理速度而不会进行重组处理,这样从而逃脱防火墙或闯入检测系统的检测。注意,mtu 的值必须是 8 的倍数(如 8、16、24、32 等)。

nmap 添加垃圾数据

nmap --data-length 垃圾数据长度 IP地址

一些常见的扫描之数据包是有特定的数据长度的,通过在发送的数据包末尾添加随机的垃圾数据,以达到混淆视听的作效果。

nmap 随机选择扫描对象

nmap --randomize-hosts IP地址

如果你要扫描大量的,比如成百上千的主机 IP,这很有效。它会打乱扫描顺序,以规避检测系统的检测。

nmap 伪装 MAC 地址

nmap --spoof-mac 伪造MAC IP地址

你可以通过指定供应商的名字来伪装 MAC 地址。可选的名字有 Dell、Apple、3Com。当然也可以手动指定 MAC 地址的值。或者为了简单起见,可以在上面 “伪造IP” 的地方填写数字 0,这将生成一个随机的 MAC 地址。

nmap 伪造检验值

nmap --badsum IP地址

这将使用伪造的 TCP / UDP / SCTP 校验和发送数据。

nmap 扫描速度

nmap -T0 IP地址

T后面跟的数字代表扫描速度,数字越大则速度越快。

Nmap 脚本引擎
Nmap 脚本引擎内置在 Nmap 中,使用 script 参数进行调用。它的英文名是 Nmap Script Engine,简称 NSE。

Nmap 内置了一些已经写好的脚本,在 Kali 等主流渗透系统中被保存在 /usr/share/nmap/scripts/ 文件夹下。文件后缀名是 .nse。使用 sC(等价于 script=default)或者 script 参数对 Nmap 脚本进行调用。

nmap 按类别扫描

nmap --script=类别 IP地址

Nmap 的脚本类别分为以下几类。

  • auth:负责处理鉴权证书、绕开鉴权的脚本。
  • broadcast:处理在局域网内探查更多服务开启的状况,如 dhcp / dns / sqlserver 等服务。
  • brute:提供暴力破解方式,针对常见的应用如 http / snmp 等。
  • default:使用 sC 或 A 选项时默认的脚本,提供基本脚本扫描能力。
  • discovery:挖掘更多的网络服务信息,如 smb 枚举、snmp 查询等。
  • dos:用于进行拒绝服务攻击。
  • exploit:利用已知的漏洞入侵系统。
  • external:利用第三方的数据库或资源,如进行 whois 解析。
  • fuzzer:模糊测试脚本,发送异常的包到目标主机,探测出潜在的漏洞。
  • malware:探测目标是否感染了病毒,是否开启了后门。
  • safe:与 fuzzer 功能相反,属于安全性脚本。
  • version:负责增强信性服务与版本扫描功能的脚本。
  • vuln:负责检查目标主机是否有常见的漏洞,如 ms08_067。

你可以使用 vuln 脚本对目标主机进行简单的漏洞勘查。

可以看到,就这么轻而易举的扫描出来靶机的两个漏洞,ms08_067 和 ms17_010 漏洞。对漏洞熟悉的同学知道,ms17_010 漏洞,它有一个名字好听的衍生版本,曰之 “永恒之蓝(externalblue)”。该攻击手段便是利用了这个漏洞。经检验,这两个靶机上的漏洞都可以被直接利用。

nmap 使用特定的脚本进行扫描

nmap --script=特定的脚本名字 IP地址

所谓 Nmap 脚本的名字,就是 /usr/share/nmap/scripts/ 文件夹下的那些文件,去掉后缀后的东西。
原文链接:https://blog.csdn.net/abc_12366/article/details/82807108

Nmap 網路診斷工具基本使用技巧與教學
掃描多台主機
如果要一次掃描多台主機,就直接把所有的主機名稱都放進 nmap 的參數中即可:

nmap www.hinet.net tw.yahoo.com www.google.com.tw

您也可以直接使用萬用字元,一次掃描整個子網域:

nmap 192.168.0.*

或是

nmap 192.168.0.0/24

如果您想要掃描 192.168.0.123、192.168.0.124、192.168.0.125 這三台主機,可以寫成這樣:

nmap 192.168.0.123,124,125

如果要掃描子網域中連續的某一段,可以這樣寫:

nmap 192.168.0.123-140

以檔案列表指定主機
nmap 也可以直接從檔案讀取要掃描的主機,假設我們有一個主機列表檔案 hostlist.txt,其內容為:

www.hinet.net
192.168.0.123
www.google.com.tw
然後我們就可以使用 nmap 直接讀取這個檔案內容來進行掃描:

nmap -iL hostlist.txt

排除指定的主機
如果要掃描整個網域,但是要排除某些機器,可以使用 --exclude 參數:

nmap 192.168.0.* --exclude 192.168.0.100

若以檔案方式指定主機,也可以使用 --excludefile 指定排除的列表:

nmap -iL hostlist.txt --excludefile excludelist.txt

偵測作業系統版本
如果要偵測主機的作業系統與各種服務的版本,可以加上 -A 參數:

nmap -A scanme.nmap.org

如果只需要作業系統資訊,可以使用 -O 參數:

nmap -O scanme.nmap.org

若只需要各種服務的版本:

nmap -sV scanme.nmap.org

測試主機是否有防火牆
Nmap 可以透過 TCP ACK 掃描,偵測主機是否有啟用防火牆:

nmap -sA scanme.nmap.org

掃描有防火牆的主機
掃描在防火牆保護下的主機:

nmap -PN scanme.nmap.org

偵測有開機的主機
掃描整個網路,偵測所有有開機的主機(ping scan):

nmap -sP 140.115.35.0/24

快速掃描
加快掃描的速度:

nmap -F www.hinet.net
nmap -T5 192.168.1.0/24

指定掃描的連接埠
掃描連接埠 80:

nmap -p 80 192.168.1.1

指定 TCP 連接埠 80:

nmap -p T:80 192.168.1.1

指定 UDP 連接埠 53:

nmap -p U:53 192.168.1.1

掃描兩個連接埠:

nmap -p 80,443 192.168.1.1

指定連接埠範圍:

nmap -p 80-200 192.168.1.1

結合各種參數:

nmap -p U:53,111,137,T:21-25,80,139,8080 192.168.1.1
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 192.168.1.254

掃描前 10 個常用的連接埠:

nmap --top-ports 10 192.168.1.1

查詢主機名稱
只查詢網域中所有的主機名稱,不做任何主機與連接埠的偵測:

nmap -sL 192.168.1.0/24

Referenced from:https://blog.gtwang.org/linux/nmap-command-examples-tutorials/

Nmap 扫描实例
nmap提供了10种模板供用户进行选择,下面分别介绍:

1、Intense scan 速度最快、最常见的TCP端口扫描,主要用于确定操作系统类型。

nmap –T4 –A –v 192.168.123.57

2、Intense scan plus UDP:除Intense scan 功能外,还扫描UDP端口。

nmap –sS –sU –T4 –A –v 192.168.123.57

3、Intense scan,all TCP ports:扫描所有的TCP端口

nmap –p 1-65535 –T4 –A –v 192.168.123.57

4、Ping scan:只进行ping扫描,不进行端口扫描

nmap –sP –PE 192.168.123.57

5、Quick scan:

nmap –T4 –F 192.168.123.57

6、Quick scan plus

nmap –sV –T4 –O –F 192.168.123.57

7、Quick traceroute

nmap –sP –PE –traceroute 192.168.123.57

8、Regular scan

nmap 192.168.123.57

9、Intense scan ,no ping

nmap –T4 –A –v –PN 192.168.123.57

Referenced from:https://www.cnblogs.com/aq-ry/p/9021801.html
攻防:Nmap原理及使用技巧
Nmap提供这几种功能:主机发现、端口扫描、操作系统识别、服务识别、脚本扫描。在图 1的入侵中就使用了其中三个功能:主机发现、端口扫描、操作系统识别。本文将主要介绍Nmap的主机发现、端口扫描的原理和使用技巧。

一、Nmap原理
1、主机发现技术
主机发现是为了发现网段内的活跃主机(活跃主机是指这台主机是运行的),这是黑客扫描的第一步。主机发现原理如表 1所示。

扫描方式发送报文活跃响应不活跃响应被过滤响应备注
ARP扫描ARP请求报文ARP响应报文超时不会被过滤精准
ICMP扫描ICMP type=8 code=0 type=13 code=0 type=17 code=0ICMP type=0 code=0 type=14 code=0 type=18 code=0超时超时可能会被防火墙过滤
端口扫描TCP synTCP syn+ack超时超时或ICMP type=3 code=3或13可能会被过滤

表 1 主机发现原理

ARP扫描是最精准的扫描方式,并且不会被过滤,因此会被强制有限使用。ICMP扫描是最常见的扫描方式,和ping命令原理一致,但现有很多防火墙和IPS设备会禁用ICMP扫描,使得ICMP主机发现失败。端口扫描技术是另一种发现主机的方式,准确且不容易被防火墙过滤,这种方式被经常使用,端口扫描原理见2.2节。

2、端口扫描技术
端口扫描可以分为TCP端口扫描和UDP端口扫描,由于TCP能够提供更多的协议字段,因此TCP端口扫描更准确,如今的端口扫描技术主要是指TCP端口扫描。

在TCP端口扫描中,探测报文组合不同flags位,不同的flags在端口开放、端口关闭、防火墙过滤时的响应是不一样的,通过区分不同的响应来检测端口的状态,具体如2所示。(tcp flags有syn、ack、rst、fin、psh、urg共6种置位)

扫描方式TCP Flag开放时响应关闭时响应过滤时响应特征
-sT,TCP全连接扫描报文1:syn 报文2:acksyn+ack,完成3次握手rst+ack一般不会被过滤精准、费时、可能会被日志记录
-sS,TCP半连接扫描synsyn+ackrst+ackICMP type=3 code=3、13或超时精准、快速、无日志记录,最常见且默认的扫描方式
-sA,TCP ack扫描ackrstrstICMP type=3 code=3、13或超时不准确、只能判断是否加防火墙filtered或unfiltered
-sW,TCP window扫描ackrst,window不为0rst,window为0ICMP type=3 code=3、13或超时不准确、有的情况下window都为0
-sMfin+ack未收到rstrstICMP type=3 code=3、13或超时不准确
-sN无置位无响应rstICMP type=3 code=3或13或超时无响应不准确,只能判断closed和open/filtered
-sFfin无响应rstICMP type=3 code=3或13或超时无响应不准确,只能判断closed和open/filtered
-sXfin+psh+urg无响应rstICMP type=3 code=3或13或超时无响应不准确,只能判断closed和open/filtered
-sU,UDP端口扫描不相关有UDP响应或无响应icmp type=3 code=3ICMP type=3 code=1,2,9,10,13不准确,通常只能判断closed和open/filtered

表 2 端口扫描原理
由表 2可以看到,最常用的扫描方式是-sS扫描,快速、精准,且无日志;-sT方式最精准,但有日志记录;-sA/-sW能够识别是否有防火墙,对于识别windows防火墙非常有效。

3、其他技术
Nmap还包括操作系统指纹识别技术、服务识别技术、防火墙绕过技术以及NSE(Nmap Scripting Engine)脚本引擎。

二、Nmap使用技巧
1、Nmap命令组成
Nmap命令主要由以下几个部分组成:

nmap 主机发现参数 端口扫描参数 其他参数 目标主机/网段

例如:nmap –PS80 –sS –sV –v 1.1.1.1/24,其中主机发现使用-PS参数;端口扫描使用-sS参数;另外使用-sV参数探测服务版本,-v参数开启可视模式;目标网段为1.1.1.1/24。

需要注意的是:

m 如果在同一网段,则无论主机发现参数如何指定,Nmap都使用ARP扫描完成主机发现。

m 如果未指定主机发现方式,则使用-sn参数进行主机发现。

m 如果未指定端口扫描方式,则使用-sS参数进行端口扫描。

m -Pn参数可忽略主机发现阶段。

2、防火墙对Nmap扫描的影响
了解防火墙相关技术会帮助更好的使用Nmap,防火墙的以下技术会影响Nmap的使用。

m ICMP探测阻断,现有的很多防火墙都会阻止ICMP探测。因此主机发现尽量使用-Pn、-PS参数试试。

m 首包非TCP syn丢弃,防火墙检测每个会话的首包是否是TCP syn报文,如果不是则丢弃,此种技术普遍存在于硬件防火墙中但不经常开启。防火墙的这种技术会造成除-sT、-sS之外的其他大多数端口扫描方式无效,因此请尽量使用-sT、-sS参数进行端口扫描。

m 限速功能,防火墙会限制单IP连接速率,如果Nmap频繁扫描可能会触发这种策略。通过—scan-delay方法绕过。

m TCP Proxy。有的TCP Proxy会先和Nmap完成所有TCP三次握手,然后才向真正的目标主机发起TCP连接,在这种情况下,Nmap可能完全失效,但该情况非常少见。

a) 3、主要参数
主机发现的主要参数如表 3所示。

参数描述是否常用
-sL仅列出指定参数有哪些IP,并反向查询域名信息。一般
-sn组合表 1中3种技术进行主机发现,默认的主机发现方式。常用
-Pn不进行主机发现,直接进入端口扫描阶段,能绕过ICMP过滤,老版本为-P0。常用
-PS/-PA/-PU/-PY分别用TCP SYN/TCP ACK/UDP/SCTP技术进行主机发现。常用
-PE/-PP/-PM分别用ICMP ECHO/ICMP TIMESTAMP/ICMP MASK技术进行主机发现。一般
-PO使用参数指定的协议(如TCP)对主机进行扫描。不常用

表 3 主机发现主要参数

端口扫描的主要参数如表4 所示。
参数描述是否常用
-sS/-sTTCP全连接/半连接扫描。常用
-sA/-sWTCP ACK/TCP WINDOW扫描,用于确定目标主机是否有开启防火墙。一般
-sMFIN、ACK同时置位的扫描一般
-sN/-sF/-sXNULL/FIN/XMAS扫描。一般
-sUUDP扫描。常用
-sI盲扫描。不常用
-sO协议扫描,用于确定目标主机支持那些协议。一般
-sY/-sZSCTP/COOKIE-ECHO扫描。不常用
-bFTP代理扫描。不常用

表 4端口扫描主要参数

其他主要参数如下:
参数描述是否常用
-OOS指纹识别扫描常用
-AOS指纹识别、服务版本扫描、脚本扫描、traceroute常用
-sA/-sW探测主机是否开启防火墙常用
-f使用分片报文扫描目标主机常用
-sC使用脚本对目标主机进行安全扫描一般
-sV探测主机提供的服务的版本一般

表 6 其他重要参数

b)4、Nmap常用语句
Nmap的一些常见扫描语句如下:

nmap –sn 192.168.0.1/24

扫描目标网段中有哪些主机是活跃的,可以快速收集到活跃主机。

nmap –Pn –p 80,443,8080 192.168.0.1/24

快速定位目标网段中的WEB服务器。

nmap –sS –sU –A –v –T4 host

对目标host进行完整扫描,包括知名端口的TCP、UDP扫描,操作系统探测,服务探测,常见漏洞探测。

nmap –sS –p 1-65535 –v –T4 host

对目标host所有端口进行TCP端口扫描。

nmap –sA/-sW host

识别目标host是否在防火墙之后。

from:http://www.h3c.com/cn/d_201508/888907_30008_0.htm

nmap arp快速扫描

nmap 常用参数

nmap -T4 -A -v -Pn IP

最常用的一种扫描

-T4        #设置时序,越高扫描越快
-A        #启用操作系统检测,版本检测,脚本扫描和跟踪路由
-v        #增加详细级别(使用-vv或更高级别以获得更好的效果)
-Pn        #无ping扫描

nmap 主机发现

nmap [Scan Type(s)] [Options] {target specification} #指令格式

Scan Types 指探测类型:

-PS 指 TCP SYN Ping,
-PA 指 TCP ACK Ping,
-PU 指 UDP Ping
-PE 

ICMP Ping,现在很多主机封锁这些报文,适用于管理员监视内部网络

Options 指探测选项:

-n 指不对活动的 IP 地址进行反向域名解析,用以提高扫描速度
-R 指对活动的 IP 进行反向域名解析

target specification 指探测的目标地址或 IP 地址范围
192.168.0.1-255

默认主机发现扫描

nmap 192.168.0.1-255

Nmap 会发送一个 ICMP echo 请求,一个 TCP SYN 包给 443 端口,一个 TCP ACK 包给 80 端口和一个 ICMP 时间戳请求

这就等价于使用命令 nmap -PE -PS443 -PA80 -PP 192.168.0.1-255

此命令返回一个 IP 地址段中活动的主机,及其 IP 地址,主机域名,开启的服务以及相应的端口,MAC 地址等信息

其它命令

nmap -sP 192.168.0.1-255    #ping扫描,只列出存活主机,速度最快
nmap -Pn 192.168.0.1-255    #无ping扫描,结果和默认主机发现一样

其它参数

-O    #启用操作系统检测
-sV    #探测服务版本信息
-v    #增加详细级别(使用-vv或更高级别以获得更好的效果)
--script=script_name    #使用nse脚本

nmap 端口扫描

nmap -p 1-65535 192.168.0.8        # -p选项,只扫描指定的端口

Nmap所识别的6个端口状态

  • open(开放的)

应用程序正在该端口接收TCP 连接或者UDP报文。

  • closed(关闭的)

关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。

  • filtered(被过滤的)

由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。

过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。

  • unfiltered(未被过滤的)

未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。

只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。

用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。

  • open|filtered(开放或者被过滤的)

当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。

开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。

因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。

  • closed|filtered(关闭或者被过滤的)

该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。

端口扫描技术
只列举常见的,详细可参考官方文档

  -sT    #TCP连接扫描
  -sS    #SYN扫描
  -sU    #UDP扫描
  -sA    #ACK扫描
  -sF    #FIN扫描

TCP连接扫描

使用操作系统的网络连接系统调用 connect(),对目标主机发起 TCP 三路握手,待完成后 Nmap 立即中断此次连接。

Nmap 通过获取每个尝试连接的状态信息来判定侦测端口的状态

SYN扫描

Nmap 产生一个 SYN 数据报文,如果侦测端口开放并返回 SYN-ACK 响应报文

Nmap 据此发送 RST 报文给侦测端口结束当前连接,这样做的好处在于缩短了端口扫描时间

UDP扫描

UDP 本身是无连接的协议,Nmap 向目标主机的端口发送 UDP 探测报文

如果端口没有开放,被侦测主机将会发送一个 ICMP 端口不可到达的消息

Nmap 根据这个消息确定端口闭合(closed)或者被过滤 (unfiltered)

通常没有回复意味着端口是开放(open)状态 。

ACK扫描

这种扫描比较特殊,它不能确切知道端口的基本状态,而是主要用来探测防火墙是否存在以及其中设定的过滤规则

FIN扫描

和 SYN 扫描相比,这种方式更为隐蔽,因此能够穿过防火墙的过滤

关闭(closed)端口将会返回合适的 RST 报文,而开放端口将忽略这样的侦测报文

具备类似防火墙不敏感特性的还有 -sN NULL 扫描,-sX X-mas 扫描。

防火墙/IDS逃逸

nmap -f --mtu=16 192.168.0.8

报文分段,mtu必须是8的倍数

nmap -sI www.0day.com:80 192.168.0.8

源IP欺骗

nmap --source-port 53 192.168.0.8

    

源端口欺骗
防火墙对服务器的设置会根据端口选择是否信任数据流
管理员可能会认为这些端口不会有攻击发生,所以可以利用这些端口扫描

nmap --data-length 30 192.168.0.8

在原来报文基础上,附加随机数据,达到规避防火墙的效果

nmap --spoof-mac 0 192.168.0.8

指定一个随机的MAC地址
Referenced from:https://wiki.wgpsec.org/knowledge/tools/nmap.html

nmap 主机发现 任何网络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为
一列活动的或者您感兴趣的主机。扫描每个IP的每个端口很慢,通常也没必要。
当然,什么样的主机令您感兴趣主要依赖于扫描的目的。网管也许只对运行特定服务的
主机感兴趣,而从事安全的人士则可能对一个马桶都感兴趣,只要它有IP地址:-)。一个系统管理员
也许仅仅使用Ping来定位内网上的主机,而一个外部入侵测试人员则可能绞尽脑汁用各种方法试图 突破防火墙的封锁。

由于主机发现的需求五花八门,Nmap提供了一箩筐的选项来定制您的需求。
主机发现有时候也叫做ping扫描,但它远远超越用世人皆知的ping工具
发送简单的ICMP回声请求报文。用户完全可以通过使用列表扫描(-sL)或者 通过关闭ping
(-P0)跳过ping的步骤,也可以使用多个端口把TCP SYN/ACK,UDP和ICMP
任意组合起来玩一玩。这些探测的目的是获得响应以显示某个IP地址是否是活动的(正在被某 主机或者网络设备使用)。
在许多网络上,在给定的时间,往往只有小部分的IP地址是活动的。 这种情况在基于RFC1918的私有地址空间如10.0.0.0/8尤其普遍。
那个网络有16,000,000个IP,但我见过一些使用它的公司连1000台机器都没有。 主机发现能够找到零星分布于IP地址海洋上的那些机器。

如果没有给出主机发现的选项,Nmap 就发送一个TCP ACK报文到80端口和一个ICMP回声请求到每台目标机器。
一个例外是ARP扫描用于局域网上的任何目标机器。对于非特权UNIX
shell用户,使用connect()系统调用会发送一个SYN报文而不是ACK 这些默认行为和使用-PA -PE选项的效果相同。
扫描局域网时,这种主机发现一般够用了,但是对于安全审核,建议进行 更加全面的探测。

-P选项(用于选择 ping的类型)可以被结合使用。 您可以通过使用不同的TCP端口/标志位和ICMP码发送许多探测报文 来增加穿透防守严密的防火墙的机会。另外要注意的是即使您指定了其它 -P选项,ARP发现(-PR)对于局域网上的
目标而言是默认行为,因为它总是更快更有效。

下列选项控制主机发现。

-sL (列表扫描) 列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机, 不发送任何报文到目标主机。默认情况下,Nmap仍然对主机进行反向域名解析以获取 它们的名字。简单的主机名能给出的有用信息常常令人惊讶。例如,
fw.chi.playboy.com是花花公子芝加哥办公室的
防火墙。Nmap最后还会报告IP地址的总数。列表扫描可以很好的确保您拥有正确的目标IP。
如果主机的域名出乎您的意料,那么就值得进一步检查以防错误地扫描其它组织的网络。

既然只是打印目标主机的列表,像其它一些高级功能如端口扫描,操作系统探测或者Ping扫描
的选项就没有了。如果您希望关闭ping扫描而仍然执行这样的高级功能,请继续阅读关于 -P0选项的介绍。

-sP (Ping扫描) 该选项告诉Nmap仅仅 进行ping扫描 (主机发现),然后打印出对扫描做出响应的那些主机。 没有进一步的测试 (如端口扫描或者操作系统探测)。 这比列表扫描更积极,常常用于 和列表扫描相同的目的。它可以得到些许目标网络的信息而不被特别注意到。
对于攻击者来说,了解多少主机正在运行比列表扫描提供的一列IP和主机名往往更有价值。

系统管理员往往也很喜欢这个选项。 它可以很方便地得出 网络上有多少机器正在运行或者监视服务器是否正常运行。常常有人称它为
地毯式ping,它比ping广播地址更可靠,因为许多主机对广播请求不响应。

-sP选项在默认情况下, 发送一个ICMP回声请求和一个TCP报文到80端口。如果非特权用户执行,就发送一个SYN报文 (用connect()系统调用)到目标机的80端口。 当特权用户扫描局域网上的目标机时,会发送ARP请求(-PR),
,除非使用了--send-ip选项。 -sP选项可以和除-P0)之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性。
一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了。 当防守严密的防火墙位于运行Nmap的源主机和目标网络之间时,
推荐使用那些高级选项。否则,当防火墙捕获并丢弃探测包或者响应包时,一些主机就不能被探测到。

-P0 (无ping) 该选项完全跳过Nmap发现阶段。 通常Nmap在进行高强度的扫描时用它确定正在运行的机器。 默认情况下,Nmap只对正在运行的主机进行高强度的探测如 端口扫描,版本探测,或者操作系统探测。用-P0禁止
主机发现会使Nmap对每一个指定的目标IP地址 进行所要求的扫描。所以如果在命令行指定一个B类目标地址空间(/16), 所有 65,536
个IP地址都会被扫描。 -P0的第二个字符是数字0而不是字母O。 和列表扫描一样,跳过正常的主机发现,但不是打印一个目标列表,
而是继续执行所要求的功能,就好像每个IP都是活动的。

-PS [portlist] (TCP SYN Ping) 该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80 (可以通过改变nmap.h) 文件中的DEFAULT-TCP-PROBE-PORT值进行配置,但不同的端口也可以作为选项指定。
甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000),
在这种情况下,每个端口会被并发地扫描。

SYN标志位告诉对方您正试图建立一个连接。 通常目标端口是关闭的,一个RST (复位) 包会发回来。
如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应 一个SYN/ACK
TCP报文。然后运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK报文,否则,一个完全的连接将会建立。
RST报文是运行Nmap的机器而不是Nmap本身响应的,因为它对收到 的SYN/ACK感到很意外。

Nmap并不关心端口开放还是关闭。 无论RST还是SYN/ACK响应都告诉Nmap该主机正在运行。

在UNIX机器上,通常只有特权用户 root 能否发送和接收 原始的TCP报文。因此作为一个变通的方法,对于非特权用户,
Nmap会为每个目标主机进行系统调用connect(),它也会发送一个SYN
报文来尝试建立连接。如果connect()迅速返回成功或者一个ECONNREFUSED
失败,下面的TCP堆栈一定已经收到了一个SYN/ACK或者RST,该主机将被 标志位为在运行。
如果连接超时了,该主机就标志位为down掉了。这种方法也用于IPv6 连接,因为Nmap目前还不支持原始的IPv6报文。

-PA [portlist] (TCP ACK Ping) TCP ACK ping和刚才讨论的SYN ping相当类似。 也许您已经猜到了,区别就是设置TCP的ACK标志位而不是SYN标志位。 ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。
所以远程主机应该总是回应一个RST报文, 因为它们并没有发出过连接请求到运行Nmap的机器,如果它们正在运行的话。

-PA选项使用和SYN探测相同的默认端口(80),也可以 用相同的格式指定目标端口列表。如果非特权用户尝试该功能, 或者指定的是IPv6目标,前面说过的connect()方法将被使用。 这个方法并不完美,因为它实际上发送的是SYN报文,而不是ACK报文。

提供SYN和ACK两种ping探测的原因是使通过防火墙的机会尽可能大。
许多管理员会配置他们的路由器或者其它简单的防火墙来封锁SYN报文,除非 连接目标是那些公开的服务器像公司网站或者邮件服务器。
这可以阻止其它进入组织的连接,同时也允许用户访问互联网。 这种无状态的方法几乎不占用防火墙/路由器的资源,因而被硬件和软件过滤器
广泛支持。Linux Netfilter/iptables 防火墙软件提供方便的 --syn选项来实现这种无状态的方法。
当这样的无状态防火墙规则存在时,发送到关闭目标端口的SYN ping探测 (-PS)
很可能被封锁。这种情况下,ACK探测格外有闪光点,因为它正好利用了 这样的规则。

另外一种常用的防火墙用有状态的规则来封锁非预期的报文。 这一特性已开始只存在于高端防火墙,但是这些年类它越来越普遍了。 Linux
Netfilter/iptables 通过 --state选项支持这一特性,它根据连接状态把报文
进行分类。SYN探测更有可能用于这样的系统,由于没头没脑的ACK报文 通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定
-PS又指定-PA来即发送SYN又发送ACK。

-PU [portlist] (UDP Ping) 还有一个主机发现的选项是UDP ping,它发送一个空的(除非指定了--data-length
UDP报文到给定的端口。端口列表的格式和前面讨论过的-PS和-PA选项还是一样。
如果不指定端口,默认是31338。该默认值可以通过在编译时改变nmap.h文件中的
DEFAULT-UDP-PROBE-PORT值进行配置。默认使用这样一个奇怪的端口是因为对开放端口 进行这种扫描一般都不受欢迎。

如果目标机器的端口是关闭的,UDP探测应该马上得到一个ICMP端口无法到达的回应报文。 这对于Nmap意味着该机器正在运行。
许多其它类型的ICMP错误,像主机/网络无法到达或者TTL超时则表示down掉的或者不可到达的主机。
没有回应也被这样解释。如果到达一个开放的端口,大部分服务仅仅忽略这个 空报文而不做任何回应。这就是为什么默认探测端口是31338这样一个
极不可能被使用的端口。少数服务如chargen会响应一个空的UDP报文, 从而向Nmap表明该机器正在运行。

该扫描类型的主要优势是它可以穿越只过滤TCP的防火墙和过滤器。 例如。我曾经有过一个Linksys
BEFW11S4无线宽带路由器。默认情况下, 该设备对外的网卡过滤所有TCP端口,但UDP探测仍然会引发一个端口不可到达
的消息,从而暴露了它自己。

-PE; -PP; -PM (ICMP Ping Types) 除了前面讨论的这些不常见的TCP和UDP主机发现类型, Nmap也能发送世人皆知的ping 程序所发送的报文。Nmap发送一个ICMP type 8 (回声请求)报文到目标IP地址,
期待从运行的主机得到一个type 0 (回声响应)报文。 对于网络探索者而言,不幸的是,许多主机和
防火墙现在封锁这些报文,而不是按期望的那样响应, 参见RFC 1122。因此,仅仅ICMP扫描对于互联网上的目标通常是不够的。
但对于系统管理员监视一个内部网络,它们可能是实际有效的途径。 使用-PE选项打开该回声请求功能。

虽然回声请求是标准的ICMP ping查询, Nmap并不止于此。ICMP标准 (RFC 792)还规范了时间戳请求,信息请求
request,和地址掩码请求,它们的代码分别是13,15和17。 虽然这些查询的表面目的是获取信息如地址掩码和当前时间,
它们也可以很容易地用于主机发现。 很简单,回应的系统就是在运行的系统。Nmap目前没有实现信息请求报文, 因为它们还没有被广泛支持。RFC
1122 坚持 “主机不应该实现这些消息”。 时间戳和地址掩码查询可以分别用-PP和-PM选项发送。
时间戳响应(ICMP代码14)或者地址掩码响应(代码18)表示主机在运行。 当管理员特别封锁了回声请求报文而忘了其它ICMP查询可能用于
相同目的时,这两个查询可能很有价值。

-PR (ARP Ping) 最常见的Nmap使用场景之一是扫描一个以太局域网。 在大部分局域网上,特别是那些使用基于 RFC1918私有地址范围的网络,在一个给定的时间绝大部分 IP地址都是不使用的。 当Nmap试图发送一个原始IP报文如ICMP回声请求时,
操作系统必须确定对应于目标IP的硬件 地址(ARP),这样它才能把以太帧送往正确的地址。
这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内 对没有运行的机器作几百万次的ARP请求。

当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。 当它收到响应时,
Nmap甚至不需要担心基于IP的ping报文,既然它已经知道该主机正在运行了。 这使得ARP扫描比基于IP的扫描更快更可靠。
所以默认情况下,如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描。 即使指定了不同的ping类型(如 -PI或者 -PS)
,Nmap也会对任何相同局域网上的目标机使用ARP。 如果您真的不想要ARP扫描,指定 --send-ip。

-n (不用域名解析) 告诉Nmap 永不对它发现的活动IP地址进行反向域名解析。 既然DNS一般比较慢,这可以让事情更快些。

-R (为所有目标解析域名) 告诉Nmap 永远 对目标IP地址作反向域名解析。 一般只有当发现机器正在运行时才进行这项操作。

--system-dns (使用系统域名解析器) 默认情况下,Nmap通过直接发送查询到您的主机上配置的域名服务器 来解析域名。为了提高性能,许多请求 (一般几十个 ) 并发执行。如果您希望使用系统自带的解析器,就指定该选项
(通过getnameinfo()调用一次解析一个IP)。除非Nmap的DNS代码有bug--如果是这样,请联系我们。
一般不使用该选项,因为它慢多了。系统解析器总是用于IPv6扫描。

Referenced from:https://nmap.org/man/zh/man-host-discovery.html

ARP Scan

-PR option is used for arp inspection so it just sends arp request. In the second block, we see the target host network dump. The -sn option disable port scan.

$ nmap -PR -sn u1

List Scan
The list scan is a passive scan so we do not send packets to the network we just listen. As you can see output there is one host which is up but the scan shows no one is up.

$ nmap -sL 192.168.122.0/24

No Ping Scan
No ping scan disables ping stage of the scan. Normally a scan starts with ping to find live hosts and then start heavy port scan to the live hosts. But if you set these options it starts with heavy port scan for all specified hosts.

$ nmap -Pn 192.168.122.0/24

Sync Scan
TCP Sync ping is another method for reliable scanning. To the given ports sync are send and got a response if there is a host like RST or ACK. Here we can for TCP 22.

$ nmap -sn -PS22 192.168.122.0/24

Ack Scan
TCP Ack ping is like sync ping but as you guess ack and sync flags are set.

$ nmap -sn -PA22 192.168.122.0/24

UDP Scan
UDP ping is like TCP ping. Here you can specify data-length for the packet which is randomly chosen payload.

$ nmap -sn --data-length 500 -PU514 192.168.122.0/24

ICMP Echo Scan
ICMP ping types are used for ping ICMP types. The most used and helpful is the echo . This type of scan pings all of the hosts

$ nmap -sn -PE 192.168.122.0/24

Protocol list is used to specify ip protocol numbers. As you know ICMP, TCP , UDP and similar protocol numbers specified in the IP packet header. Here we can set these numbers. For example, UDP is 17. This type of scan is not reliable so I skip it.

Do Not Resolve DNS
Resolving DNS can slow down scan or it may be unnecessary. So we can stop DNS resolving with -n option or force it with -R option. If we want to use the system specified DNS use --system-dns or want to specify manual DNS servers use --dns-servers 8.8.8.8

$ nmap -sn -n 192.168.122.0/24