Nmap的使用教程(超详细)

news2024/11/15 9:44:31

一、Nmap简介

Nmap

Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。

一般情况下,Nmap用于

  • 列举网络主机清单
  • 管理服务升级调度
  • 监控主机或服务运行状况。

Nmap可以检测

  • 目标机是否在线
  • 端口开放情况
  • 侦测运行的服务类型及版本信息
  • 侦测操作系统与设备类型等信息。

详情请参见官网:

https://nmap.org/

Zenmap

Zenmap是Nmap官方提供的图形界面,通常随Nmap的安装包发布。Zenmap是用Python语言编写而成的开源免费的图形界面,能够运行在不同操作系统平台上(Windows/Linux/Unix/Mac OS等)。Zenmap旨在为nmap提供更加简单的操作方式。简单常用的操作命令可以保存成为profile,用户扫描时选择profile即可;可以方便地比较不同的扫描结果;提供网络拓扑结构(NetworkTopology)的图形显示功能。

在这里插入图片描述

其中Profile栏位,用于选择“Zenmap默认提供的Profile”或“用户创建的Profile”;Command栏位,用于显示选择Profile对应的命令或者用户自行指定的命令;Topology选项卡,用于显示扫描到的目标机与本机之间的拓扑结构。

二、Nmap特点

Nmap的主要特点如下所示:

  • **主机探测:**探测网络上的主机,如列出相应tcp和ICMP请求、ICMP请求、开放特别端口的主机。
  • **端口扫描:**探测目标主机所开放的端口。
  • **版本检测:**探测目标主机的网络服务,判断其服务名称及版本号。
  • **系统检测:**探测目标主机的操作系统及网络设备的硬件特性。
  • **支持探测脚本的编写:**使用Nmap的脚本引擎(NSE)和Lua编程语言。

三、Nmap优点

(1)灵活。支持数十种不同的扫描方式,支持多种目标对象的扫描。
(2)强大。Nmap可以用于扫描互联网上大规模的计算机。
(3)可移植。支持主流操作系统:Windows/Linux/Unix/MacOS等等;源码开放,方便移植。
(4)简单。提供默认的操作能覆盖大部分功能,基本端口扫描nmap targetip,全面的扫描nmap –A targetip。
(5)自由。Nmap作为开源软件,在GPL License的范围内可以自由的使用。
(6)文档丰富。Nmap官网提供了详细的文档描述。Nmap作者及其他安全专家编写了多部Nmap参考书籍。
(7)社区支持。Nmap背后有强大的社区团队支持。
(8)赞誉有加。获得很多的奖励,并在很多影视作品中出现(如黑客帝国2、Die Hard4等)。
(9)流行。目前Nmap已经被成千上万的安全专家列为必备的工具之一。

四、Nmap扫描参数的含义和用法

在介绍Nmap用法之前,先了解一下Nmap的扫描参数的含义

设置扫描目标时用到的相关参数

-iL:从文件中导入目标主机或目标网段。
-iR:随机选择目标主机。
–exclude:后面跟的主机或网段将不在扫描范围内。
–excludefile:导入文件中的主机或网段将不在扫描范围中。

与主机发现方法相关的参数

-sL:List Scan(列表扫描),仅列举指定目标的IP,不进行主机发现。
-Sn:Ping Scan,只进行主机发现,不进行端口扫描。
-Pn:将所有指定的主机视作已开启,跳过主机发现的过程。
-PS/PA/PU/PY[portlist]:使用TCP SYN/ACK或SCTP INIT/ECHO方式来发现。
-PE/PP/PM:使用ICMP echo、 timestamp、netmask请求包发现主机。
-PO[protocollist]:使用IP协议包探测对方主机是否开启。
-n/-R:-n表示不进行DNS解析;-R表示总是进行DNS解析。
–dns-servers <serv1[,serv2],…≥:指定DNS服务器。
–system-dns:指定使用系统的DNS服务器。
–traceroute:追踪每个路由节点。

与常见的端口扫描方法相关的参数

-sS/sT/sA/sW/sM:指定使用TCP SYN/Connect(Y/ACK/Window/Maimon scans的方式对目标主机进行扫描。
-sU:指定使用UDP扫描的方式确定目标主机的UDP端口状况。
-sN/sF/sX:指定使用TCP Null/FIN/Xmas scans秘密扫描的方式协助探测对方的TCP端口状态。
–scanflags :定制TCP包的flags。
-sl <zombie host[ :probeport]>:指定使用Idle scan的方式扫描目标主机(前提是需要找到合适的zombie host)。
-sY/sZ:使用SCTP INIT/COOKIE-ECHO扫描SCTP协议端口的开放情况。
-sO:使用IP protocol扫描确定目标机支持的协议类型。
-b:使用FTP bounce scan扫描方式。

跟端口参数与扫描顺序的设置相关的参数

-p port ranges>:扫描指定的端口。
-F: Fast mode(快速模式),仅扫描TOP 100的端口。
-r:不进行端口随机打乱的操作(如无该参数,Nmap会将要扫描的端口以随机顺序的方式进行扫描,让Nmap的扫描不易被对方防火墙检测到)。
–top-ports :扫描开放概率最高的number个端口(Nmap的作者曾做过大规模的互联网扫描,以此统计网络上各种端口可能开放的概率,并排列出最有可能开放端口的列表,具体可以参见nmap-services文件。默认情况下.Nmap会扫描最有可能的1000个TCP端口)。
–port-ratio:扫描指定频率以上的端口。与上述–top-ports类似,这里以概率作为参数,概率大于–port-ratio的端口才被扫描。显然参数必须在0~1之间,想了解具体的概率范围可以查看nmap-services文件。

与版本侦测相关的参数

-sV:指定让Nmap进行版本侦测。
–version-intensity :指定版本侦测的强度(0~9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。
–version-light:指定使用轻量级侦测方式(intensity 2)。
–version-all:尝试使用所有的probes进行侦测(intensity 9。
–version-trace:显示出详细的版本侦测过程信息。

例如:

在了解以上参数及其含义后,再来看用法会更好理解,扫描命令格式:Nmap+扫描参数+目标地址或网段。比如一次完整的Nmap扫描命令如下。

nmap -T4-A -v IP地址

**-A:**表示使用进攻性(Aggressive)方式扫描;
**-T4:**表示指定扫描过程使用的时序(Timing),共有6个级别(0~5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通信状况良好的情况下推荐使用T4。
**-v:**表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,有助于让用户了解当前的扫描状态。

五、Nmap常用方法

1.扫描单个目标地址

namp 目标地址(ip地址)

2.扫描多个目标地址

如果目标地址不在同一个网段,或在同一网段但不连续且数量不多,可以使用这个方法

namp 目标地址1 目标地址2 …

3.扫描一个范围内的目标地址

可以指定扫描一个连续的网段,中间使用“-”连接
例如:扫描范围为192.168.0.100~192.168.0.110

namp 192.168.0.100-110

4.扫描目标地址所在的某个网段

以C段为例,如果目标是一个网段,则可以通过添加子网掩码的方式扫描
例如:扫描范围为192.168.0.1~192.168.0.255

nmap 192.168.0.100/24

5.扫描.txt文件中的所有目标地址

nmap -iL txt文件的绝对路径

6.扫描除某一个目标地址之外的所有目标地址

例如:扫描192.168.0.105之外的其他192.168.0.x的地址

nmap 192.168.0.100/24 -exclude 192.168.0.105

7.扫描除某一文件中的目标地址之外的目标地址

扫描除了.txt文件中涉及的地址或网段之外的目标地址
例如:扫描192.168.0.x网段,除1.txt文件中的目标地址

nmap 192.168.0.100/24 -excludefile C:\Desktop\1.txt

8.扫描某一目标地址的端口

例如:扫描192.168.0.100 的21,22,23,80端口

nmap 192.168.0.100 -p 21,22,23,80

9.对目标地址进行路由跟踪

nmap --traceroute 目标地址

10.扫描目标地址所在C段的在线状况

例如:扫描192.168.0.100所在C段的状况

nmap -sP 192.168.0.100/24

11.目标地址的操作系统指纹识别

例如:扫描192.168.0.105并识别该地址的操作系统的版本

nmap -O 192.168.0.105

12.目标地址提供的服务版本检测

nmap -sV 目标地址

13.探测防火墙的状态

nmap -sF -T4 目标地址

六、状态识别

端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。
默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。
Nmap通过探测将端口划分为6个状态:
(1)open:端口是开放的。
(2)closed:端口是关闭的。
(3)filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
(4)unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
(5)open/filtered:端口是开放的或被屏蔽。
(6)closed/filtered :端口是关闭的或被屏蔽。

七、脚本介绍

Nmap的脚本默认存在/nmap/scripts文件夹里面

Nmap的脚本主要分为以下几类:

Auth:负责处理鉴权证书(绕过鉴权)的脚本。
Broadcast:在局域网内探查更多服务的开启情况,如DHCP/DNS/SQLServer等。
Brute:针对常见的应用提供暴力破解方式,如HTTP/SMTP等。
Default:使用-sC或-A选项扫描时默认的脚本,提供基本的脚本扫描能力。
Discovery:对网络进行更多信息的搜集,如SMB枚举、SNMP查询等。
Dos:用于进行拒绝服务攻击。
Exploit:利用已知的漏洞入侵系统。
External:利用第三方的数据库或资源。例如,进行Whois解析。
Fuzzer:模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞。
Intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽。
Malware:探测目标机是否感染了病毒、开启后门等信息。
Safe:此类与Intrusive相反,属于安全性脚本。
Version:负责增强服务与版本扫描功能的脚本。
Vuln:负责检查目标机是否有常见漏洞,如MS08-067。

八、常用脚本

用户还可根据需要设置–script=类别进行扫描

常用脚本的参数

-sC/–script=default:使用默认的脚本进行扫描。
–script=:使用某个脚本进行扫描。
–script-args=key1=value1,key2=value2…:该参数用于传递脚本里的参数,key1是参数名,该参数对应value1这个值。如有更多的参数,使用逗号连接。
-script-args-file=filename:使用文件为脚本提供参数。
–script-trace:如果设置该参数,则显示脚本执行过程中发送与接收的数据。
–script-updatedb:在Nmap的scripts目录里有一个script.db文件,该文件保存了当前Nmap可用的脚本,类似于一个小型数据库,如果我们开启Nmap并调用了此参数,则Nmap会自行扫描scripts目录中的扩展脚本,进行数据库更新
–script-help:调用该参数后,Nmap会输出该脚本对应的脚本使用参数,以及详细的介绍信息。

九、实例

1.鉴权扫描

使用–script=auth可以对目标主机或目标主机所在的网段进行应用弱口令检测

nmap --script=auth 目标地址

2.暴力破解攻击

Nmap具有暴力破解的功能,可对数据库、SMB、SNMP等进行简单密码的暴力猜解

nmap --script=brute 目标地址

3.扫描常见的漏洞

Nmap具备漏洞扫描功能,可以检查目标主机或者网段是否存在常见漏洞

nmap --script=vuln 目标地址

4.应用服务扫描

Nmap具备很多常见应用服务的扫描脚本,例如VNC服务、MySQL服务、Telnet服务、Rsync服务等
以VNC服务为例:

nmap–script=realvnc-auth-bypass 目标地址

5.探测局域网内更多服务开启的情况

nmap -n-p 445 --script=broadcast 目标地址

6.Whois解析

利用第三方的数据库或资源查询目标地址的信息

nmap -script external baidu.com

十、更多扫描脚本

参考链接:https://nmap.org/nsedoc/categories/

十一、使用总结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024电工杯数学建模B题完整论文讲解(含每一问python代码+数据)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024电工杯数学建模B题大学生平衡膳食食谱的优化设计及评价完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 …

QGIS开发笔记(二):Windows安装版二次开发环境搭建(上):安装OSGeo4W运行依赖其Qt的基础环境Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139136356 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

牛客热题:滑动窗口的最大值

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;滑动窗口的最大值题目链接方法一…

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月26日预测第2弹

昨天的8883大底成功命中&#xff0c;但是由于昨天杀了对子&#xff0c;结果昨天开了对子&#xff0c;导致最终与中奖号码擦肩而过。今天继续基于8883的大底&#xff0c;使用尽可能少的条件进行缩号&#xff0c;同时&#xff0c;今天将准备两套方案&#xff0c;一套是我自己的条…

【重制版】Unity Meta Quest 一体机开发(一):前期准备,Meta XR SDK导入和环境配置,配置玩家物体

文章目录 &#x1f4d5;教程说明&#x1f4d5;Meta XR SDK 介绍&#x1f4d5;前期准备⭐开启开发者模式⚡在 Meta 官网申请开发者⚡在 Meta Quest 手机 APP 开启开发者 ⭐电脑需要下载的软件⚡Meta Quest Link&#xff08;以前叫做Oculus PC客户端&#xff09;⚡Oculus ADB Dri…

Overleaf中出现文字越界、越下届、没有正确分页、换页的原因和解决方法

在使用overleaf中&#xff0c;我偶尔会遇到如标题所说的情况&#xff0c;也如图所示&#xff1a; 后来发现&#xff0c;是因为这一页前面是一个表格&#xff0c;所以怀疑是表格的格式导致的。所以让chatgpt帮我更换了表格的格式&#xff0c;成功解决问题。 对于问题可能的成因…

【C语言】10.C语言指针(1)

文章目录 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2.指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引⽤操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引⽤操作符 2.3 指针变量的⼤⼩ 3.指针变量类型的意…

docker 进入容器报错OCI runtime exec failed

今天进入docker容器的时候一直报错 OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown 执行命令 docker exec -it 容器id /bin/sh 可进入

ThreadPoolExecutor线程池使用以及源码解析

文章目录 1. 引子2. 线程池源码分析2.1. 总览2.2. Executor2.3. ExecutorService2.4. AbstractExecutorService2.5. ThreadPoolExecutor构造函数核心参数阻塞队列拒绝策略核心属性线程池状态Worker 类execute() 方法addWorker() 方法runWorker() 方法getTask() 方法processWork…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档&#xff1a; https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

运算符优先级详解:从一元到布尔运算的全面指南

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、一元运算符&#xff1a;最高优先级 三、二元运算符&#xff1a;紧随其后的优…

【vue】el-select选择器实现宽度自适应

选择器的宽度根据内容长度进行变化 <div class"Space_content"><el-selectv-model"value":placeholder"$t(bot.roommessage)"class"select"size"small"style"margin-right: 10px"change"selectcha…

分布式Id/框架/发号器一文介绍

文章目录 一、分布式id介绍1、什么是分布式id2、分布式id的特点 二、UUid生成算法1、JDK UUID2、Snowflake 雪花算法3、PearFlower 梨花算法4、Mist 薄雾算法 三、常见发号器服务1、数据库1&#xff09;自增2&#xff09;号段模式 2、NoSQL 四、常见框架1、百度UIDGenerator2、…

01主动安全系统

“安全”一直是车主对车辆考核的重要指标。车辆安全可以分为从主动安全和被动安全两个方面进行分类。今天就来说说汽车主动安全系统的那些事儿。 01.什么是主动安全系统&#xff1f; 主动安全是指尽量自如地操纵控制汽车的安全系统措施。无论是直线上的制动与加速还是左右打方…

粤嵌—2024/5/21—打家劫舍(✔)

代码实现&#xff1a; int rob(int *nums, int numsSize) {if (numsSize 1) {return nums[0];}if (numsSize 2) {return fmax(nums[0], nums[1]);}int dp[numsSize];dp[0] nums[0];dp[1] fmax(nums[0], nums[1]);for (int i 2; i < numsSize; i) {dp[i] fmax(dp[i - 1…

Java核心: 脚本引擎和动态编译

静态语言和动态语言的在相互吸收对方的优秀特性&#xff0c;取人之长补己之短。脚本引擎和动态编译就是其中一个关键特性&#xff0c;扩展了Java的能力边界。这一篇我们主要讲两个东西: ScriptEngine&#xff0c;执行脚本语言代码&#xff0c;如JavaScript、Groovy JavaCompile…

LeetCode:78.子集

解答 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res[[]]for i in nums:res[[i]num for num in res]return res代码解释 这段代码定义了一个名为Solution的类&#xff0c;并在其中定义了一个名为subsets的方法。该方法接受一个整数列表nums作…

TOTP 算法实现:双因素认证的基石(C/C++代码实现)

双因素认证&#xff08;Two-Factor Authentication, 2FA&#xff09;扮演着至关重要的角色。它像是一道额外的防线&#xff0c;确保即便密码被窃取&#xff0c;不法分子也难以轻易突破。在众多双因素认证技术中&#xff0c;基于时间的一次性密码&#xff08;Time-Based One-Tim…

springmvc Web上下文初始化

Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的&#xff0c;springmvc中的web上下文初始化是由ContextLoaderListener来启动的 web上下文初始化流程 在web.xml中配置ContextLoaderListener <listener> <listener-class>org.springframework.…

摸鱼大数据——Hive基础理论知识——Hive环境准备

Hive环境准备 1、shell脚本执行方式 方式1: sh 脚本 注意: 需要进入脚本所在目录,但脚本有没有执行权限不影响执行 方式2: ./脚本 注意: 需要进入脚本所在目录,且脚本必须有执行权限 方式3: /绝对路径/脚本 注意: 不需要进入脚本所在目录,但必须有执行…