Nmap的介绍、安装 并进行网络扫描

2023-11-05

Nmap概述

Nmap(Network Mapper(网络映射器))是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

Nmap包含四项基本功能:主机发现(Host Discovery)端口扫描(Port Scanning)版本侦测(Version Detection)操作系统侦测(Operating System Detection)而这四项功能之间,又存在大致的依赖关系(通常情况下的顺序关系,但特殊应用另外考虑),首先需要进行主机发现,随后确定端口状况,然后确定端口上运行具体应用程序与版本信息,然后可以进行操作系统的侦测。而在四项基本功能的基础上,Nmap提供防火墙与IDS(IntrusionDetection System,入侵检测系统)的规避技巧,可以综合应用到四个基本功能的各个阶段;另外Nmap提供强大的NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。

image-20220305141030035

通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。

Nmap安装

首先访问Nmap官网,获得windows对应版本的安装包。

image-20220305141048987

根据提示,一直安装即可

image-20220305141059297

软件主界面

image-20220305141126938

可以看出其内置了很多扫描类型,支持查看多种扫描结果,UI界面比较直观

此外,还可以在linux终端内安装,更加灵活。

image-20220305141133430

Nmap使用

查看linux下nmap的帮助信息。(执行命令nmpa -h)

Nmap 7.80 ( https://nmap.org )

Usage: nmap [Scan Type(s)] [Options] {target specification}

可见nmap指令的一般格式是:nmap \[扫描类型(可叠加)\] \[选项\] \[目标\]

其中目标可以有如下格式:

TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>: Input from list of hosts/networks
-iR <num hosts>: Choose random targets
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file

其他可以指定的参数(部分)有:

  • HOST DISCOVERY: 目标勘测的手段

  • SCAN TECHNIQUES: 指定扫描的技术

  • PORT SPECIFICATION AND SCAN ORDER: 指定端口和扫描顺序

  • SERVICE/VERSION DETECTION: 服务/版本 勘测

  • OS DETECTION: 操作系统勘测

参考windows上有UI的nmap版本内置的扫描类型:


  Intense scan                  nmap -T4 -A -v www.baidu.com

  Intense scan plus UDP         nmap -sS -sU -T4 -A -v www.baidu.com

  Intense scan, all TCP ports   nmap -p 1-65535 -T4 -A -v www.baidu.com

  Intense scan, no ping         nmap -T4 -A -v -Pn www.baidu.com

  Ping scan                     nmap -sn www.baidu.com

  Quick scan                    nmap -T4 -F www.baidu.com

  Quick scan plus               nmap -sV -T4 -O -F \--version-light www.baidu.com

  Quick traceroute              nmap -sn \--traceroute www.baidu.com

  Regular scan                  nmap www.baidu.com

  Slow comprehensive scan       nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 \--script \"default or (discovery and safe)\" www.baidu.com

利用Nmap实施网络扫描

主机发现

原理

当网络不通时,我们需要ping一下主机,检查网关是否正常,这与主机发现原理一样。当测试目标是一个网络时,在线的主机才是我们的用主机发现的目标,nmap中提供了许多主机发现的方法,大多与TCP/IP协议簇中的协议有关。

  • 1、跳过ping扫描阶段:

nmap进行其他扫描之前都会对目标进行一个ping扫描。如果目标对ping 扫描无反应将结束整个扫描过程。这种方法可以跳过那些没有响应的主机,从而节省大量时间,但如果目标在线只是采用某种手段屏蔽了ping 扫描,从而躲过我们的其他扫描操作,我们可以指定无论目标是否响应ping 扫描,毒药将整个扫描过程完整的参数呈现出来;如 nmap -PN 192.168.169.131。

  • 2、仅使用ping协议进行主机发现:

有时需要对大量的主机扫描,nmap如果对一个目标主机采取各种手段进行扫描会花费大量时间。这时我们只对目标主机进行扫描。如 nmap -sP 192.168.169.131。

  • 3、使用ARP协议进行主机发现:

当目标主机与我们处于同一网段时,使用ARP协议扫描是最佳选择。不仅速度快,扫描结果精准。因为没有任何的安全措施会阻止正常的arp请求。如 nmap -PR 192.168.169.131。

  • 4、使用TCP协议进行主机发现:

TCP协议主要是三次握手构成,主动端发送syn报文,被动端回应syn+ack报文,然后主动端回应ack。利用此过程,nmap向目标发送syn报文,如果对方回应了syn+ack则说明在线。半开扫描,如nmap -sS 192.168.169.131。全开扫描,如nmap -sT 192.168.169.131。

  • 5、使用UDP协议进行主机发现:

UDP相比较TCP简单,但扫描时并不比TCP协议方便,而且花费时间长,因此这种扫描不常用。如nmap -sU 192.168.169.131。

用法

通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊应用(例如确定大型局域网内活动主机的数量),可能会单独专门适用主机发现功能来完成。

HOST DISCOVERY:
  -sL: List Scan - simply list targets to scan
  -sn: Ping Scan - disable port scan
  -Pn: Treat all hosts as online -- skip host discovery
  -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
  -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
  -PO[protocol list]: IP Protocol Ping
  -n/-R: Never do DNS resolution/Always resolve [default: sometimes]
  --dns-servers <serv1[,serv2],...>: Specify custom DNS servers
  --system-dns: Use OS's DNS resolver
  --traceroute: Trace hop path to each host

其中,比较常用的使用的是-sn,表示只单独进行主机发现过程;-Pn表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);-n,如果不想使用DNS或reverse DNS解析,那么可以使用该选项。

操作

命令:nmap -sn IP

image-20220305141911689

端口扫描

原理

nmap向目标主机发送报文并根据返回报文从而认定端口的6种状态。(注意:这六种状态只是namp认为的端口状态,例如:有些主机或者防火墙会返回一些不可靠的报文从而妨碍nmap对端口开放问题的确认)。

  • Open(开放的):端口处于开放状态,意味着目标机器上的应用程序正在该端口监听连接/报文;

  • Closed(关闭的):端口处于关闭状态。这里我们值得注意的是关闭的端口也是可访问的,只是该端口没有应用程序在它上面监听,但是他们随时可能开放;

  • Filtered(过滤的):由于包过滤阻止探测报文到达端口, Nmap 无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则或者主机上的软件防火墙;

  • Unfiltered(未被过滤的):意味着端口可访问,但 Nmap 不能确定它是开放还是关闭。这种状态和filtered的区别在于:unfiltered的端口能被nmap访问,但是nmap根据返回的报文无法确定端口的开放状态,而filtered的端口直接就没能够被nmap访问。端口被定义为Unfilterd只会发生在TCP ack扫描类型时当返回RST的报文。而端口被定义为filtered 状态的原因是是报文被防火墙设备,路由器规则,或者防火墙软件拦截,无法送达到端口,这通常表现为发送NMAP的主机收到ICMP报错报文,或者主机通过多次重复发送没有收到任何回应)。

  • Open|filtered状态:这种状态主要是nmap无法区别端口处于open状态还是filtered状态。这种状态只会出现在open端口对报文不做回应的扫描类型中,如:udp,ip protocol ,TCP null,fin,和xmas扫描类型。

  • Closed|filtered状态:这种状态主要出现在nmap无法区分端口处于closed还是filtered时。

用法

扫描方式选项

SCAN TECHNIQUES:
  -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
  -sU: UDP Scan
  -sN/sF/sX: TCP Null, FIN, and Xmas scans
  --scanflags <flags>: Customize TCP scan flags
  -sI <zombie host[:probeport]>: Idle scan
  -sY/sZ: SCTP INIT/COOKIE-ECHO scans
  -sO: IP protocol scan
  -b <FTP relay host>: FTP bounce scan

端口参数与扫描顺序:

PORT SPECIFICATION AND SCAN ORDER:
  -p <port ranges>: Only scan specified ports
    Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  --exclude-ports <port ranges>: Exclude the specified ports from scanning
  -F: Fast mode - Scan fewer ports than the default scan
  -r: Scan ports consecutively - don't randomize
  --top-ports <number>: Scan <number> most common ports
  --port-ratio <ratio>: Scan ports more common than <ratio>

操作

命令:nmap --sS --sU --T4 --top-ports 300 www.baidu.com

参数:

-sS表示使用TCP SYN方式扫描TCP端口;

-sU表示扫描UDP端口;

-T4表示时间级别配置4级;

–top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)。

image-20220305142104990

从上图中,我们看到扫描结果,在扫描的300个端口中,有298个是关闭的;开放的 分别是80和443端口。

版本侦测

原理

版本侦测主要分为以下几个步骤:

  • 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。

  • 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的"WelcomeBanner"信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。

  • 如果通过"Welcome Banner"无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。

  • 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。

  • 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。

  • 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。

用法

SERVICE/VERSION DETECTION:
  -sV: Probe open ports to determine service/version info
  --version-intensity <level>: Set from 0 (light) to 9 (try all probes)
  --version-light: Limit to most likely probes (intensity 2)
  --version-all: Try every single probe (intensity 9)
  --version-trace: Show detailed version scan activity (for debugging)

操作

命令:nmap --sV www.baidu.com

image-20220305142133908

从图中可知,本次一个扫描了1000个端口,其中有998个是关闭的。

对开开放的两个端口上的服务进行版本侦测的结如方框内显示。

OS侦测

原理

Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地方对TCP/IP的实现并没有强制规定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。

具体实现方式如下:

  • Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。

  • 分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。

  • 将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

用法

OS DETECTION:
-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively

操作

命令:nmap --O 127.0.0.1

image-20220305142207580

从上图中可看到,指定-O选项后先进行主机发现与端口扫描,根据扫描到端口来进行进一步的OS侦测。获取的结果信息有设备类型,操作系统类型,操作系统的CPE描述,操作系统细节,网络距离等。

最后综合上述命令,对www.baidu.com执行一次加强的快速扫描:

命令: nmap -sV -T4 -O -F --version-light www.cug.edu.cn

image-20220305142245486

通过上述结果,可以看出:

本次侦测共用时5.38s。扫描了一个IP的100个端口,该主机在线。

扫描出5个运行中的服务,类型如上图。

暂时无法准确判断操作系统的类型,但是最有可能是FreeBSD和PC-BSD,对应的概率如上图所示。

参考文献

  1. 张星亮,张洪波.网络安全扫描工具的比较与分析[J].电脑知识与技术,2018,14(11):56-57.DOI:10.14004/j.cnki.ckt.2018.1200.

  2. 俞海.基于Nmap网络扫描的场景仿真实验[J].绍兴文理学院学报(自然科学),2017,37(01):28-31.DOI:10.16169/j.issn.1008-293x.k.2017.07.005.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nmap的介绍、安装 并进行网络扫描 的相关文章

  • MySQL数据库解读之-内置数据库:mysql

    数据字典表 不可见 不能用 SELECT 读取 不会出现在 SHOW TABLES 的输出中 不会列在 information schema TABLES 表中 从概念上讲 information schema 提供了一个视图 MySQL
  • centos7.5安装zabbix5.0(亲测有效)

    配置环境 操作系统 centos7 5 必须要是Centos7以上的系统 zabbix版本 5 0 Zabbix 特性 1 数据收集 2 灵活的阀值定义 3 高级告警配置 4 实时绘图 5 扩展的图形化显示 6 历史数据存储 7 配置简单
  • 数据结构笔记(C语言版)

    一 绪论 程序 数据结构 算法 1 基本的数据结构 线性结构 线性表 栈和队列 串 数组和广义表 非线性结构 树 图 用计算机解题一个问题的步骤 具体问题抽象为数学模型 设计算法 编程 调试 运行 数据结构是一门研究非数值计算的程序设计中计
  • [Hive SQL] 实现分组排序、分组topN

    举个场景例子 我们要计算app内在每小时区间内访问量前2的服务 根据访问日志处理完后的数据集如下所示 visit hour service name visit cnt 2021062401 A 421 2021062401 B 710 2
  • python实现简易万年历_Python编程——万年历

    2017年五月份日历 万年历这个题目几乎是不论学哪种编程语言必要尝试的一个小知识 综合了循环 逻辑关系判断等各编程语言的基础知识 今天我们一起用Python实现简单的万年历功能 查看某年各个月份日历和查看确定月份日历 网上大概浏览了一部分代
  • C++从0到1(5):循环结构

    目录 1 while循环 2 do while循环 3 for循环 4 嵌套循环 1 while循环 作用 满足循环条件 执行循环语句 语法 while 循环条件 循环语句 循环条件为真 就执行循环语句 include
  • Maven一定要会的这几个知识!

    一 Maven概念 Maven是一个项目管理和整合工具 Maven为开发者提供了一套完整的构建生命周期框架 开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置 因为Maven使用了一个标准的目录结构和一个默认的构建生命周期 若有多个
  • 初识Nacos

    目录 1 Nacos介绍 1 1四大功能 1 2微服务中配置文件的问题 1 3配置中心解决了什么 1 4业界常见的配置中心 1 5解决不同环境相同配置的问题 1 6不同微服务之间相同配置的共享 2 Nacos Config 动态刷新原理 2
  • 使用ImageMagick批量转换图片格式

    需求 需要将1000张 DCM后缀结尾的图片文件转换为常见的jpg格式 解决 windows下载安装 http www imagemagick org script download php 将ImageMagick安装完成后 确保在命令行

随机推荐

  • QT下assimp库的模型加载

    Assimp库概述 一个非常流行的模型导入库是Assimp 它是Open Asset Import Library 开放的资产导入库 的缩写 Assimp能够导入很多种不同的模型文件格式 并也能够导出部分的格式 它会将所有的模型数据加载至A
  • 云服务器:Linux宝塔面板如何部署node服务

    前情 有自己的服务器 已经安装了宝塔面板 也安装了node js 在本地编写了一个node程序 如何要挂载到阿里云服务器中运行 解决 将本地node文件上传至服务器中www目录下 node modules可以不用上传 运行node程序 np
  • 网络基础之OSI七层模型与TCP/IP五层模型

    OSI七层模型及功能概述 一 OSI七层模型 二 七层模型的功能概述 1物理层 2数据链路层 3网络层 4传输层 5会话层 6表示层 7应用层 三 TCP IP五层模型的组成 四 五层模型中的协议族组成 五 数据封装与解封装过程 六 设备与
  • Transformer论文及源码笔记——Attention Is All You Need

    Transformer论文及源码笔记 Attention Is All You Need 综述 介绍 代码实现 编码模块 解码模块 综述 论文题目 Attention Is All You Need 时间会议 Advances in Neu
  • R语言作业--第六章判别分析

    目录 思考题4 原题目 贝叶斯判别的基本思想是什么 练习题第3题 以舒张期血压和讯将胆固醇含量预测被检查者是否患冠心病 测得15名冠心病人和16名健康人的舒张压 X1及血浆胆固醇含量X2 结果如表6 4 练习题第4题 对于A股市场2009年
  • 并查集平摊代价分析

    并查集平摊代价分析 1 并查集链表 Linked list representation of disjoint sets 1 1 最糙的链表 链表的每个结点有三个域 分别是head rep tail head是个指针 指向这个集合的第一个
  • GnuTLS recv error (-110): The TLS connection was non-properly terminated 解决(linux)

    原理是重新编译安装git 在linux终端按照下面命令一步一步执行即可 sudo apt get install build essential fakeroot dpkg dev y sudo apt get build dep git
  • 小程序开发完整教程

    微信使用的开发语言和文件很 特殊 小程序所使用的程序文件类型大致分为以下几种 WXML WeiXin Mark Language 微信标记语言 WXSS WeiXin Style Sheet 微信样式表 JS Java 小程序的主体 在语言
  • js断点和调试学习总结3

    使用Chrome调试JavaScript的断点设置和调试技巧 你是怎么调试 JavaScript 程序的 最原始的方法是用 alert 在页面上打印内容 稍微改进一点的方 法是用 console log 在 JavaScript 控制台上输
  • 插入方法(Insert Methods)

    进入MongoDB中文手册 4 2版本 目录 MongoDB提供了以下将文档插入到集合中的方法 方法 说明 db collection insertOne 将单个文档插入集合中 db collection insertMany 将多个 文档
  • 单元测试时间机器

    没有单元测试 您怎么称呼重构 任何人 是 这是一个技巧问题 不是吗 没有单元测试的重构不称为重构 这称为更改代码 甚至可以称其为破坏代码 随手添加测试 当您需要更改未经测试的代码时 添加单元测试很有用 您实际上可以添加两种类型 一个明显的用
  • STM32全国研讨会:且看Python 和OpenMV如何在 STM32 MCU上运行AI 2020-09-15 07:10 预计 24 分钟读完

    What is the state of machine learning at the edge today What tools can help engineers collect data and run inferences Wh
  • Rust学习笔记(三)——注释

    Rust学习笔记 三 注释 单行注释 多行注释 和大多数高级语言一样 Rust同样支持单行注释和多行注释 单行注释 单行注释是 或 开头的注释内容 Rust会将 或 到其后的第一个换行符之间的内容作为注释内容 所不同的是 以三个反斜杠 开头
  • 【安装教程】夜神模拟器+抓包工具mitmproxy

    夜神模拟器官网下载 应用商城搜索 小红书 下载软件即可 python 安装 mitmproxy 1 安装Microsoft Visual buildtools 链接 https pan baidu com s 1GyLNOOydBoOtNB
  • class from quick

    原文链接 http www jianshu com p 9587fffc7d8f 创建一个类 lua 定义名为 Shape 的基础类 local Shape class Shape ctor 是类的构造函数 在调用 Shape new 创建
  • OGG流媒体文件格式分析

    摘自 http www studa net yingyong 080505 16283240 html 摘 要 流媒体文件格式在流媒体系统中占有重要地位 设计合理的文件格式是提高流媒体服务器工作效率最直接和最有效的办法 该文在剖析常用流媒体
  • mac笔记本怎么外接显示屏_苹果MAC笔记本怎么外接显示屏

    苹果MAC笔记本外接显示器设置方法 步骤 1 如果要在 Mac 上外接显示器的话 首先是要考虑采用什么样的接口 一般我们是通过 VGA 或 HDMI 来外接显示器的 如果 Mac 电脑上没有可以外接显示器的 VGA 或 HDMI 接口的话
  • Anoconda安装open3d

    非虚拟环境安装需指定 user选项 pip install user open3d
  • 恐怖谷效应

    恐怖谷效应 Uncanny Valley 是仿真机器人领域中的一个理论 是指一个机器人的外貌或行为越来越逼真的过程中 观察者的心态会从认同到不适 再到认同这样一种现象 数学上X轴为接近度 Y轴为亲近感 则会出现一段山谷曲线 所以命名为恐怖谷
  • Nmap的介绍、安装 并进行网络扫描

    Nmap概述 Nmap Network Mapper 网络映射器 是一个网络连接端扫描软件 用来扫描网上电脑开放的网络连接端 确定哪些服务运行在哪些连接端 并且推断计算机运行哪个操作系统 这是亦称 fingerprinting 它是网络管理