# Nmap 基础:主机发现与端口识别(仅用于**授权/本地靶场**扫描) > 前置提醒:**未经授权扫描任何公网服务器、IP属于违法行为**。下面所有操作,只在自己搭建的靶场环境练习。 ## 一、主机发现(判断网段内哪些机器存活,不扫描端口) 核心参数 `-sn`(skip port scan,只做存活探测) ```bash # 扫描C段,找出内网存活主机 nmap -sn 192.168.1.0/24 # 扫描单个IP是否存活 nmap -sn 192.168.1.100 ``` ### 主机发现原理 默认组合探测方式: 1. ICMP Ping(ping) 2. TCP 80、443端口探测 3. ICMP时间戳请求 ### 常用补充参数 ```bash # 目标禁ping,强制跳过存活检测,直接扫端口 nmap -Pn 192.168.1.100 # 只使用ICMP ping探测 nmap -sn -PE 192.168.1.0/24 # ARP扫描(内网局域网效果最好,优先推荐,root权限) nmap -sn -PR 192.168.1.0/24 ``` > 内网ARP扫描优势:很多防火墙禁ICMP,但ARP无法拦截,内网识别存活主机最准。 ## 二、端口扫描基础:识别开放端口与服务 ### 端口状态4种结果(必背) 1. `open`:端口开放,有程序监听 2. `closed`:端口关闭,主机在线 3. `filtered`:防火墙/ACL拦截,无法确认端口状态 4. `unfiltered`:能收到TCP响应,但无法判断开放/关闭 ### 常用端口扫描命令 ```bash # 默认:扫描TOP1000常用端口,SYN扫描(sudo) sudo nmap 192.168.1.100 # 快速扫描:只扫描TOP100端口 sudo nmap -F 192.168.1.100 # 指定单个端口 sudo nmap -p 80 192.168.1.100 # 多个端口逗号分隔 sudo nmap -p 80,443,3306,22 192.168.1.100 # 端口范围 sudo nmap -p 1-1000 192.168.1.100 # 全端口扫描(1~65535,耗时较长,靶场使用) sudo nmap -p- 192.168.1.100 ``` ## 三、扫描类型(TCP扫描重点区分) ```bash # -sS SYN半开扫描【推荐,root权限】 # 只发SYN包,不完成完整TCP三次握手,日志痕迹更少 sudo nmap -sS 192.168.1.100 # -sT TCP全连接扫描(无root权限自动使用,握手完整,容易被日志记录) nmap -sT 192.168.1.100 # -sU UDP扫描,慢!用于DNS53、SNMP161、memcached sudo nmap -sU -p 53,161 192.168.1.100 ``` ## 四、识别服务版本 + 操作系统识别 ```bash # -sV:探测端口上运行的服务、版本号 sudo nmap -sV 192.168.1.100 # -O:操作系统识别(root) sudo nmap -O 192.168.1.100 # 组合:SYN扫描 + 版本探测 + OS识别 + 显示端口原因 sudo nmap -sS -sV -O --reason -T4 192.168.1.100 ``` - `--reason`:显示Nmap判定端口状态的理由(学习推荐) - `-T4`:时序模板,平衡速度与稳定性(T1慢,T5极快容易丢包) ## 五、输出保存(取证,报告使用) ```bash # 普通文本 nmap -sV 192.168.1.100 -oN scan.txt # XML格式(导入Metasploit、Nessus等工具) nmap -sV 192.168.1.100 -oX scan.xml ``` ## 六、标准实操工作流(靶场授权扫描) 1. 网段存活探测:`nmap -sn 192.168.1.0/24`,拿到存活IP清单 2. 对目标IP做端口+版本扫描:`sudo nmap -sS -sV --reason -T4 -Pn 目标IP` 3. 记录开放端口、服务版本 4. 根据开放端口选择后续测试:80/443 → Burp Web测试;22/3306 关注弱口令等 ## 七、常见坑 1. **必须root才能执行-sS**,普通用户自动降级为全连接扫描 `-sT` 2. 防火墙/WAF会大量返回`filtered`,造成端口漏判 3. UDP扫描速度极慢,**不要直接扫全部UDP端口,指定端口** 4. 版本识别只是猜测,服务可能伪装Banner,存在误判 ## 八、速记命令合集 ```bash # 存活主机发现 nmap -sn 192.168.1.0/24 # 深度端口+版本扫描(推荐靶场) sudo nmap -sS -sV --reason -T4 -Pn 192.168.1.100 # 全端口扫描 sudo nmap -sS -p- -sV -T4 192.168.1.100 ```