nmap端口扫描

Author Avatar
Song
发表:2025-01-18 10:25:00
修改:2025-01-18 10:46:17

 nmap(Network Mapper)是一款开源免费的针对大型网络的端口扫描工具,nmap可以检测目标主机是否在线、主机端口开放情况、检测主机运行的服务类型及版本信息、检测操作系统与设备类型等信息。本文主要介绍nmap工具安装和基本使用方法。

nmap主要功能

(1)检测主机是否在线。例如,列出响应TCP和/或ICMP请求或打开特定端口的主机。

(2)扫描指定主机/主机列表端口开放状态,枚举目标主机上的开放端口,常用。

(3)检测主机运行服务类型及版本,检测远程设备上的网络服务以确定应用程序名称和版本号。

(4)检测操作系统版本和设备类型 ,确定网络设备的操作系统和硬件特性。

(5)可与脚本进行脚本交互,使用Nmap脚本引擎(NSE)和Lua编程语言。

nmap命令使用方法

  namp [ 扫描类型 ] [ 通用选项 ] [ 扫描目标 ]

  扫描类型:

  -sT:TCP connect()扫描,这是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听, connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。 

 -sS:TCP同步扫描(TCP SYN),因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接,这实际上有我们的操作系统内核自动完成的。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。

  -sU:UDP扫描,发送0字节UDP包,快速扫描Windows的UDP端口如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我们收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。

  -sP:ping扫描,有时你只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务。注意,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果你只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。

  -sA:ACK扫描 TCP ACK扫描,当防火墙开启时,查看防火墙有未过虑某端口,这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。

  -sW:滑动窗口扫描,这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。  

  -sR:RPC扫描,和其他不同的端口扫描方法结合使用。

  -b:FTP反弹攻击(FTP Bounce attack) 外网用户通过FTP渗透内网

通用选项

  -P0:nmap扫描前不Ping目标主机。在扫描之前,不必ping主机。有些网络的防火墙不允许ICMP echo请求穿过,使用这个选项可以对这些网络进行扫描。

  -PT:nmap扫描前使用TCP ACK包确定主机是否在运行(-PT默认80。扫描之前,使用TCP ping确定哪些主机正在运行。nmap不是通过发送ICMP echo请求包然后等待响应来实现这种功能,而是向目标网络(或者单一主机)发出TCP ACK包然后等待回应。如果主机正在运行就会返回RST包。只有在目标网络/主机阻塞了ping包,而仍旧允许你对其进行扫描时,这个选项才有效。对于非 root用户,我们使用connect()系统调用来实现这项功能。使用-PT 来设定目标端口。默认的端口号是80,因为这个端口通常不会被过滤。  

 -PS: nmap使用TCP SYN包进行扫描。对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。如果主机正在运行就返回一个RST包(或者一个SYN/ACK包)。

   -PI:nmap进行Ping扫描。设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。使用这个选项让nmap发现正在运行的主机的同时,nmap也会对你的直接子网广播地址进行观察。直接子网广播地址一些外部可达的IP地址,把外部的包转换为一个内向的IP广播包,向一个计算机子网发送。这些IP广播包应该删除,因为会造成拒绝服务攻击(例如 smurf)。

  -PB:结合-PT和-PI功能,这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。

  -O:Nmap扫描TCP/IP指纹特征,确定目标主机系统类型。

  -I:反向标志扫描,扫描监听端口的用户

  -f:分片发送SYN、FIN、Xmas、和Null扫描的数据包

  -v:冗余模式扫描,可以得到扫描详细信息

  -oN: 扫描结果重定向到文件

  -resume:使被中断的扫描可以继续

  -iL:-iL,扫描目录文件列表

  -p:-p 指定端口或扫描端口列表及范围,默认扫描1-1024端口和/usr/share/nmap/nmap-services文件中指定端口。-p例:23;20-30,139,60000-这个选项让你选择要进行扫描的端口号的范围。例如,-p 23表示:只扫描目标主机的23号端口。-p 20-30,139,60000-表示:扫描20到30号端口,139号端口以及所有大于60000的端口。

扫描目标

  扫描目标通常为IP地址或IP列表

   192.168.10.1

  192.168.10.0/24

  192.168.*.*

nmap扫描基本场景

  1、使用TCP SYN发现活跃主机

   nmap -PS 192.168.1.0/24

  2、使用TCP方式扫描端口

    nmap -sS -sV -n -p1-65535 -oX tcp.xml 192.168.1.0

  3、使用UDP方式扫描端口

  nmap -sS -sU -n -p1-65535 -oX udp.xml 192.168.1.0

  4、判断操作系统

  nmap -O 192.168.1.0/24

  5、判断服务版本

  nmap -sV 192.168.1.0/24

端口分类和扫描端口状态分析

1、端口分类

  公认端口(well-known port):从0至1024,最常用端口,通常与协议绑定;

  注册端口(registered port):从1025至49151,这些端口已经注册到服务协议上;

  动态或私有端口(dynamic/private port):从49152至65535。

  另外,端口还与协议相关;比如:UDP端口53通常用于DNS查询、TCP端口53通常用于DNS记录迁移。

2、扫描结果端口状态说明

  open:目标端口开启。

  closed:目标端口关闭。

  filtered:通常被防火墙拦截,无法判断目标端口开启与否。

  unfiltered:目标端口可以访问,但无法判断开启与否。

  open | filtered:无法确定端口是开启还是filtered。

  closed | filtered:无法确定端口是关闭还是filtered。

nmap官方文档(opens new window)

常用参数 #

nmap -T4 -A -v -Pn IP	
#最常用的一种扫描

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

主机发现 #

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 -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地址

评论