写在前面
众所周知,nmap是强大的开源端口扫描神器。我们这篇文章重点讲一下nmap常用的参数和基础的使用方法。
命令行格式
nmap -扫描方式 -选项 -目标地址
常用的选项
s*为指定扫描方式:
-sT 全连接扫描(会进行完整的三次握手,有安全设备可以识别sS扫描并阻止,所以全连接扫描可能会更准确)
-sS 半连接扫描(收到第二次握手包后不会回复以建立连接,速度会更快,且由于不会建立连接,会更隐蔽)
-sU UDP端口扫描
-sV 扫描服务及版本信息
-p 指定端口,默认为最常用的1000个端口
-T 指定扫描速度值为0-5,默认为3
-O 扫描操作系统信息
-Pn 不使用ping进行存活探测,直接扫描
-v 输出详细扫描经过,-vv会更详细
o*为指定输出格式:
-oN 将扫描结果输出为常规格式文件(用户输入文件名.nmap),适合直接阅读
-oX 将扫描结果输出为xml格式文件(用户输入文件名.xml),便于数据的进一步处理和集成到其他工具中
-oG 方便抓取格式文件(用户输入文件名.gnmap),方便使用grep等工具抓取
-oA 同时输出上述三种格式
最常用的组合方式之一(仅代表个人)
sudo nmap -sT -sV -O -Pn -p 1-65535 目标地址 -oA 文件名
默认扫描方式
下面我们使用sudo nmap -vv 127.0.0.1来观察一下默认扫描方式。
默认扫描方式:
1、使用syn扫描(syn扫描需要管理员权限,无则使用全连接扫描)
2、扫描一千个常用端口
3、服务是根据端口推测的,未进行详细扫描
admin@ip-172-26-10-47:~$ sudo nmap -vv 127.0.0.1
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-30 14:02 +08
Initiating SYN Stealth Scan at 14:02 //这里使用了syn扫描,如果无管理员权限会是全连接扫描
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 3306/tcp on 127.0.0.1
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 1025/tcp on 127.0.0.1
Discovered open port 2222/tcp on 127.0.0.1
Completed SYN Stealth Scan at 14:02, 0.03s elapsed (1000 total ports) //扫描了1000个最常用端口
Nmap scan report for localhost (127.0.0.1)
Host is up, received localhost-response (0.0000030s latency).
Scanned at 2024-05-30 14:02:55 +08 for 0s
Not shown: 995 closed ports
Reason: 995 resets
PORT STATE SERVICE REASON //服务是根据端口推测,可能和实际开放不同
22/tcp open ssh syn-ack ttl 64
80/tcp open http syn-ack ttl 64
1025/tcp open NFS-or-IIS syn-ack ttl 64
2222/tcp open EtherNetIP-1 syn-ack ttl 64
3306/tcp open mysql syn-ack ttl 64
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
Raw packets sent: 1000 (44.000KB) | Rcvd: 2005 (84.220KB)
官方帮助文档
以下内容为nmap官方帮助文档使用chatgpt翻译后的结果,看了一看翻译的还是很到位的。想要深入了解的同学可以保存一下。
使用方法:
nmap [扫描类型] [选项] {目标规格}
目标规格:
- 可以传递主机名、IP地址、网络等。
- 示例:scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>
:从主机/网络列表中输入-iR <num hosts>
:选择随机目标--exclude <host1[,host2][,host3],...>
:排除指定的主机/网络--excludefile <exclude_file>
:从文件中排除列表
主机发现:
-sL
:列表扫描 - 仅列出要扫描的目标-sn
:Ping扫描 - 禁用端口扫描-Pn
:将所有主机视为在线 - 跳过主机发现-PS/PA/PU/PY[portlist]
:对指定端口进行TCP SYN/ACK、UDP或SCTP发现-PE/PP/PM
:ICMP回显、时间戳和网络掩码请求发现探测-PO[protocol list]
:IP协议Ping-n/-R
:从不进行DNS解析/始终解析 [默认:有时]--dns-servers <serv1[,serv2],...>
:指定自定义DNS服务器--system-dns
:使用操作系统的DNS解析器--traceroute
:跟踪每个主机的跳路径
扫描技术:
-sS/sT/sA/sW/sM
:TCP SYN/连接()/ACK/窗口/Maimon扫描-sU
:UDP扫描-sN/sF/sX
:TCP Null、FIN和Xmas扫描--scanflags <flags>
:自定义TCP扫描标志-sI <zombie host[:probeport]>
:Idle扫描-sY/sZ
:SCTP INIT/COOKIE-ECHO扫描-sO
:IP协议扫描-b <FTP relay host>
:FTP中继扫描
端口规格和扫描顺序:
-p <port ranges>
:仅扫描指定端口- 示例:
-p22
;-p1-65535
;-p U:53,111,137,T:21-25,80,139,8080,S:9
- 示例:
--exclude-ports <port ranges>
:排除指定端口的扫描-F
:快速模式 - 扫描比默认端口更少的端口-r
:按顺序扫描端口 - 不随机化--top-ports <number>
:扫描最常见的<number>个端口--port-ratio <ratio>
:扫描比<ratio>更常见的端口
服务/版本检测:
-sV
:探测开放端口以确定服务/版本信息--version-intensity <level>
:设置从0(轻量级)到9(尝试所有探测)的级别--version-light
:限制为最可能的探测(强度2)--version-all
:尝试每一个探测(强度9)--version-trace
:显示详细的版本扫描活动(用于调试)
脚本扫描:
-sC
:等同于--script=default
--script=<Lua scripts>
:<Lua scripts> 是以逗号分隔的目录、脚本文件或脚本类别的列表--script-args=<n1=v1,[n2=v2,...]>
:为脚本提供参数--script-args-file=filename
:在文件中提供NSE脚本参数--script-trace
:显示发送和接收的所有数据--script-updatedb
:更新脚本数据库--script-help=<Lua scripts>
:显示关于脚本的帮助信息- <Lua scripts> 是以逗号分隔的脚本文件或脚本类别的列表
操作系统检测:
-O
:启用操作系统检测--osscan-limit
:将操作系统检测限制在可能的目标上--osscan-guess
:更积极地猜测操作系统
时间和性能:
- 以<time>为单位的选项为秒,或在值后面附加'ms'(毫秒)、's'(秒)、'm'(分钟)或'h'(小时)
-T<0-5>
:设置时间模板(越高越快)--min-hostgroup/max-hostgroup <size>
:并行主机扫描组大小--min-parallelism/max-parallelism <numprobes>
:探测并行化--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>
:指定探测往返时间--max-retries <tries>
:限制端口扫描探测重传次数--host-timeout <time>
:在指定时间后放弃目标--scan-delay/--max-scan-delay <time>
:调整探测之间的延迟--min-rate <number>
:每秒发送的数据包不少于<number>--max-rate <number>
:每秒发送的数据包不超过<number>
防火墙/IDS规避和欺骗:
-f
;--mtu <val>
:分段数据包(可选的给定MTU值)-D <decoy1,decoy2[,ME],...>
:使用诱饵掩盖扫描-S <IP_Address>
:伪造源地址-e <iface>
:使用指定的接口-g/--source-port <portnum>
:使用给定的端口号--proxies <url1,[url2],...>
:通过HTTP/SOCKS4代理中继连接--data <hex string>
:将自定义有效负载附加到发送的数据包中--data-string <string>
:将自定义ASCII字符串附加到发送的数据包中--data-length <num>
:将随机数据附加到发送的数据包中--ip-options <options>
:发送具有指定IP选项的数据包--ttl <val>
:设置IP生存时间字段--spoof-mac <mac address/prefix/vendor name>
:伪造MAC地址--badsum
:发送具有虚假TCP/UDP/SCTP校验和的数据包
输出:
-oN/-oX/-oS/-oG <file>
:将扫描结果输出为正常、XML、脚本小子和可抓取格式,分别到指定文件-oA <basename>
:一次性输出为三种主要格式-v
:增加详细程度(使用-vv
或更多以获得更大效果)-d
:增加调试级别(使用-dd
或更多以获得更大效果)--reason
:显示端口处于特定状态的原因--open
:仅显示打开(或可能打开)的端口--packet-trace
:显示所有发送和接收的数据包--iflist
:打印主机接口和路由(用于调试)--append-output
:附加而不是覆盖指定的输出文件--resume <filename>
:恢复中断的扫描--noninteractive
:禁用通过键盘的运行时交互--stylesheet <path/URL>
:XSL样式表,将XML输出转换为HTML--webxml
:从Nmap.Org引用样式表以获得更便携的XML--no-stylesheet
:防止将XSL样式表与XML输出关联
其他:
-6
:启用IPv6扫描-A
:启用操作系统检测、版本检测、脚本扫描和traceroute--datadir <dirname>
:指定自定义Nmap数据文件位置--send-eth/--send-ip
:使用原始以太网帧或IP数据包发送--privileged
:假设用户具有完全特权--unprivileged
:假设用户没有原始套接字特权-V
:打印版本号-h
:打印此帮助摘要页面
示例:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
写在结尾
大家好,这里是努力创作优质且免费内容的苦逼搬砖猿老羊,希望大家可以动动发财的小手,点赞关注支持一下。