文章目录

  • 一、主机发现
    • 1、主机发现原理
    • 2、主机发现用法
  • 二、端口扫描
    • 1、端口状态
    • 2、端口扫描原理
    • 3、端口扫描用法
  • 三、服务和版本探测
    • 1、服务和版本探测原理
    • 2、服务和版本探测用法
  • 四、操作系统探测
    • 1、操作系统探测原理
    • 2、操作系统探测用法
  • 五、防火墙/IDS的绕过和欺骗
    • 1、防火墙绕过用法

一、主机发现

1、主机发现原理

使用Nmap进行主机发现时,主要是为了找到存活主机,方便我们进行后续测试。主机发现的原理和我们使用的ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。

默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否存活:
①ICMP echo request
②a TCP SYN packet to port
③a TCP ACK packet to port
④an ICMP timestamp request
依次发送这四个报文对目标主机进行探测,只要收到其中一个包的回复,目标主机存活。使用四种不同类型的数据包可以避免因防火墙或丢包造成错误判断。

2、主机发现用法

1、-sL(列表扫描):
列出指定网络上的每台主机,不发送任何报文到目标主机。
2、-sP(ping扫描):
进行ping扫描 (主机发现),然后打印出对扫描做出响应的主机。
3、-P0(无ping):
4、-PS(TCP SYN Ping):
发送一个设置了SYN标志位的空TCP报文,默认目的端口为80.
5、-PA(TCP ACK ping):
发送一个设置了ACK标志位的空TCP报文,默认目的端口为80.
6、-PU(UDP Ping):
发送一个空的UDP报文到目的端口,默认端口为31338.
7、-PE; -PP; -PM (ICMP Ping Types)
8、-PR (ARP Ping)
9、-n (不用域名解析)
10、-R (为所有目标解析域名)
11、--system-dns (使用系统域名解析器)

二、端口扫描

1、端口状态

①open:端口是开放的。
②closed:端口是关闭的。
③filtered:端口被防火墙、IDS、IPS等屏蔽,无法确定其状态。
④unfiltered:端口没有被屏蔽,但其是否开放需要进一步确定。
⑤open|filtered:端口是开放的或被屏蔽。
⑥closed|filtered :端口是关闭的或被屏蔽

2、端口扫描原理

进行端口扫描的原理和探测目标主机是否存活的原理类似,或者可以说Nmap进行探测活动的原理都是根据发送探测包之后的响应包的状态来进行判断的。

3、端口扫描用法

1、-sS(TCP SYN扫描)
该方式只发送SYN包到特定的端口,不建立完整的TCP连接,相对比较隐蔽,因此称为半开放扫描。发送一个SYN包到目标端口:
①收到SYN/ACK回复,判断端口时开放。
②收到RST包,判断端口关闭。
③没有收到回复,判断端口被屏蔽,为Filtered状态。2、-sT(TCP connect扫描)
在-sS扫描无法使用的情况下,我们才会使用-sT扫描,因为这种方式扫描速度过慢,而且容易在目标主机留下扫描信息。
TCP connect不向服务器发送原始报文,而是通过使用系统网络的API向目标主机发起连接,如果无法连接,说明端口时关闭状态。3、-sU(UDP扫描)
UDP扫描发送探测包到UDP端口:
①收到回复“ICMP port unreachable”,端口关闭。
②没有收到回复,端口Open|Filtered。4、-sN、 -sF、 -sX (TCP Null、FIN、Xmas扫描)
因为这三种方式较为隐蔽,因此称为秘密扫描。这三种扫描可以绕过一些无过滤防火墙和报文过滤路由器,但是大部分的IDS可以发现这三种扫描。发送探测包:
①收到RST回复包,端口关闭。
②没有响应,端口Open|Filtered。
③ICMP不可达,端口Filtered。
因此,这三种扫描是无法完全判断端口是否为Open状态。Null扫描 (-sN):不设置任何标志位(tcp标志头是0)
FIN扫描 (-sF):只设置TCP FIN标志位。
Xmas扫描 (-sX):设置FIN,PSH,和URG标志位。5、-sA(TCP ACK扫描)
发送ACK包到目标端口:
①收到RST包,端口未被屏蔽
②没有收到RST包,端口被屏蔽。6、-sW(TCP窗口扫描)
通过检查返回的RST报文的TCP窗口域来判断:
①窗口值为正数:开放。
②窗口值为0:关闭。
不支持-sW扫描的系统将返回所有端口为关闭状态,也就是窗口值为0.
7、-sM(TCP Maimon扫描)
探测报文是FIN/ACK,无论端口开放或者关闭,都响应RST报文。8、--scanflags(定制的TCP扫描)
可以通过指定任意TCP标志位设计自己的扫描方式。9、-sI(idle扫描)
对TCP端口进行盲扫,即不从真实IP发送任何数据包到目标端口,而是利用一台zomobie机。10、-sO(IP协议扫描)
可以确定目标主机支持哪些IP协议(如TCP、ICMP、IGMP等等)11、-b(FTP bounce扫描)
允许用户连接到FTP服务器,然后可以发送文件到第三方服务器。只要请求FTP服务器轮流发送一个文件到目标主机上的端口,错误消息会描述端口是开放还是关闭的。12、-P
指定端口号:
例如:nmap -p 22 ip/nmap -p 1-65535 ip/nmap -p 21,22 ip13、-F(快速扫描)
可以利用--datadir选项指定自己的nmap-services文件 。service文件中保存了所有端口号。14、-r(不按照随机顺序扫描端口)
默认情况下,Nmap按随机顺序扫描端口,也可以通过-r按照顺序来扫描端口。

三、服务和版本探测

1、服务和版本探测原理

主要是为了确认端口对应的服务以及确定服务的版本信息,我们也可以通过此信息去搜索相关的漏洞或者补丁。

服务和版本探测的原理主要如下:
①Nmap只能对Open和Open|Filtered状态的端口进行判断。
②如果是TCP端口,尝试建立TCP连接,在等待时间内,会接收到目标机发送的Welcome Banner信息,nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比,查找对应应用程序的名字与版本信息。在nmap-services-probes文件中,我们可以查看Nmap支持的服务。
③如果通过Welcome Banner无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将得到的回复包与数据库中的签名进行对比,
④如果反复探测都无法得出具体应用,则打印出应用返回报文,让用户自行判定。
⑤如果是UDP端口,则使用nmap-services-probes中的探测包进行探测匹配,判断UDP应用服务类型。
⑥如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL上的应用类型。
⑦如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。

2、服务和版本探测用法

1、-sV(版本探测)
进行版本探测,也可同时使用-A参数进行全扫描,进行操作系统探测和版本探测。
2、--allports(不为版本探测排除任何端口)
默认情况下,Nmap探测端口会跳过9100TCP端口,可指定--allports扫描所有端口。
3、--version-indensity(设置版本扫描强度)
4、--version-light(打开轻量级模式)
进行版本扫描时,速度会稍快一些,但是识别服务的可能性会略小。
5、--version-all(尝试每个探测)
保证对每个端口都使用报文进行探测。
6、--version-trace(跟踪版本扫描活动)
Nmap打印出正在进行的扫描的详细调试信息。
7、-sR(RPC扫描)
和其他参数结合使用。对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来确定他们是否为RPC端口,如果是,显示其程序和版本号

四、操作系统探测

1、操作系统探测原理

Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。

具体实现方式如下:
①选择一个open的端口和一个closed的端口,向其发送TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。
②将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

Nmap-os-db文件中包含了大部分已知系统的指纹特征。

2、操作系统探测用法

1、-O (启用操作系统检测)
也可以使用-A来同时启用操作系统检测和版本检测。-A为全扫描。2、--osscan-limit (针对指定的目标进行操作系统检测)
如果发现一个打开和关闭的TCP端口时,操作系统检测会更有效。采用这个选项,Nmap只对满足这个条件的主机进行操作系统检测,这样可以节约时间,特别在使用-P0扫描多个主机时。这个选项仅在使用-O或-A进行操作系统检测时起作用。3、--osscan-guess; --fuzzy (推测操作系统检测结果)
当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效。

五、防火墙/IDS的绕过和欺骗

1、防火墙绕过用法

-f; --mtu <val>: 指定使用分片、指定数据包的MTU.-D <decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。-S <IP_Address>: 伪装成其他IP地址-e <iface>: 使用特定的网络接口-g/--source-port <portnum>: 使用指定源端口--data-length <num>: 填充随机数据让数据包长度达到Num。--ip-options <options>: 使用指定的IP选项来发送数据包。--ttl <val>: 设置time-to-live时间。--spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址--badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。

工具----2、Nmap扫描原理及用法详解相关推荐

  1. Nmap扫描原理与用法

    1     Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字N ...

  2. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  3. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  4. python字符串strip的作用_Python字符串函数strip()原理及用法详解

    Python字符串函数strip()原理及用法详解 strip:用于移除字符串头尾指定的字符(默认为空格)或字符序列.注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符. 语法:str.s ...

  5. python装饰器原理-Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  6. python function at 0x00000_Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  7. java 字节缓冲_Java字节缓冲流原理与用法详解

    本文实例讲述了Java字节缓冲流原理与用法.分享给大家供大家参考,具体如下: 一 介绍 BufferInputStresm和BufferOutputStream 这两个流类为IO提供了带缓冲区的操作, ...

  8. mysql的存储过程原理_mysql存储过程原理与用法详解

    本文实例讲述了Mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018- ...

  9. python适配器模式角色_Python设计模式之适配器模式原理与用法详解

    本文实例讲述了Python设计模式之适配器模式原理与用法.分享给大家供大家参考,具体如下: 适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口. 下面是一个适配 ...

最新文章

  1. 学习C语言必须知道的理论知识(第二章-算法)
  2. android studio 与gradle的版本对应
  3. ecshop获取客户端操作系统
  4. react(80)--判断值是否udefined
  5. 洛谷P1690 贪婪的Copy 题解
  6. SQL Server 2008 (R2) 单机版安装的先决条件
  7. 图书管理系统数据库SQL设计思路
  8. CentOS8 dnf软件包管理配置
  9. 默哀日网站置灰,支持IE浏览器h5
  10. Python中求矩阵的逆
  11. 微信公众号模板消息换行符号
  12. 将yolov5的detect.py改写成可以供其他程序调用的方式,并实现低时延(<0.5s)直播推理
  13. 知识管理:新时代企业竞争力核心
  14. select t.* , t.rowid from-对查询出来的sql语句进行编辑
  15. C语言教辅书答案,《C语言程序设计上机指导与习题解答》任正云 主编;李素若_孔网...
  16. 计算机通信网络试题,计算机网络与通信试题(含答案).doc
  17. 白话学习防火墙 2 之IPS和IDS
  18. 用Carbide.c++开发Symbian入门 1
  19. matlab用进退法写程序,matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...
  20. 关于EMAS的一点想法

热门文章

  1. brk系统调用实现分析
  2. 【 python手势识别项目 】百度云计算实现手势识别
  3. 全国计算机一级基础知识考什么,2018全国计算机一级考试大纲
  4. Excel学习笔记-函数(Sumif、Vlookup、Hlookup、Match、Index)
  5. jquery 中substring,substr,split的用法
  6. mysql linux初始化密码_linux mysql初始化密码
  7. OpenCV-Python官方教程-22-Harris角点检测
  8. Google Earth Engine(GEE)——全球JRC/GSW1_1/YearlyHistory数据集的批量下载(中国区域)
  9. matlab简单绘图
  10. js替换字符串某个字符,js修改字符串中指定字符