zoukankan      html  css  js  c++  java
  • nmap参数原理抓包分析

    nmap参数原理抓包分析

    实验环境:

    Nmap7.70

    实验步骤:

    1.主机发现

    2.端口扫描

    3.服务版本探测

    一、主机发现

    主机发现,如果主机活跃,扫描1000个常用的tcp端口

    1、Nmap ip   #默认进行主机发现、端口扫描、服务版本探测等

    1.1先以一个不存在的ip为例:nmap 1.2.3.4 抓包分析

      

    可以看到如果没有给出主机发现选项,nmap默认使用以下四种方式来确认目标机器是否活跃(只有以下四种方式任意一个得到目标的响应就可以说明目标主机存活)

    1.nmap就发送一个ICMP 回声请求到每台目标机器,

    2.TCP ACK 报文到80端口,

    3.TCP ACK 报文到443端口,

    4.还有一个基于时间的ICMP请求到每台目标机器

      

      从上图可以看到,nmap不带参数默认使用上面的四种方式来确定目标机器是否存活

    1.2再以一个存在的ip为例:nmap 121.194.14.84  抓包分析

     可以看到获得扫描成功的结果

      

    分析抓包的数据,可以看到目标机器对ICMP回显请求响应了,对基于时间的icmp请求响应了,对TCP ACK 报文到80端口和TCP ACK 报文到443端口响应了

      

    得到主机存活之后,就开始了扫描1000个常用的端口(默认扫描的端口)

      

    2、nmap -sP ip    #ping扫描 只主机发现  #须注意,目标必须是公网ip,局域网ip本参数无效,因为局域网扫描时,默认使用ARP扫描目标(-PR参数)

    该选项告诉Nmap仅仅进行ping扫描 (主机发现),然后打印出对扫描做出响应的那些主机 。 没有进一步的测试 (如端口扫描或者操作系统探测)

    2.1以一个存在的IP为例: nmap -sP 121.194.14.84  抓包分析

    可以看到只进行主机发现,没有进一步的测试

      

    可以看到抓取的数据包只有关于主机发现的数据,得到目标主机存活之后也没有进行下一步测试(因为nmap -sP参数的限制)

      

    要注意的是即使 您指定了其它 -P*选项,ARP发现(-PR)对于局域网上的 目标而言是默认行为,因为它总是更快更有效。

    2.2下面以nmap -sP 192.168.43.200  为例扫描一个局域网IP,抓包分析  #注意目标IP是局域网IP

    下图可以看到,局域网扫描可以获得目标主机的MAC地址

      

    可以看到下图的抓包,虽然使用的是-sP参数,但因为是在局域网内扫描目标IP,默认使用ARP扫描

      

    3.nmap -P0  ip   #无ping 跳过主机发现  把目标ip看成是活跃的直接进行高强度扫描(端口扫描、服务版本探测或操作系统版本探测等)

    该选项完全跳过 Nmap发现阶段。通常nmap在进行高强度的扫描时用它确定正在运行的机器

    3.1以一个存在的IP为例: nmap -sP 121.194.14.84  抓包分析

    运行的结果如下:

      

    通过查看下图抓取的数据包,可以看到没有进行主机发现,直接进行高强度的扫描

      

    4.nmap -PS  ip   #TCP SYN 扫描   主机发现只连接目标的tcp 80端口,不使用ICMP

    只要目标主机响应TCP SYN 就说明目标主机是活跃的,无论响应的是哪种数据包(RST或者SYN/ACK)

    该选项发送一个设置了 SYN 标志位的空 TCP 报文, 默认目的端口为80, 但不同的端口也可以作为选项指定。甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000),在这种情况下,每个端口会被并发地扫描。

    SYN 标志位告诉对方您正试图建立一个连接。通常目标端口是关闭的,一个RST(复位) 包会发回来。 如果碰巧端口是开放的,目标会进行 TCP 三步握手的第二步,回应 一个 SYN/ACKTCP报文。然后运行 Nmap 的机器则会扼杀这个正在建立的连接,发送一个 RST 而非 ACK报文,否则,一个完全的连接将会建立。 RST 报文是运行 Nmap 的机器而不是 Nmap 本身响应的,因为它对收到 的 SYN/ACK感到很意外。

    Nmap 并不关心端口开放还是关闭。 无论 RST 还是 SYN/ACK响应都告诉 Nmap 该主机正 在运行。

    4.1以一个存在的IP为例: nmap -PS 121.194.14.84  抓包分析

    可以看到目标响应一个SYN/ACK包,说明目标ip是活跃的,然后便进行默认端口扫描

      

    4.2 nmap -PS ip 也可以指定端口(不指定默认1000个常用的端口)

    下面以nmap -PS 192.168.43.200 -p 80,443,53为例,抓包分析

      

    分析下图的数据包可以看到扫描53端口的过程:nmap发送TCP SYN包到目标IP,目标IP响应SYN/ACK包,nmap不进行第三次握手(ACK包),就直接发送RST包。这就是-PS参数的特点。

      

    5.nmap -PA ip  #TCP ACK 扫描  

    TCPACK ping 和刚才讨论的 SYN ping相当类似。区别就是设置 TCP 的 ACK标志位而不是 SYN 标志位。-PA选项使用和 SYN 探测(-PS)相同的默认端口(80)

    ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。 所以远程主机应该总是回应一个 RST 报文, 因为它们并没有发出过连接请 求到运行 Nmap 的机器,如果它们正在运行的话。

    由于没头没脑的 ACK 报文通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定 -PS 又指定-PA来即发送 SYN又发送 ACK。

    5.1以一个存在的IP为例: nmap -PS 121.194.14.84  抓包分析

      

    分析抓取到的数据,可以看到主机发现的过程(默认以80端口作为主机发现):namp直接发送一个ACK的报文到目标IP,目标IP响应RST报文,说明主机存活

      

    5.2带端口的跟不带端口的原理一样,这里不进行测试了。

    5.3由于没头没脑的 ACK 报文通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定 -PS 又指定-PA来即发送 SYN又发送 ACK。

    以一个存在的IP为例: nmap -PS  -PA  121.194.14.84  抓包分析

      

    可以看到同时应用了-PS和-PA参数就构造成了一个完整的数据包,不会轻易被防火墙拦截丢弃

      

    6.namp -PU  ip   #UDP扫描

    它发送一个空的(除非指定了--data-length)UDP报文到给定的端口。端口列表的格式和前面讨论过的-PS 和-PA选项还是一样。如果不指定端口,默认是31338。

    如果目标机器的端口是关闭的,UDP 探测应该马上得到一个 ICMP 端口无法到达的回应报 文。 这对于 Nmap 意味着该机器正在运行。

    一个存在的IP为例: nmap -PU  121.194.14.84  抓包分析

      

    分析抓取的数据包,可以发现nmap给目标机器的端口31338(默认的UDP端口),得到响应的是目标不可达,说明目标机器是存活的。(因为31338端口是一个关闭的端口)

      

    二、端口扫描

    1.Nmap -sS ip    #半连接 2/3 默认用-sP去发现主机,如果没结果请尝试改成-PS或者-PU 或者-P0

    SYN 扫描作为默认的也是最受欢迎的扫描选项, SYN 扫描相对来说不张扬,不易被注意到,因为它从来不完成 TCP连接

    它常常被称为半开放扫描,因为它不打开一个完全的TCP连接

    一个存在的IP为例: nmap -sS  121.194.14.84  抓包分析

      

    下面以80端口为例,分析-sS参数的过程,namp发送一个SYN报文到目标IP,目标IP响应一个SYN/ACK报文,然后nmap就不回复了。

      

    2.Nmap -sT ip    #全连接3/3  默认用-sP去发现主机,如果没结果请尝试改成-PS或者-PU 或者-P0

    一个存在的IP为例: nmap -sT  121.194.14.84  抓包分析

    下面以443端口为例,分析-sS参数的过程: namp发送一个SYN报文到目标IP,目标IP响应一个SYN/ACK报文,然后nmap回复ACK。

      

    三、服务版本探测

    一个存在的IP为例: nmap -sV  121.194.14.84

      

  • 相关阅读:
    解决Thread 的关闭问题
    使用.NET实现断点续传
    如何将int类型数据转换成byte数组
    怎么样读取Excel表格中的数据(C#.Net)
    .NET平台下WEB应用程序的部署(安装数据库和自动配置)
    ASP.NET程序中常用的三十三种代码
    C#中的类型转换
    解决StreamReader读取中文出现乱码的问题
    C#下的Raw Socket编程实现网络封包监视
    利用键盘钩子在Windows平台下捕获键盘动作
  • 原文地址:https://www.cnblogs.com/yuzly/p/10458997.html
Copyright © 2011-2022 走看看