Nmap学习使用指南
本博客严重参考 Nmap使用指南1.0:
自己之前零星学习的各类知识点,在这个暑假想要将其系统地串在一起,形成自己学习的体系,一起来看各类文档学习趴
关于Nmap安装方式网上多如牛毛,在此不再赘述,请往下看。
Nmap (Network Mapper 网络映射器)
端口扫描基础
虽然Nmap这些年的功能越来越多,它也是从一个高效的端口扫描器开始的,并且那仍然是它的核心功能。
nmap target 扫描目标主机上超过1660个TCP端口
Nmap把端口分为六个状态:
-
open 开放的
-
closed 关闭的
-
filtered 被过滤的
-
unfiltered 未被过滤的
-
open | filtered 开放或者被过滤的
-
closed | filtered 关闭或者被过滤的
这些状态描述Nmap怎么看待它们
每个开放的端口都是攻击的入口
Nmap指令语法
nmap [<扫描类型> ... ] [<选项>] { <扫描目标说明>}
端口扫描技术
作为一个修车新手,我可能折腾几个小时来摸索怎样把基本工具(锤子,胶带,扳子等) 用于手头的任务。当我惨痛地失败,把我的老爷车拖到一个真正的技师那儿的时候 ,他总是在他的工具箱里翻来翻去,直到拽出一个完美的工具然后似乎不费吹灰之力搞定它。 端口扫描的艺术和这个类似。专家理解成打的扫描技术,选择最适合的一种 (或者组合)来完成给定的 任务。 另一方面,没有经验的用户和刚入门者总是用默认的SYN扫描解决每个问题。 既然Nmap是免费的,掌握端口扫描的唯一障碍就是知识。这当然是汽车世界所不能比的, 在那里,可能需要高超的技巧才能确定您需要一个压杆弹簧压缩机,接着您还得为它付数千美金。
Nmap支持的扫描类型大概有十几种,一般一次只使用一种,不过UDP扫描(-sU)可以和任何一种TCP扫描类型结合使用
端口扫描类型的选项格式是-s<C>,<C>通常是扫描类型的首字母
部分扫描选项
-
-sS (TCP SYN 扫描/半开扫描)
SYN扫描是默认的也是最受欢迎的扫描选项,优点:执行速度快,扫描痕迹浅,从来不打开一个完整的TCP连接,不依赖于任何的特定平台。
-
-sT (TCP connect()扫描)
当SYN扫描不能用时,TCP connect()扫描就是默认的TCP扫描
相对与SYN扫描的缺点:
connect()扫描效率较低,因为它需要建立完整的TCP连接
connect()扫描容易在目标机上留下记录,许多普通的UNIX系统上的服务会在syslog留下记录
-
-sU (UDP扫描)
互联网基于UDP的服务也不少,最常见的如:DNS,SNMP,DHCP,注册端口分别为53,161/162,67/68
UDP扫描一般比较慢,比TCP要困难
UDP扫描可以与各种TCP扫描结合使用而同时检查两种协议
注意:慎用UDP扫描,因为它的扫描速度受到操作系统的限制非常低,如果确实要使用可以采用优先扫描主要端口,并发扫描更多主机,从防火墙后面扫描,使用--host--timeout来跳过慢速主机等手段
-
-sN -sF -sX (TCP Null,Fin,Xmas扫描)
这三种扫描方法利用了TCP RFC钟发掘出的一个微妙的方法来区分Open和Closed端口
如果扫描目标系统遵循RFC793,则当端口关闭时,任何不包含SYN,RST,ACK位的报文都会导致一个RST返回,而当端口开放时,应当没有任何响应
优势:
能够躲过一些无状态防火墙和报文过滤路由器,甚至比SYN扫描还要隐蔽一些,但是现代的IDS产品可以发现他们
不足:
并非所有的系统都严格遵循RFC793,许多系统端口不管是开放还是关闭的都响应RST,结果导致所有的端口都标记为Closed
它们不能辨别Open端口和一些特定的Filtered端口,从而返回相关信息
-
-sA (TCP ACK扫描)
目的:
发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的
不足:
无法确定Open或者Open|Filtered端口
-
-sW(TCP窗口扫描)
与ACK扫描的唯一区别在于它利用了特定系统的实现细节来区分端口是Open还是Closed,而不是全部打印成Unfiltered
不足:
不支持它的系统通常返回所有端口都是Closed
高级扫描方式
-
-sM (TCP Maimon扫描)
这个扫描技术除了探测报文采用FIN/ACK之外与Null,FIN,Xmas扫描完全一样
-
--scanflags (定制的TCP扫描)
这是真正的Nmap高手使用的,不受这些现成的扫描类型束缚,可以定义任意TCP标志位来设计自己的扫描
-
-sl (ldel扫描)
这种高级扫描方法允许进行真正的TCP端口盲扫描,由于它不适用真实IP进行扫描,所以它是一种极端隐蔽的扫描方法
-
-sO(IP协议扫描)
从技术上讲,这不是端口扫描
用于确认目标机器支持哪些IP协议
-
-b (FTP弹跳扫描)
通过FTP服务器做代理对其他目标主机进行扫描的技术,这是绕过防火墙的好方法,其实这算是服务器的一个弱点,当前大部分的服务器都被修补了,本弱点利用就困难了,不过可以使用这个选项来判断服务器是否脆弱
端口说明和扫描顺序
默认情况下,Nmap用指定的协议对端口1-1024以及nmap-services文件中列出的更高的端口进行扫描
-
-p <port range>(只扫描指定的端口)
port range 使用单个端口和用连字符表示的端口范围都可以
可以通过再端口号上添加T: 或者U: 指定协议
例如: -p U:53,111,137,T:21-25,80,139,8080
-
-F (快速(有限的端口)扫描):
在Nmap的nmap-services文件中指定想要扫描的端口,这个列表中包含1200多TCP端口,比扫描所有的65535个端口要快得多
如果使用--datadir选项指定自己的小小的nmap-services文件,则差别会很惊人了。
-
-r(不要按随机顺序扫描端口):
默认情况下,Nmap按随机顺序扫描端口(除了处于效率的考虑部分端口前移),这种随机化通常是不错的,但是我们可以指定-r来进行顺序端口扫描
Nmap的扩展功能
服务版本探测
人们完全可以在一些奇怪的端口上运行服务
知道正在运行什么邮件和域名服务器以及它们的版本,有一个精确的版本号对了解服务器有什么漏洞有巨大帮助
nmap-service-probes数据库包含查询不同服务的探测报文和解析识别相应的匹配表达式。
-
-sV (版本探测)
打开版本探测,也可以使用-A同时打开操作系统探测和版本探测
-
--allports(不为版本探测排除任何端口)
指定--allports扫描所有端口
-
--version-intensity <intensity> (设置版本扫描强度)
当进行版本扫描时,nmap发送一系列探测报文,每个报文都被赋予一个1到9之间的值,被赋予较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文一般没什么用。
强度水平说明应该使用哪些探测报文,数值越高,服务越有可能被正确识别,当然,高强度扫描花更多的时间,强度值在0到9之间,默认是7
-
--version-light (打开轻量级模式)
这是--version-intensity 2 的一个别名,这使得版本扫描快很多,但他识别服务的可能性也相对较小一些
-
--version-all (尝试每个探测)
这是--version-intensity 9 的一个别名,保证对每个端口尝试每个测试报文
-
--version-trace (跟踪版本扫描活动)
是会让Nmap打印出详细的关于正在运行的扫描的调试信息,它是使用--packet-trace所得到的信息的子集
-
-
-sR (RPC扫描)
这种方法和许多端口扫描方法联合使用,对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图确定它们是否为RPC端口,如果是,是什么程序和版本号。这作为版本扫描(-sV)的一部分自动打开。由于版本探测包括它并且全面的多,所以-sR很少被用到。
操作系统探测
Nmap最著名的功能之一就是用TCP/IP协议栈fingerprinting进行远程操作系统探测
Nmap发送一系列TCP和UDP报文到远程主机,检查响应中的每一个比特,再进行一打测试之后,Nmap把结果和数据库nmap-os-fingerprints中超过1500个已知的操作系统的fingerprints进行比较,如果有匹配,就打印出操作系统的详细信息。
-
-O (启用操作系统探测)
也可以使用-A来同时启用操作系统和版本探测
-
--osscan-limit(针对指定的目标进行操作系统检测)
采用这个选项,Nmap只对满足这个条件的主机进行操作系统检测,这样可以节约时间
-
--osscan-guess; --fuzzy(推测操作系统检测结果)
当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效
-
其他选项
-
-6 (启用IPv6扫描)
ping扫描(TCP-only),连接扫描以及版本检测都支持IPv6,除了增加-6选项之外,其他命令语法相同
-
-A(激烈模式扫描 )
这个选项启用额外的高级和高强度选项,目前这个选项启用了操作系统探测 -O 和版本扫描 -sV
该选项的目的是启用一个全面的扫描选项集合,不需要用户记忆大量的选项。
这个选项仅仅启用功能,不包含可能用到的所有需要的时间选项或者细节选项
-
-V;--version (打印版本信息)
打印Nmap版本号并退出
-
-h;--help (打印帮助摘要)
打印一个短的帮助屏幕,列出大部分常用的命令选项,这个功能和不带参数运行Nmap是相同的。
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/13225286.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!