nmap扫描主机参数详解

Nmap简介

Nmap(Network Mapper) 是一款支持各种操作系统的开源网络扫描工具。主要用来进行主机发现、端口扫描,并通过端口扫描推断运行系统以及运行软件版本。
-sL 简单扫描列表目标
-sP: Ping Scan - disable port scan
-n 取消域名解析
发送4种不同类型的包去探测,只要收到其中任何一种返回包,就可以判定主机是打开的
ICMP协议 请求回显包
TCP协议 SYN请求包
TCP协议 ACK请求包
ICMP协议 timestamp请求包
-sS (TCP SYN扫描)
半开放扫描,它只发送一个SYN报文然后等待回应,若SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势.如果Nmap命令中没有指出扫描类型,默认的就是Tcp SYN

-sT (TCP connect()扫描)
CPConnect()扫描是默认的TCP扫描,Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始报文。

-sU (UDP扫描)
UDP扫描发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。 偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。 如果几次重试后还没有响应,该端口就被认为是open|filtered(开放|被过滤的)。

-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描)
用来区分open(开放的)和 closed(关闭的)端口。利用了当端口关闭时,任何不包含SYN,RST,或者ACK位的报文会导致 一个RST返回,而当端口开放时,应该没有任何响应。

-sA (TCP ACK扫描)
ACK扫描探测报文只设置ACK标志位(除非您使用 --scanflags)。当扫描未被过滤的系统时, open(开放的)和closed(关闭的) 端口 都会返回RST报文。Nmap把它们标记为 unfiltered(未被过滤的),意思是 ACK报文不能到达,但至于它们是open(开放的)或者 closed(关闭的) 无法确定。不响应的端口 或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的)。

-Pn 跳过第一步,直接开始端口扫描
nmap默认扫描过程是
主机是否开机
端口扫描
服务探测

Nmap常用命令

1.扫描单个主机:nmap 192.168.56.133
2.扫描整个子网:nmap 192.168.56.0/24(24表示子网掩码位数)
3.扫描某个范围:nmap 192.168.56.1-110
4.扫描除过某一个ip外的所有子网主机

nmap 172.16.96.1/24-exclude 172.16.96.1

5.扫描特定主机上的端口

nmap -p80,443,22,23 192.168.56.111

6.OS侦测
-O: 启用操作系统检测。
-osscan-guess; --fuzzy :推测操作系统检测结果

 nmap -O --osscan-guess 172.16.96.205

Nmap实现原理分析

Nmap功能的实现基于TCP/IP协议,下面将曾从协议层面分析Nmap的实现原理。

  1. 主机发现

    主机发现通常在端口扫描以前,确定目标主机是否在线,也可以单独运行构建局域网拓扑。Nmap主机发现的实现分为两个阶段:地址解析阶段+实际探测阶段。地址解析主要负责从主机表达式中解析出目标主机地址,将之存放在hostbatch中,并配置该主机所需的路由、网口、MAC地址、源IP等信息。实际发现分别对解析出来的目标主机,进行实际的探测以及获取RDNS相关信息,例如采用ARP包发现局域网内主机是否在线。

    Nmap从主机表达式中获取主机地址,若取得的不是IP需要进行DNS解析,获取域名对应的IP。在实际主机发现过程中,根据所利用的协议的不同,分为以下两种:

    (1)利用IP层协议的方式:1)ARP方式。ARP方式一般用于Nmap对局域网进行扫描的情况下,因为基于RFC1918私有地址范围的网络中在一个给定的时间内绝大部分IP地址都是不使用的。当Nmap试图发送一个原始IP报文如ICMP回声请求时,操作系统必须确定对应于目标IP的硬件地址(需要使用ARP),所以直接放弃IP报文阶段,在得到ARP回应时就可以知道目标主机处于活跃状态。2)Ping扫描。仅仅进行ping扫描,发送ICMP数据包,将作出响应的主机进行打印。发扫描只是用来。

    (2)利用运输层协议的方式:1)发送SYN数据包、发送ACK数据包、发送UDP数据包。前两种分别利用了TCP三次握手中的第一次握手与第二次握手。让对方觉得正在试图建立一个TCP连接,从而做出回应,根据回应得出主机状态。UDP则是发送一个UDP数据包,得到端口不可达、主机网络不可达的回应。

  2. 端口扫描

    Nmap提供的10多种类型的端口扫描方法,如TCPSYN/ACK/FIN/Xmas/NULL/ Windows/Connect,FTP Bounce, Idle scan, UDP portunreachable/ UDP recv_from, IP protocol,SCTPINIT/SCTP COOKIE ECHO等扫描方式。这些技术全部是基于运输层与应用层的协议,原理都是基于网络数据包的特征或者网络编程API来判定端口的状态。以TCP SYN方式(Nmap的默认的TCP扫描方式)为例来简单地回顾端口扫描原理。

    第一种情况表示端口处于关闭状态,第二种情况表示端口处于开放状态。

    端口扫描功能会用到nmap-services数据库文件,此文件描述互联网上常见的注册端口对应的服务名称,以及该端口开放的频率和注释信息。端口开放的频率是Nmap项目组对互联网上大量的计算机进行扫描,统计出的每个端口开放的概率值,所以根据此概率可以很方便指定扫描覆盖的范围。

  3. 版本侦测

    扫描原理是服务指纹(或称签名)对比匹配。Nmap内部包含了几千种常见服务指纹的数据库(nmap-service-probes),对目标端口进行连接通信,产生当前端口的服务指纹,再与指纹数据库对比,寻找出匹配的服务类型。

    服务与版本侦测主要分为以下几个步骤:
    1) 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
    2)如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中ProbeTCP NULLq||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULLprobe中的签名进行对比。查找对应应用程序的名字与版本信息。
    3)如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
    4)如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
    5)如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
    6)如果探测到应用程序是SunRPC,调用brute-forceRPCgrinder进一步探测具体服务。

最后,引用一句王者荣耀游戏中达摩的一句话:走不通的路,就用拳头去打开。加油,路一定会通…

你可能感兴趣的:(测试渗透)