Linux 超级军刀 Nmap详解( 三 )


默认情况下,Nmap会扫描1000个最有可能开放的TCP端口
Nmap通过探测将端口划分为6个状态:
open:端口是开放的 。
closed:端口是关闭的 。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态 。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定 。
open|filtered:端口是开放的或被屏蔽 。
closed|filtered :端口是关闭的或被屏蔽
TCP SYN 扫描(-sS)
这是Nmap默认的扫描方式,通常被称作半开放扫描 。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么可以判断端口是开放的;如果收到RST包,说明该端口是关闭的 。如果没有收到回复,那么可以判断该端口被屏蔽了 。因为该方式仅发送SYN包对目标主机的特定端口,但不建立完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广 。
TCP connent 扫描(-sT)
TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭 。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标主机上留下记录信息,不够隐蔽 。所以,TCP connect是TCP SYN无法使用才考虑使用的方式
TCP ACK 扫描(-sA)
向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽 。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况
TCP FIN/Xmas/NULL 扫描(-sN/sF/sX)
这三种扫描方式被称为秘密扫描,因为相对比较隐蔽 。FIN扫描向目标主机的端口发送的TCP FIN 包或Xmas tree包或NULL包,如果收到对方的RST回复包,那么说明该端口是关闭的;没有收到RST包说明该端口可能是开放的或者被屏蔽了 。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有的flags都为0的TCP包 。
UDP扫描(-sU)
UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的 。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的 。
其他方式(-sY/-sZ)
除了以上几种常用的方式外,Nmap还支持多种其他的探测方式 。例如使用SCTP INIT/Cookie-ECHO方式是来探测SCTP的端口开放情况;使用IP protocol方式来探测目标主机支持的协议类型(tcp/udp/icmp/sctp等等);使用idle scan方式借助僵尸主机来扫描目标主机,以达到隐蔽自己的目的;或者使用FTP bounce scan,借助FTP允许的代理服务扫描其他的主机,同样达到隐蔽自己的目的
三:端口扫描用法
扫描方式选项
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描 。
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况 。
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态 。
--scanflags <flags>: 定制TCP包的flags 。
-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况 。
-sO: 使用IP protocol 扫描确定目标机支持的协议类型 。
-b <FTP relay host>: 使用FTP bounce scan扫描方式
端口参数与扫描顺序
-p <port ranges>: 扫描指定的端口
实例: -p 22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)
-F: Fast mode – 快速模式,仅扫描TOP 100的端口
-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到) 。
--top-ports <number>:扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率 。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services 。默认情况下,nmap会扫描最有可能的1000个TCP端口)
--port-ratio <ratio>: 扫描指定频率以上的端口 。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描 。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件
简单扫描(nmap ip)
nmap 202.207.236.2
例如: nmap 202.207.236.2 这个命令会按照 nmap-services 文件中指定的端口进行扫描,然后列出目标主机开放的端口号,以及端口号上运行的服务 。在一次简单扫描中,Nmap会以默认TCP SYN扫描方式进行,仅判断目标端口是否开放,若开放,则列出端口对应的服务名称 。


推荐阅读