《网络安全自学教程》- Nmap使用及扫描原理分析

《网络安全自学教程》

在这里插入图片描述

Nmap(Network Mapper)是一款免费的开源网络扫描器,向目标主机发送特定的数据包,根据返回的流量特征,分析主机信息。主要功能有:「端口扫描」「主机探测」「服务识别」「系统识别」

在这里插入图片描述

Nmap使用教程

  • 1、端口扫描
    • 1.1、 指定端口
    • 1.2、 指定扫描方式
      • 1.2.1、 TCP全连接扫描
      • 1.2.2、 SYN半链接扫描
      • 1.2.3、 隐秘扫描
      • 1.2.4、 扫描UDP端口
  • 2、主机发现
    • 2.1、指定主机
    • 2.2、Wireshark抓包分析主机发现原理
      • 2.2.1、局域网外
      • 2.2.2、局域网内
  • 3、服务识别
  • 4、系统识别
  • 5、扫描结果导出
  • 6、NES脚本

kali 自带 nmap 「终端」输入 nmap 可以看到 nmap 的版本,证明 nmap 可用。

在这里插入图片描述

参数:

  • -p 指定端口(端口探测)
  • -sT 指定扫描方式为 TCP全连接
  • -sS 指定扫描方式为 SYN半连接
  • -sF 指定扫描方式为 Fin扫描
  • -sN 指定扫描方式为 Null扫描
  • -sX 指定扫描方式为 Xmas扫描
  • -sU 扫描UDP端口
  • -sP 指定网段(主机探测)
  • -sn 指定网段(主机探测)
  • -sV 识别服务指纹
  • -o 识别操作系统
  • -oN 导出结果为txt
  • -oX 导出结果为xml
  • --script 指定脚本
  • --script-args 指定脚本参数

1、端口扫描

扫描主机的「开放端口」,在nmap后面直接跟主机IP(默认扫描1000个常用端口)

nmap 192.168.31.180

在这里插入图片描述

从上图可以看到:它用1.58秒扫描了1000个端口,其中991个端口关闭,9个端口开放,并列出了开放端口对应的服务。

STATE栏显示「端口状态」

  • open:开放
  • closed:关闭
  • filterd:被过滤,未收到返回报文
  • unfilterd:未被过滤,收到返回报文,但无法确认是否开放
  • opend/unfilterd:开放或未被过滤
  • closed/unfilterd:关闭或未被过滤

1.1、 指定端口

扫描「指定端口」,使用 -p 参数,可以一次扫描单个端口、多个端口、或扫描一个范围的端口

nmap 192.168.31.180 -p 80				# 单个端口
nmap 192.168.31.180 -p 1-80				# 多个端口
nmap 192.168.31.180 -p 80,3389,22,21	# 多个端口
nmap 192.168.31.180 -p 1-65535			# 全端口
nmap 192.168.31.180 -F					# 扫描常见的100个端口
nmap 192.168.31.180 -p-					# 全端口(-p- 等价于 -p 1-65535)
nmap 192.168.31.180 -p ssh				# 扫描指定协议,非默认端口也能识别出来
nmap 192.168.31.180 -p s*				# 扫描s开头的协议
nmap 192.168.31.180 -p $(tr "\n" "," < ports.txt) # 读取文本中的端口

在这里插入图片描述

实际渗透时,扫描全端口可能会对服务器造成压力,尽量扫描指定端口。

1.2、 指定扫描方式

  • 「root身份」运行Nmap,默认使用SYN扫描。
  • 「非root身份」运行Nmap,默认使用TCP全连接扫描。

我们通过kali中的「wireshark」抓包分析不同扫描方式的请求信息,从而判断这些方式的区别。

点开kali的左上角,输入 wireshark 单击打开,选择抓包的网卡(我这里是 eth0 )。

在这里插入图片描述

输入过滤条件ip.addr == 192.168.31.180 and tcp.port == 80后,点击箭头应用。

在这里插入图片描述

这个过滤条件的意思是:过滤IP地址是 192.168.31.180 并且 端口是 TCP的80端口。

设置完过滤条件后,我们在命令行执行扫描命令,然后查看「wireshark」中的请求包。


1.2.1、 TCP全连接扫描

使用 -sT 参数对目标主机的80端口进行TCP全连接扫描。

「全连接扫描」使用完整的三次握手建立连接,能够建立连接就判定端口开放,否则判定端口关闭。

nmap 192.168.31.180 -p 80 -sT

1)如果端口开放,就会进行完整的三次握手,成功建立链接,扫描结果中,STATE字段显示为 open

在这里插入图片描述

2)如果端口关闭,就只能进行一次握手,无法建立连接,扫描结果中,STATE字段显示为 closed

在这里插入图片描述

1.2.2、 SYN半链接扫描

使用 -sS 参数进行SYN半连接扫描,「半链接扫描」只进行两次握手,根据对方的返回信息判断端口状态。

  • 返回确认帧 SYN + ACK 就表示端口开放。
  • 返回Reset RST + ACK 就表示端口关闭。
  • 无响应就重新发送SYN,持续不响应,就表示被防火墙屏蔽了。
nmap 192.168.31.180 -p 80 -sS

1)如果端口开放,就会进行两次握手,扫描结果中,STATE字段为 open

在这里插入图片描述

2)如果端口关闭,就只有一次握手,扫描结果中,STATE字段为 closed

在这里插入图片描述

1.2.3、 隐秘扫描

隐秘扫描,只适用于Linux系统。

「隐秘扫描」向目标主机的端口发送TCP FIN包 或 Xmas tree包 或 Null包,如果收到RST响应包,就判定端口关闭,否则就判定端口开放或被屏蔽(open/filtered)

nmap 127.0.0.1 -p 80 -sF	# Fin扫描
nmap 127.0.0.1 -p 80 -sN	# Null扫描(所有flags都为0的TCP包)
nmap 127.0.0.1 -p 80 -sX	# Xmas扫描(flags的FIN、URG、PUSH都为1的包)

1.2.4、 扫描UDP端口

nmap默认发送TCP报文探测端口,也就是只能扫描TCP端口。

使用 -sU 参数扫描UDP端口,根据对方返回的信息,判断端口状态。

  • 应用返回信息,表示端口开放。
  • ICMP返回端口不可达,表示端口关闭。
  • 无回应,表示端口被过滤。

1)如果端口开放,对应端口的应用就会返回报文,扫描结果中,STATE字段显示open。

在这里插入图片描述

2)如果端口关闭,ICMP就会返回不可达报文,扫描结果中STATE字段显示closed。

在这里插入图片描述
由于UDP是无状态协议,没有ACK或REST这种确认信息,只能等端口对应的服务响应信息,所以需要等待较长的时间,扫描速度比TCP慢很多,建议每次只扫描一个UDP端口。

2、主机发现

扫描网段中有哪些主机在线,使用 -sP-sn参数,不扫描端口,只扫描「存活主机」

nmap -sP 192.168.31.0/24

在这里插入图片描述

从上图可以看到:它用2秒扫描了这个网段的256个IP,其中有3个存活主机。

2.1、指定主机

使用-sP参数,扫描指定主机,可以扫描单个IP、多个IP、IP段。

nmap -sP 192.168.153.242	# 单个IP
nmap -sP 192.168.153.242 192.168.153.243 192.168.153.244	# 多个IP
nmap -sP 192.168.153.0/24	# IP段
nmap -sP -iL iplist.txt		# 指定文件中的IP

在这里插入图片描述

2.2、Wireshark抓包分析主机发现原理

Nmap依次发送「四种不同的报文」,只要收到「其中一个」包的回复,就判断主机存活。

  1. ICMP Echo request
  2. TCP SYN 到443端口
  3. TCP ACK 到80端口
  4. ICMP Timestamp request

发送四个不同的包,是为了防止防火墙「丢包」

如果是局域网的主机,则发送「ARP广播」,收到返回的ARP单播,就判断主机存活。

2.2.1、局域网外

1)ping www.baidu.com,获取百度IP。

2)打开wireshark,开始抓包。

3)执行nmap -sP 百度IP,探测主机是否存活。

在这里插入图片描述

从抓包结果可以看到,Nmap向目标主机依次发送了四个不同类型的包,百度给我们回复了三个。因此,Nmap判断目标主机存活,在终端打印 Host ip up。

2.2.2、局域网内

1)打开wireshark,开始抓包。

2)执行 nmap -sP 局域网IP,探测主机是否存活。

在这里插入图片描述

从抓包结果可以发现,nmap广播了目标主机的ARP请求,收到ARP响应后,判断目标主机存活,在终端上输出 Host is up。ARP响应中携带了目标主机的MAC地址,这里也额外打印出来了。


3、服务识别

Nmap根据服务对应的「默认端口」进行匹配,比如mysql默认使用3306,扫描到3306端口时,就在后面标注服务是mysql,如果目标服务器把服务的默认端口改了,Nmap就测不准了。

扫描端口时,默认显示端口对应的服务,但不显示服务版本。

想要识别具体的「服务版本」,可以使用 -sV 参数。

nmap 192.168.31.180 -p 80 -sV

在这里插入图片描述
扫描结果中,VERSION字段显示服务的详细版本。

4、系统识别

想要识别「操作系统版本」,可以使用 -O 参数。

nmap 192.168.31.180 -p 80 -O

在这里插入图片描述
提示:

  1. Nmap扫描出的系统版本并完全准确,仅供参考。
  2. 当识别不出具体版本时,Nmap会以概率的形式列举出可能的操作系统,如上图所示。

5、扫描结果导出

Nmap的扫描结果可以保存到文件中,比如文本格式、XML格式。

1)将扫描结果导出为「文本格式」,结果原样保存。

nmap 192.168.31.180 -p 80 -oN result.txt

在这里插入图片描述

2)将扫描结果导出为「xml格式」,结果的保存格式会发生变化。

nmap 192.168.31.180 -p 80 -oX result.xml

在这里插入图片描述

6、NES脚本

NES(Nmap Script Engine)Nmap脚本引擎,内置了几百个 lua 编写的「扫描脚本」,脚本存放在 /usr/share/nmap/scripts/ 目录下。

命令格式 : nmap --script 脚本名 110.242.68.4

比如:nmap --script http-headers 110.242.68.4

nmap --script http-headers			# 使用单个脚本
nmap --script="version,discovery"	# 使用多个脚本
nmap --script="not exploit”"		# 除了exploit,其他脚本都使用
nmap --script"(http*) and not (http-slowlors and http-brute)" # 使用所有http*的脚本,除了这两个
nmap --script http-headers --script-args 参数	# 使用脚本时,传入脚本参数

脚本的使用方式,可以到官方文档 https://nmap.org/nsedoc/ 查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/888961.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(接口测试)接口测试理论 http理论 接口测试流程 接口文档解析

一.接口测试理论 1.接口和接口测试 服务器为客户端开了一个验证接口&#xff08;接口本质&#xff1a;函数方法&#xff09;客户端向服务器传送的消息可以相当于函数的参数&#xff0c;接口是用来让客户端传递数据的 接口&#xff1a;相当于开了一个通道 当服务器要给客户端响…

笔记整理—linux进程部分(6)进程间通信、alarm和pause

两个进程间通信可能是任何两个进程间的通信&#xff08;IPC&#xff09;。同一个进程是在同一块地址空间中的&#xff0c;在不同的函数与文件以变量进程传递&#xff0c;也可通过形参传递。2个不同进程处于不同的地址空间&#xff0c;要互相通信有难度&#xff08;内存隔离的原…

Awaken Likho恶意组织利用高级网络工具对俄罗斯政府发起“猛攻”

近日&#xff0c;俄罗斯政府机构和工业实体遭遇了一场名为“ Awaken Likho ”的网络活动攻击活动。 卡巴斯基表示&#xff0c;攻击者现在更倾向于使用合法MeshCentral平台的代理&#xff0c;而不是他们之前用来获得系统远程访问权限的UltraVNC模块。这家俄罗斯网络安全公司详细…

Golang | Leetcode Golang题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; func circularArrayLoop(nums []int) bool {n : len(nums)next : func(cur int) int {return ((curnums[cur])%n n) % n // 保证返回值在 [0,n) 中}for i, num : range nums {if num 0 {continue}slow, fast : i, next(i)// 判断非零且方…

docker简述

1.安装dockers&#xff0c;配置docker软件仓库 安装&#xff0c;可能需要开代理&#xff0c;这里我提前使用了下好的包安装 启动docker systemctl enable --now docker查看是否安装成功 2.简单命令 拉取镜像&#xff0c;也可以提前下载使用以下命令上传 docker load -i imag…

大数据毕业设计选题推荐-B站热门视频数据分析-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

使用C语言获取iostat中的await值的方法和方案

使用C语言获取iostat中的await值的方法和方案 1. 准备工作2. 调用iostat命令并获取输出3. 解析iostat输出4. 完整实现和错误处理5. 注意事项在Linux系统中,iostat命令是sysstat软件包的一部分,用于监控系统的CPU、网卡、tty设备、磁盘、CD-ROM等设备的活动情况和负载信息。其…

鸿蒙OS投票机制

(基于openharmony5.0) 投票机制 param get | grep ohos.boot.time 图 投票机制参数图 只有当所有的投票完成&#xff0c;开机动画才会退出&#xff0c;整理需要投票的系统应用&#xff08;三方应用不参与投票&#xff09;如下图所示&#xff1a; 以进程foundation为例&…

基于Kafka2.1解读Producer原理

文章目录 前言一、Kafka Producer是什么&#xff1f;二、主要组件1.Kafka Producer1.1 partitioner1.2 keySerializer1.3 valueSerializer1.4 accumulator1.5 sender 2.Sender2.1 acks2.2 clientinFlightBatches 3. Selector3.1 nioSelector3.2 channels 4. 全局总览 总结 前言…

Arduino UNO R3自学笔记20 之 Arduino如何测定电机速度?

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;在学习了Arduino的相关基础知识后&#xff0c;现在做个综合应用&#xff0c;给旋转的电机测速。 1.实验目的 测定旋转电机的转速。 2.实验器材-编码器 …

【hot100-java】二叉树的最近公共祖先

二叉树篇 我觉得是比两个节点的深度&#xff0c;取min&#xff08;一种情况&#xff09; DFS解题。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ clas…

力扣题11~15

题11&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 这种题目第一眼就是双循环&#xff0c;但是肯定不行滴&#xff0c;o(n^2)这种肯定超时&#xff0c;很难接受。 所以要另辟蹊径&#xff0c;我们先用俩指针&#xff08;标志位&#xff09;在最左端和最右端&am…

基于SpringBoot智能垃圾分类系统【附源码】

基于SpringBoot智能垃圾分类系统 效果如下&#xff1a; 系统首页界面 用户注册界面 垃圾站点页面 商品兑换页面 管理员登录界面 垃圾投放界面 物业登录界面 物业功能界图 研究背景 随着城市化进程的加速&#xff0c;生活垃圾的产量急剧增加&#xff0c;传统的垃圾分类方式已…

【C++】二叉搜索树+变身 = AVL树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、AVL树二、AVL树的实现2.1 平衡因子2.2 旋转处理2.2.1 左单旋&#xff1a;插入新节点后单纯的右边高2.2.2 …

光路科技TSN交换机:驱动自动驾驶技术革新,保障高精度实时数据传输

自动驾驶技术正快速演进&#xff0c;对实时数据处理能力的需求激增。光路科技推出的TSN&#xff08;时间敏感网络&#xff09;交换机&#xff0c;在比亚迪最新车型中的成功应用&#xff0c;显著推动了这一领域的技术进步。 自动驾驶技术面临的挑战 自动驾驶系统需整合来自雷达…

大模型基础:基本概念、Prompt、RAG、Agent及多模态

随着大模型的迅猛发展&#xff0c;LLM 作为人工智能的核心力量&#xff0c;正以前所未有的方式重塑着我们的生活、学习和工作。无论是智能语音助手、自动驾驶汽车&#xff0c;还是智能决策系统&#xff0c;大模型都是幕后英雄&#xff0c;让这些看似不可思议的事情变为可能。本…

43 C 程序动态内存分配:内存区域划分、void 指针、内存分配相关函数(malloc、calloc、realloc、_msize、free)、内存泄漏

目录 1 C 程序内存区域划分 1.1 代码区 (Code Section) 1.2 全局/静态区 (Global/Static Section) 1.3 栈区 (Stack Section) 1.4 堆区 (Heap Section) 1.5 动态内存分配 2 void 指针&#xff08;无类型指针&#xff09; 2.1 void 指针介绍 2.2 void 指针的作用 2.3 …

Java基本数据类型和String类型的转换

1.基本介绍 在程序开发中&#xff0c;我们经常需要将基本数据类型转换成String类型。或者将String类型转为基本数据类型。 2.基本类型转String类型 语法&#xff1a;将 基本数据类型的值 “” 即可 3.String类型转基本数据类型 语法&#xff1a;通过基本类型的包装类调用…

【DataSophon】DataSophon1.2.1 整合Zeppelin并配置Hive|Trino|Spark解释器

目录 ​一、Zeppelin简介 二、实现步骤 2.1 Zeppelin包下载 2.2 work配置文件 三、配置常用解释器 3.1配置Hive解释器 3.2 配置trino解释器 3.3 配置Spark解释器 一、Zeppelin简介 Zeppelin是Apache基金会下的一个开源框架&#xff0c;它提供了一个数据可视化的框架&am…

浏览器动态移动的小球源码分享

浏览器动态移动的小球源码分享 <script>(function(a){var width100,height100,borderRadius100,circlefunction(){};circle.prototype{color:function(){let colour "#"Math.floor(Math.random()*255).toString(16)Math.floor(Math.random()*255).toString…