Nmap端口扫描

Nmap端口扫描

主机发现

原理:和ping相似,发送检测包到目的主机,如果收到回复则说明主机存活

默认情况下nmap主机发送会发送以下四种类型的探测包:

ICMP echo request

TCP 去目标主机80端口的SYN包

TCP 去目标主机80端口的ACK包

一个CIMP时间戳请求

image-20210115102506054

image-20210115102705259

主机发现常用参数

  -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

image-20200917161426206

-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()

作用 填写参数对主机进行扫描

image-20210202160940445

用法:

  • nm.scan("127.0.0.1","1-500","-sS") --端口扫描

  • nm.scan("192.168.1.0/24") --扫描网段主机

all_hosts()

作用返回被扫描对象所有主机列表

csv()

返回结果整理

has_host(ip=ip)

是否存活ip主机,返回布尔值

其他获取内容的操作

image-20210202163953449

posted @ 2021-07-10 14:39  cjz12138  阅读(1419)  评论(0编辑  收藏  举报