Nmap基础入门及常用命令汇总

Nmap基础入门

免责声明:本文单纯分享技术,请大家使用过程中遵守法律法规~

在这里插入图片描述

介绍及安装

nmap是网络扫描和主机检测的工具。作为一个渗透测试人员,必不可少的就是获取信息。那么nmap就是我们从互联网上获取信息的途径,我们可以扫描互联网上哪个IP暴露了哪些端口。

nmap主要功能:

  1. 主机发现:发现网络上活跃的主机
  2. 端口扫描:发现目标主机开放了哪些端口
  3. 服务识别:识别目标主机具体运行的服务和应用程序的版本号
  4. 操作系统检测:检测目标主机操作系统类型及版本,用于判断漏洞(特定版本的操作系统存在特定漏洞,可以利用)。
  5. 执行脚本扫描:支持执行用户自定义脚本进行扫描
  6. 输出格式:nmap扫描结果支持通过文本、XML、JSON等存储

nmap是一款非常灵活、强大的工具,它在安全团队、渗透测试人员和网络管理员之间广泛使用。我们在使用时,需要遵循相关法律法规和道德准则。

  • 官网:https://nmap.org/
  • 下载:https://nmap.org/download.html。nmap是跨平台的,不论是在mac、linux、windows都可以使用。如果我们有kali,可以直接使用(kali自带nmap工具)。
    在这里插入图片描述

基础知识点

端口状态(6种:open、closed、filtered、unfiltered、open|filtered、closed|filtered)

  1. open 开放的:该端口上的应用程序成功接收TCP、UDP报文并响应
  • TCP:nmap 发起两个 SYN 的请求,服务器上监听在此端口的进程会进行应答,会返回 SYN/ACK, nmap 收到服务端返还回来的应答后会发送两个 RST ,并不会和服务端建立通信连接,完成端口的探测。
  • UDP:nmap 向目标端口发起两个 UDP 报文,服务端对报文进行应答,nmap 收到应答,将该端口标记为 open。
  1. closed 关闭的:
  • TCP:nmap 发起两个 SYN 的请求,服务器上由于没有进程监听该端口,内核会返回 RST, nmap 收到服务端返还回来的 RST 报文,将探测结果定义为 closed 。
  • UDP:nmap 会发送两个一模一样的 UDP 请求,服务端收到请求后会给 nmap 返回一个 type=3 code=3 的 ICMP 报文,意思是访问的端口不可达, nmap 标记此端口是关闭状态。
  1. filtered 被过滤的:
  • TCP:这种情况是服务端将收到的 nmap SYN 报文直接丢弃,不进行应答, 由于 nmap 直接发送了两个 SYN 报文,都没有收到应答,所以认定服务端开启了防火墙,将 SYN 报文丢弃。
  • UDP:这个一般指 TCP 端口扫描,参见上面的描述。
  1. unfiltered 未被过滤的:
  • nmap 默认进行的是 SYN 扫描,当用 -sA 选项( TCP ACK 扫描),连续发送两个同样的 ACK 报文,由于 snmp 确认收到了一个服务端根本没有发送的报文,所以服务端会发送一个 RST 报文, snmp 收到服务端发送来的 RST 报文后,确认服务端没有对报文进行丢弃处理,注意本探测不能发现端口是开放还是关闭状态,只能确认探测的报文服务端已收到,并回复给了 snmp RST报文。
  • UDP:这个一般指 TCP 端口扫描,参见上面的描述。
  1. open|filtered 开放或者被过滤的:
  • TCP:这种状态主要是 nmap 无法区别端口处于 open 状态还是 filtered 状态。这种状态长出现于 UDP 端口,参考后续 UDP 中的解释。
  • UDP:这种状态主要是 nmap 无法区别端口处于 open 状态还是 filtered 状态。这种状态是服务端对 nmap 的请求不做任何回应,导致 nmap 无法确认端口是那种状态。
  1. closed|filtered 关闭或者被过滤的:

TCP连接扫描和端口状态

# 扫描该目标下1000个常用TCP端口
nmap -sT 127.16.176.130

tcp建立连接通常需要三次握手四次挥手,且四次挥手最后需要发送FIN标志,nmap -sT不论目标主机发送什么,最后都会返回RST。没有实现优雅的告别。
缺点:

  1. 耗时长:建立连接需要三次握手四次挥手
  2. 留痕:通信会被目标主机记录,主机通常会对完成握手的会话进行日志的记录,会留下扫描的痕迹

优势:

  • 只要目标主机发送了SYN 、ACK包,nmap就会标记这个端口是开放状态;
  • 如果目标主机返回的是RST包,nmap则会标识该端口为closed状态
  • 如果目标主机没有返回任何包,此时返回的包可能被防火墙阻挡了,nmap会标记端口为filtered(被过滤)状态

SYN扫描:-sS(半链接、半开扫描)

为了解决留痕的问题,可以使用-sS参数进行扫描

  • 当收到目标主机发送的 SYN ACK时,nmap不会返回FIN,不会走完所有流程,而是直接返回RST。相当于你给别人打电话,问别人是不是叫xxx,别人回复确认,此时你给别人回复我打错了,虽然你后续没有别人继续通信,但此时你已经确认了对方的身份。
  • 有人可能会疑惑,这里能否不返回RST包给目标主机?
  • 答:不行,因为如果不返回RST包,目标主机会认为我们上一轮没有收到SYN ACK包而不断重传

nmap -sS ip:没有完成整个握手过程,因此被称为半连接扫描、半开扫描。

优势:

  1. 效率高:中途就直接返回RST,不会走完握手整个流程
  2. 不易留痕:不走完握手流程,目标服务器保留日志概率低

注意:执行该命令需要添加sudo或拥有root权限。

TCP扫描:nmap 目标主机IP
SYN扫描:sudo nmap 目标主机IP

UDP扫描

udp没有ack这样的确认机制,只能依靠目标主机的回复做出判断
对于大部分端口,nmap发送的数据包都没有负载,对方相当于收到一个空红包🧧,这样的数据包一般不会收到目标主机的回复,并且如果防火墙丢了我们的包,一般也不会做出回复(但如果UDP端口关闭了,一般会返回类型为3的ICMP包,表示目标主机不可达)。因此我们在使用udp扫描时,会经常看到open|filtered一起显示,此时端口可能开放了,也可能被防火墙阻挡了。

  • 如何判断udp端口是开放还是关闭?
    小技巧:nmap -sUV (V参数会进行版本扫描,nmap会在open|filtered端口中做探测,确认运行的软件版本,从而明确端口的开放状态)

缺点:

  1. 慢:大部分场景目标主机都不会回复数据包或因为防火墙等诸多因素,导致同一端口nmap一般会出现多次请求的情况。

建议:

  1. 配合其他参数使用:nmap -sUV --top-ports 100 扫描常用的100个UDP端口

ICMP和Ping扫描

# 扫描范围(ping扫描)
nmap -sn 192.168.0.1-100# 通过CIDR方式指定范围
nmap -sn 192.168.0.0/24

不论是本地还是远程的网络,我们都可以使用-sn来扫描:

  • 本地:扫描本地网络使用了ARP协议进行请求
  • 远程:扫描远程网络使用了ICMP协议,还会利用TCP SYN和TCP ACK进行主机发现

但对于windows server来说(如:2016、2019、2022版本),防火墙默认会关闭所有ICMP包,此时如果继续使用nmap -sn就走不通了,进入了死胡同。

  • nmap -Pn 目标:表明不使用ping进行探测扫描,以此来绕过防火墙的阻挡,但该命令会很消耗时间,因为nmap默认会认为该主机在运行状态,如果目标主机没有运行,会导致nmap进行重复探测。

使用

主机扫描: nmap ip (TCP/UDP端口)

注意:

  1. 这种方式只会扫描1000个常用的tcp端口
    • 扫描目标所有端口:nmap -p- 127.16.176.130
  2. 这种方式只会扫描tcp端口
    • nmap -sT 127.16.176.130:扫描TCP端口
    • nmap -sU 127.16.176.130:扫描UDP端口
# 扫描特定主机(默认只会扫描1k个常用的端口)
nmap 127.16.176.130# 扫描特定主机所有端口(仅扫描TCP端口)
nmap -p- 127.16.176.130# 扫描UDP端口,需使用-s参数
nmap -sU 127.16.176.130# 扫描ip范围内主机
nmap 127.16.176-180# 组合扫描,组合项之后用空格分隔
nmap 127.16.176.130 127.16.176-180# 扫描网段
nmap 127.16.176.1/24# 过滤IP扫描
nmap 127.16.176.1/24 -exclude 127.16.176.130# SYN扫描(半连接扫描),避免留痕,执行命令需要sudo(root权限)
sudo nmap -sS ip# TCP扫描:nmap 目标主机IP:走完全过程,但耗时长,且会留下痕迹
# SYN扫描:sudo nmap 目标主机IP:不走完全过程,效率高,不易在目标机器上留痕

在这里插入图片描述

端口扫描:nmap ip -p 端口号

# 扫描特定主机的特定端口
nmap 127.16.176.130 -p 3389# 扫描范围端口
nmap 127.16.176.130 -p 1-100

在这里插入图片描述

识别服务版本:nmap ip -p 端口号 -sV

# 想要识别服务版本,我们可以使用-sV参数(serviceVersion)
nmap 39.156.66.x -p 443 -sV 

在这里插入图片描述

识别操作系统版本:nmap ip -O

-O (OS operating system 操作系统)

# 识别操作系统可以通过-O参数(os),需要root权限
nmap 39.156.66.x -O

在这里插入图片描述

常用命令汇总

获取远程主机系统类型及开放端口:nmap -sS -P0 -A -v < target >

nmap -sS -Pn -sV -O 192.168.1.1
nmap -sS -Pn -A -v 192.168.1.1-sS:执行TCP SYN扫描(半连接扫描),它不会建立完整的TCP连接,更隐蔽,效率高
-Pn:表示跳过主机发现阶段,即假设所有主机都是开启的。
-sV:尝试检测服务版本。
-O:启用操作系统检测。
-A:启用操作系统检测、版本检测、脚本扫描和 traceroute。
-v:增加详细程度,提供更详细的输出。

列出开放了指定端口的主机列表:nmap -sT -p 80 -oG - 10.0.1.0/24 | grep open

nmap -sT -p 80 -oG - 10.0.1.0/24 | grep open-sT:进行TCP connect()扫描,这会完成整个TCP三次握手过程。
-p 80:指定要扫描的端口号。
-oG -:以grepable格式输出结果到标准输出。
| grep open:通过管道符过滤出包含“open”的行。
注意:CIDR表示法,10.0.1.0/24来表示子网。

在网络寻找所有在线主机:nmap -sn 10.0.1.0/24

nmap -sn 10.0.1.0/24-sn:(旧版为-sP)只进行ping扫描,不进行端口扫描。

在局域网上扫找 Conficker 蠕虫病毒:nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 10.0.1.1-254

nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 10.0.1.1-254-PN:等同于-Pn,忽略ping的结果。
-T4:设置速度模板为激进模式(级别有:0-5,越高扫描速度越快,但准确度)。
-p139,445:指定扫描的端口。
-n:禁用DNS解析。
--script=smb-check-vulns:使用Nmap脚本引擎(NSE)中的脚本来检查SMB漏洞。
--script-args safe=1:传递给脚本的参数,这里是指安全模式

使用诱饵扫描方法来扫描主机端口:sudo nmap -sS 10.0.1.10 -D 10.0.1.11

sudo nmap -sS 10.0.1.10 -D 10.0.1.11,10.0.1.12-D:定义诱饵IP地址,可以用来混淆目标机器的日志记录,可以添加多个诱饵IP,用逗号分隔

常用参数

# -iL 从文件中读取目标主机或网络列表
nmap -iL targets.txt# -sS SYN扫描,又称半开放扫描(TCP SYN 扫描,又称半开放,或隐身扫描。不容易被注意,不留日志。建立一个不完全的TCP,发送一个SYN报文。)
nmap -sS 192.168.1.1# 允许你关闭 ICMP pings
nmap -Pn 192.168.1.1# -sV 打开服务版本检测
nmap -sV 192.168.1.1# -O 尝试识别远程操作系统
nmap -O 192.168.1.1# -A 全⾯系统检测、启⽤脚本检测、扫描、traceroute等
nmap -A 192.168.1.1# -v 增加详细程度,提供更详细的输出。可以多次使用以增加详细程度(如-vv)  
nmap -v 192.168.1.1# -p  指定端口。可以是一个端口号、范围或多个端口(用逗号分隔)
nmap -p 80,443 192.168.1.1
nmap -p 1-1024 192.168.1.1# -sn 只进行ping扫描,不进行端口扫描。用于查找在线主机
nmap -sn 192.168.1.0/24  # -sT TCP扫描,当SYN扫描不能用时,默认是TCP扫描。(会留下错误信息和记录,而-sS是最好选择。)
nmap -sT 192.168.1.1# -sU UDP扫描,UDP扫描是不可靠的,速度也慢,但有时是必要的
nmap -sU 192.168.1.1# -sA 用于发现防火墙,不能确定端口是否开放,只能确定是否有状态,是否被过滤。
nmap -sA 192.168.1.1# -Pn 扫描之前不使用ping命令,跳过主机发现阶段,即假设所有主机都是开启的。在有防火墙时比较有用
nmap -Pn 192.168.1.1# --script 使用Nmap脚本引擎(NSE)中的脚本进行扩展扫描,下面是用于检查目标主机是否有常见漏洞
nmap --script=vuln 192.168.1.1
## auth: 负责处理鉴权证书(绕开鉴权)的脚本  
## broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务  
## brute: 提供暴力破解方式,针对常见的应用如http/snmp等  
## default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力  
## discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等  
## dos: 用于进行拒绝服务攻击  
## exploit: 利用已知的漏洞入侵系统  
## external: 利用第三方的数据库或资源,例如进行whois解析  
## fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性## 的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽  
## malware: 探测目标机是否感染了病毒、开启了后门等信息  
## safe: 此类与intrusive相反,属于安全性脚本  
## version: 负责增强服务与版本扫描(Version Detection)功能的脚本  
## vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067# -T 设置扫描速度模板,范围从0(最慢)到5(最快),数字越大越快,也越容易被发现
## T0(paranoid)极其缓慢,每次探测之间的延迟为5分钟。适用于需要最小化网络流量或避免检测的情况
## T1(sneaky) 非常缓慢,每次探测之间的延迟为15秒。适用于低带宽或隐蔽扫描
## T2(polite)较慢,每次探测之间的延迟为400毫秒。默认情况下使用此模板,以减少对目标网络的影响。
## T3(normal)默认模板,无额外延迟。适合大多数常规扫描。
## T4(aggressive)快速,减少超时时间并增加并发度。适用于快速完成扫描,但可能会更引人注意。
## T5(insane)极快,将最大并发任务数提高到1024,并将超时时间缩短到100毫秒。仅适用于高带宽、低延迟网络。
nmap -T4 192.168.1.1# -D 定义诱饵IP地址,可以用来混淆目标机器的日志记录
nmap -D 192.168.1.10,192.168.1.11 192.168.1.1# --min-rtt-timeout, --max-rtt-timeout, --initial-rtt-timeout:设置RTT(往返时间)超时值  
nmap --min-rtt-timeout 100ms --max-rtt-timeout 2000ms --initial-rtt-timeout 300ms 192.168.1.0/24# --host-timeout 设置单个主机的超时时间
nmap --host-timeout 20m 192.168.1.0/24# -max-retries  设置重试次数
nmap --max-retries 3 192.168.1.0/24# --max-scan-delay 设置最大扫描延迟
nmap --max-scan-delay 1000ms 192.168.1.0/24

参考文章:
https://blog.csdn.net/zyqash/article/details/122986256
https://nmap.org/book/performance-timing-templates.html

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel中一次查询返回多列

使用Excel或wps的时候&#xff0c;有时候需要一次查询返回多列内容&#xff0c;这种情况可以选择多次vlookup或者多次xlookup&#xff0c;但是这种做法费时费力不说&#xff0c;效率还有些低下&#xff0c;特别是要查询的列数过多时。我放了3种查询方法&#xff0c;效果图&…

NodeMCU驱动28BYJ-48型步进电机(Arduino)

NodeMCU NodeMCU开发板 此NodeMCU是在乐鑫公司&#xff08;Espressif Systems&#xff09;生产的ESP-12F模组的基础上封装好的具备WiFi功能的开源IoT开发板。本次选用安信可公司&#xff08;Ai-Thinker&#xff09;生产的CP2102版本的开发板。 28BYJ-48型步进电机 28BYJ-48型…

qt QZipReader详解

1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录&#xff0c;并允许你解压缩单个或多个文件。通过 QZipReader&#xff0c;你可以以编程方式读取 .zip 文件中的内容&#xff0c;并提取它们到目标目录中。…

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …

Ollama+OpenWebUI+llama3本地部署

引言 llama3在4月19日刚刚发布&#xff0c;官方的对比结果中在开源模型中堪称世界第一&#xff0c;整好周六日有时间&#xff0c;在魔搭社区上测试一下 2 安装Ollama 2.1 下载Ollama 登录Ollama官网下载Ollama安装包 GitHub&#xff1a;https://github.com/ollama/ollama?t…

【vue2父组件调用子组件方法之slot的使用】

父组件调用子组件方法之slot的使用 具体功能需求&#xff1a; 一个页面&#xff0c;点击按钮&#xff0c;打开一个弹窗。弹窗有自定义表单和公共表单&#xff0c;提交的时候要获取两个表单的数据以及复显表单数据 为什么使用插槽了&#xff0c;因为我需要在弹窗中复用公共表单…

【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下

【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下 一、问题背景 应用开发中&#xff0c;我们经常会遇到一些文件原先是放在资源文件夹 rawfile下&#xff0c;但是逻辑处理时&#xff0c;需要转移到本地沙箱才能操作。这种情况下&#xff0c;就需要将将…

ubuntu 网络管理--NetworkManager

ubuntu 网络管理--NetworkManager 1 介绍2 NetworkManager 命令2 nmcli 命令显示可用的wifi AP连接wifi检查网络连接 ?? 如何删除删除网络连接查看设备状态添加一个新的以太网连接设置静态 IP 地址启用并测试连接添加新的wifi连接 3 其他命令参考 1 介绍 NetworkManager 是标…

Unity功能模块一对话系统(1)前置准备

也许你也曾被游戏中的对话系统深深吸引&#xff0c;那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话&#xff0c;往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏&#xff0c;或者计划为你的项目加入一个引人入胜的对话系统&#xff0c;那么 Unity…

【自留】Unity VR入门

帮老师写的&#xff0c;自留&#xff0c;不保证是很好的教程。 1.PICO开发指南&#xff08;官方&#xff09; 在该页面&#xff0c;能找到大部分能实现的功能&#xff0c;以及实现方式。非常推荐&#xff01;PICO Unity Integration SDK | PICO 开发者平台 2.如何快速入门&…

以太网帧结构

以太网帧结构 目前&#xff0c;我们局域网当中应用最广的技术或者协议啊&#xff0c;就是以太网。我们首先来看一下以太网的真结构。这块内容这里边再系统的来给大家去展开说一下&#xff0c;以太网真格式就如下面这个图。所示前面有八个字节&#xff0c;是用于时钟同步的&…

【C语言练习(17)—输出杨辉三角形】

C语言练习&#xff08;17&#xff09; 文章目录 C语言练习&#xff08;17&#xff09;前言题目题目解析整体代码 前言 杨辉三角形的输出可以分三步&#xff0c;第一步构建一个三角形、第二步根据规律将三角形内容填写、第三步将三角形以等腰的形式输出 题目 请输出一个十行的…

Java圣诞树

目录 写在前面 技术需求 程序设计 代码分析 一、代码结构与主要功能概述 二、代码功能分解与分析 1. 类与常量定义 2. 绘制树的主逻辑 3. 彩色球的绘制 4. 动态效果的实现 5. 窗口初始化 三、关键特性与优点 四、总结 写在后面 写在前面 Java语言绘制精美圣诞树…

YashanDB 23.2 YAC -单库多实例架构多活共享集群安装部署指南

一、概述 1.1 文档目标 ​ 本说明旨在指导技术人员在 CentOS 7 x86_64 操作系统上完成崖山数据库企业版 23.2 的共享集群安装与部署。通过系统架构、集群拓扑及部署需求的精确描述&#xff0c;帮助读者在开始安装前对崖山数据库的架构形成清晰认识。本文以高效、稳定、安全为…

uniapp 文本转语音

uniapp 文本转语音 基于 Minimax API 的 UniApp 文本转语音工具&#xff0c;支持文本分段、队列播放、暂停恢复等功能。目前只内置了 Minimax文本转语音Minimax 的语音生成技术以其自然、情感丰富和实时性强而著称 API_KEY、GroupId 获取方法 https://platform.minimaxi.com…

ArrayList源码解析

1、介绍 1、可扩容&#xff0c;允许存储任何元素&#xff0c;包括null。这个类提供了一些方法来操纵数组大小&#xff0c;大致相当于Vector类。 2、ArrayList的容量是表示存储数组元素的大小&#xff0c;容量至少大于列表大小&#xff0c;在容量不足时&#xff0c;会自动扩容至…

ElementPlus 自定义封装 el-date-picker 的快捷功能

文章目录 需求分析 需求 分析 我们看到官网上给出的案例如下&#xff0c;但是不太满足我们用户想要的快捷功能&#xff0c;因为不太多&#xff0c;因此需要我们自己封装一些&#xff0c;方法如下 外部自定义该组件的快捷内容 export const getPickerOptions () > {cons…

GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)

目录 前言 一. 变更详情 1. 停止服务区域 2. 邮件通知 3. 新的服务提供商 4. 关键日期 5. 行动建议 二. 迁移指南 三. 注意事项 四. 相关推荐 前言 近期&#xff0c;许多位于中国大陆、澳门和香港的 GitLab 用户收到了一封来自 GitLab 官方的重要通知。根据这封邮件…

使用Grafana中按钮插件实现收发HTTP请求

最近项目中需要监控分布式集群的各项指标信息&#xff0c;需要用到PrometheusGrafana的技术栈实现对分布式集群的各个节点状态进行可视化显示&#xff0c;但是要求前端需要提供一个易用的接口让用户可以触发一些操作&#xff0c;例如负载高时进行负载均衡或弹性伸缩。网上找到的…

【前端】MVC模式详解:如何构建高效的Web应用程序?

&#x1f4a5; 欢迎来到[爱学习的小羊]的博客&#xff01;希望你能在这里发现有趣的内容和丰富的知识。同时&#xff0c;期待你分享自己的观点和见解&#xff0c;让我们一起开启精彩的交流旅程&#xff01;&#x1f31f;> 首页&#xff1a;爱学习的小羊 – 热爱AI、热爱Pyt…