本文最后更新于73 天前,其中的信息可能已经过时,如有问题可在评论区留言
一、基础命令
nmap <目标IP或域名1> <目标IP或域名2>
- 默认使用TCP全连接扫描,相当于使用-sT参数
nmap <子网地址>/24
- 扫描整个网段
nmap -p <端口号1,端口号2> <目标>
- -p:指定端口
- -p-:扫描所有端口
nmap -O <目标>
- -O: 启用操作系统检测。
nmap -A <目标>
- -A:扫描所有信息,耗时长
- 相当于同时执行-sS、-sV、-O、-sC
二、指定扫描方式
nmap -sS <目标>
- SYN 扫描
- 快速且隐蔽,不建立完整连接,可以绕过一些防火墙和 IDS。
nmap -sT
<目标>
- TCP全连接扫描
- 能够检测到所有开放的端口,容易被防火墙和入侵检测系统(IDS)检测到。
nmap -sU <目标>
- UDP扫描
- 能够检测 UDP 服务,很多服务使用 UDP。
- 扫描速度较慢,且不可靠,容易被检测。
nmap -sA <目标>
- ACK 扫描
- 用于识别防火墙规则,能判断哪些端口被过滤。
- 不提供端口开放或关闭的具体信息。
三、进阶
nmap -Pn <目标>
- 跳过PING扫描
- 跳过主机发现,用于目标防火墙禁用 ICMP的情况
- 隐藏真实IP必须的命令
nmap -sn -PR 192.168.211.0/24
- 内网主机发现
- -sn:no port scan,不进行端口扫描
- -PR:ARP scan,使用ARP协议扫描,用于局域网内主机发现
nmap -D RND:10 <目标IP>
- 使用随机生成的10个IP地址伪装
- 也可以使用
nmap -D 192.168.1.1,192.168.1.2 <目标IP>
指定伪装IP
nmap -T0 <目标>
- 指定扫描速度
- 0: 非常慢,适合在防火墙或 IDS(入侵检测系统)下进行隐蔽扫描。
- 1: 慢,适合在安全性高的网络环境中使用。
- 2: 中等速度,减少对目标的负载,适合在需要考虑目标主机负载的情况下使用。
- 3: 默认设置,适合大多数情况。
- 4: 较快,适合快速扫描,可能会引起警报。
- 5: 非常快,适合在局域网环境中使用,但可能会导致被检测和封锁。
四、高级
这里需要特别说一下-sI
这个命令,TCP Idle Scan(空闲扫描),这是nmap最隐蔽的扫描方式,可以完全隐藏你的真实IP地址的同时扫描目标主机的开放端口,但也是最复杂的扫描方式。
在这个过程中,扫描者并不直接与目标系统交互,而是通过僵尸主机发送数据包。这种扫描的关键在于僵尸主机的IP ID字段,其值会随着每次通信递增。扫描者通过观察僵尸主机的IP ID变化来推测目标端口的开放情况。
具体步骤如下:
- 扫描者首先向僵尸主机发送SYN/ACK包,探测其当前的IP ID。
- 然后,向目标发送伪造的SYN请求包,这些包看似来自僵尸主机。
- 根据目标端口的状态,目标主机会做出不同响应:
- 如果端口开放,目标主机会回复一个SYN/ACK包到僵尸主机上,而僵尸主机会被动发送一个RST包,导致其IP ID增加。
- 如果端口关闭,目标主机会发送一个RST包,而僵尸主机的IP ID保持不变。
- 扫描者再次与僵尸主机通信,通过比较前后两次IP ID值的变化,推断目标端口的状态。
当然,这种扫描方法也存在一些限制,僵尸主机必须满足条件,其IP ID字段必须是递增的,并且与其他系统的通信量要低,否则很难通过IP ID来判断目标主机端口是否开放。且在某些IPS(互联网服务提供商)的网络出口会实施过滤,防止数据包欺骗。
示例:
nmap -sI <Zombie> -Pn -p20-25,110 --packet-trace -v <Target>