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

  

nmap参数原理抓包分析的更多相关文章

  1. SMB协议原理抓包分析

    SMB协议原理抓包分析 目录: 1.SMB概述 2.SMB原理 3.SMB配置 一.SMB概述 SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件.打印机. ...

  2. SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议

    SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议 实验环境: Kali msf以及wireshark Win7开启网络共享(SMB协议) 实验步骤: 1.查看本机数据库是否开启,发现数 ...

  3. Nmap 常用命令及抓包分析

    1.主机发现:主机发现也称为ping扫描,但是Nmap中主机发现的技术已经不是简单的采用ping工具发送简单的ICMP回声请求报文.用户完全可以通过使用列表扫描(-sL)或者通过关闭ping(-P0) ...

  4. Nmap扫描与Tcpdump抓包分析

    扫描与抓包分析 3.1 问题 本案例要求熟悉Linux主机环境下的常用安全工具,完成以下任务操作: 使用NMAP扫描来获取指定主机/网段的相关信息 使用EtterCAP截获明文通信的密码.检测非加密通 ...

  5. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

  6. [转] Android实时抓包分析 : 善用adb调试桥

    Android实时抓包分析 : 善用adb调试桥   谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump.方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包 ...

  7. 转:tcpdump抓包分析(强烈推荐)

    转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...

  8. 使用Charles进行移动APP抓包分析

    一.简介 Charles是目前最强大最流行的http抓包调试工具,Mac.Unix.Windows各个平台都支持.特别是做APP开发,调试与服务端的通信,Charles是必备工具. 目前Charles ...

  9. 抓包分析LVS-NAT中出现的SYN_RECV

    CIP:192.168.10.193 VIP:192.168.10.152:8000 DIP:100.10.8.152:8000 RIP:100.10.8.101:8000 和 100.10.8.10 ...

随机推荐

  1. Go基础系列:双层channel用法示例

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 双层通道的解释见Go的双层通道 ...

  2. C#线程安全类型

    1.IProducerConsumerCollection (线程安全接口) 此接口的所有实现必须都启用此接口的所有成员,若要从多个线程同时使用. using System; using System ...

  3. MVC 视图助手书写规范及注意点

    @Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...

  4. C#隐藏与显示系统任务栏和开始菜单栏按钮

    隐藏与显示系统任务栏和开始菜单栏按钮:直接上代码:       private const int SW_HIDE = 0;  //隐藏       private const int SW_REST ...

  5. 3. 原子变量-CAS算法

    1. 是什么 ? 2. CAS算法模拟 package com.gf.demo03; public class TestCompareAndSwap { public static void main ...

  6. JSJ—编译器与虚拟机哪个重要?

    阅读本文约“2分钟” 熟悉Java的朋友都知道虚拟机还有编译器,那么它们各自主要的功能是什么?谁比较重要呢?让我们来了解一下这两位美女的故事. 虚拟机可以说就是Java,她能让程序运行起来. 但是编译 ...

  7. 不容易系列之一(hdu1465)错排+递推

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. 2.对于所有对象都通用的方法_EJ

    第8条: 覆盖equals时请遵守通用约定 我们在覆盖equals方法时,必须遵守它的通用约定: 1.自反性.对于任何非null的引用值x,x.equals(x)必须返回true: 2.对称性.对于任 ...

  9. Java并发编程-看懂AQS的前世今生

    在具备了volatile.CAS和模板方法设计模式的知识之后,我们可以来深入学习下AbstractQueuedSynchronizer(AQS),本文主要想从AQS的产生背景.设计和结构.源代码实现及 ...

  10. vue的data的数据进行指定赋值,用于筛选条件的清空,或者管理系统添加成功后给部分数据赋值为空

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...