Nmap端口扫描
Nmap端口扫描
主机发现
原理:和ping相似,发送检测包到目的主机,如果收到回复则说明主机存活
默认情况下nmap主机发送会发送以下四种类型的探测包:
ICMP echo request
TCP 去目标主机80端口的SYN包
TCP 去目标主机80端口的ACK包
一个CIMP时间戳请求
主机发现常用参数
-sn :只进行主机发现,不进行端口扫描
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。
端口扫描
端口扫描是nmap最核心的功能,原理是通过TCP握手过程的SYN包,ACK包,或者TCP connect()、发送空的udp报文等方式,看所扫描的的端口是否有回应,来判断该端口的是否开放或者被过滤等状态。
默认扫描
Nmap scanme.nmap.org
-Pn:用于取消ICMP 从而不触发目标机器防火墙
-sV:识别目标机器的服务信息
Nmap -A -v -T4 scanme.nmap.org --带有侵略性的扫描服务信息(-A 侵略性 -v 过程详细信息 -T4 0-5 设置扫描速度)
**Nmap -sC -sV -o scanme.nmap.org **
--作用同上条 (-sC 表示使用nmap脚本探测 -sV探测服务信息 -o 探测操作系统信息)
Nmap -p 80 192.168.192.163
--特定端口扫描(扫描80端口)也可以 -p 80,135 扫多个端口;也可以 -p1-100 扫描1-100的端口号 ;-p- 扫描所有端口
Nmap -Pn -p T:25,U:53 10.173.20.153
探测TCP 25号端口 UDP53号端口--指定协议探测端口
Nmap -p ssh 10.173.20.153
--探测指定协议
使用nmap脚本进行探测
wins下nmap的脚本在nmap/scripts下
linux下nmap脚本在/usr/share/nmap/script/下
用法:Nmap --script 脚本名 192.168.198.136
如: Nmap --script http-headers 192.168.198.136 (使用http-headers脚本)
Nmap -sV --script vuln 192.168.198.136(使用vuln脚本)
http-enum.nse(敏感文件扫描)
更新脚本库
nmap --script-updatedb
端口状态
Open:应用程序正在该端口接收 TCP 连接或者 UDP 报文
closed:关闭的端口对于 Nmap 也是可访问的(它接受 Nmap 的探测报文并作出响应),但没有应用程序在其上监听。
filtered:由于包过滤阻止探测报文到达端口,Nmap 无法确定该端口是否开放。(可能有防火墙)
unfiltered:未被过滤状态意味着端口可访问,但 Nmap 不能确定它是开放还是关闭。
open/filtered:当无法确定端口是开放还是被过滤的,Nmap 就把该端口划分成 这种状态。开放的端口不响应就是一个例子
closed/filtered:该状态用于 Nmap 不能确定端口是关闭的还是被过滤的。 它只可能出现在 IPID Idle 扫描中
TCP扫描类型
- TCP ACK 扫描(-sA)
发送ACK报文,通过目标机器的响应来判断是否开放,
- 半开扫描、SYN包扫描(-sS)
用户可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接。扫描记录不容易被记录到日志中,具有隐蔽性。
- TCP完整三次握手扫描(-sT)
与目标端口完整完成tcp三次握手,效率较低,会被日志记录
- 窗口扫描(-sW)
发出的报文和ACK一样,利用的是在某些系统中如果端口开放,收到ACK包后会响应一个窗口非0的RST包
UDP扫描类型
UDP扫描(-sU)
利用某些系统如果UDP端口不开放会回复ICMP差错报文。Nmap UDP端口扫描的强大之处在于它会针对知名端口构造初始交互报文,比如会针对UDP 500构造一个主模式协商的IKE报文
nmap常用指令
nmap -sT 192.168.2.146 --tcp探测端口开放情况
nmap -sS 192.168.2.146 --syn包隐藏扫描端口开放情况
nmap -sU 192.168.2.146 --UDP查看端口开放情况
nmap -sS -P0 -sV -O 192.168.2.146 --探测操作系统类型以及端口
使用python-nmap模块扫描
最常使用的是PortScanner类和PortScannerSycn
import nmap
nm = nmap.PortScanner()
常用函数
scan()
作用 填写参数对主机进行扫描
用法:
-
nm.scan("127.0.0.1","1-500","-sS") --端口扫描
-
nm.scan("192.168.1.0/24") --扫描网段主机
all_hosts()
作用返回被扫描对象所有主机列表
csv()
返回结果整理
has_host(ip=ip)
是否存活ip主机,返回布尔值