nmapNetwork Mapper是 Linux 中最强大的网络探测和安全审计工具。它可以发现网络上的主机、扫描开放端口、检测服务版本、识别操作系统甚至进行漏洞检测。⚠️ 法律和道德声明重要仅扫描你拥有或获得明确授权的网络。未经授权的扫描可能违法。 基本语法nmap[扫描类型][选项]{目标规范}目标规范可以是IP 地址192.168.1.1IP 范围192.168.1.1-100CIDR 表示法192.168.1.0/24主机名example.com从文件读取-iL hosts.txt 常用扫描类型扫描类型命令选项说明TCP SYN 扫描-sS半开放扫描最常用不易被检测TCP Connect 扫描-sT完全连接扫描无需 root 权限UDP 扫描-sUUDP 端口扫描速度较慢ACK 扫描-sA用于检测防火墙规则窗口扫描-sW利用 TCP 窗口大小差异MAIMON 扫描-sM发送 FIN/ACK 包NULL 扫描-sN发送无标志包FIN 扫描-sF发送 FIN 包XMAS 扫描-sX发送 FIN/URG/PSH 包空闲扫描-sI使用僵尸主机进行隐蔽扫描IP 协议扫描-sO扫描 IP 协议号 常用选项选项类别选项说明目标指定-iL 文件从文件读取目标列表-iR 数量随机选择目标--exclude 主机排除主机--excludefile 文件从文件读取排除列表主机发现-sn仅进行主机发现不扫描端口-Pn跳过主机发现假定所有主机在线-PS/PA/PU/PY[端口]TCP SYN/ACK、UDP、SCTP 发现-PE/PP/PMICMP echo、timestamp、netmask 请求-PO[协议列表]IP 协议 ping端口规范-p 端口范围指定端口范围-p-扫描所有端口1-65535-F快速扫描100个常用端口--top-ports 数量扫描最常见的前 N 个端口-p U:53,111,T:21-25混合 TCP/UDP 端口服务版本-sV探测服务/版本信息--version-intensity 0-9版本检测强度0-9--version-all尝试所有版本检测强度9--version-trace显示版本检测过程操作系统-O启用操作系统检测--osscan-limit仅对确定的主机进行 OS 检测--osscan-guess更积极地猜测 OS--max-os-tries设置 OS 检测尝试次数脚本扫描-sC使用默认脚本进行扫描--script脚本使用指定脚本--script-args参数提供脚本参数--script-trace显示脚本执行过程--script-updatedb更新脚本数据库时序选项-T0-5时序模板0-5数字越大越快-T0偏执非常慢用于 IDS 规避-T1鬼祟慢速扫描减少带宽消耗-T2文雅降低速度减少干扰-T3正常默认速度-T4激进快速扫描可能丢失信息-T5疯狂极快可能被检测输出格式-oN 文件标准输出到文件-oX 文件XML 格式输出-oS 文件Script kiddie 格式输出-oG 文件Grepable 格式输出-oA 基本名所有格式输出.nmap, .xml, .gnmap其他选项-v/-vv增加详细程度-d/-dd增加调试级别--reason显示端口状态原因--open仅显示开放端口--packet-trace显示发送/接收的所有包--iflist显示主机接口和路由-A启用 OS 检测、版本检测、脚本扫描、路由追踪 核心用法示例1. 基本主机发现# 发现本地网络中的活动主机不扫描端口nmap-sn192.168.1.0/24# 发现特定 IP 范围的主机nmap-sn192.168.1.1-100# 从文件读取目标列表进行发现nmap-sn-iLhosts.txt# 使用多种发现技术nmap-sn-PE-PS22,80,443192.168.1.0/242. 端口扫描# 快速扫描100个常用端口nmap-F192.168.1.1# 扫描特定端口nmap-p22,80,443192.168.1.1# 扫描端口范围nmap-p1-1000192.168.1.1# 扫描所有端口1-65535nmap -p-192.168.1.1# 扫描最常见的 1000 个端口nmap --top-ports1000192.168.1.1# 混合 TCP/UDP 扫描nmap-pU:53,67,T:21-25,80,443192.168.1.13. 服务版本检测# 检测服务版本nmap-sV192.168.1.1# 高强度版本检测nmap-sV--version-intensity9192.168.1.1# 快速版本检测nmap-sV--version-light192.168.1.1# 显示版本检测过程nmap-sV--version-trace192.168.1.14. 操作系统检测# 操作系统检测nmap-O192.168.1.1# 操作系统检测更积极猜测nmap-O--osscan-guess192.168.1.1# 仅对确定的主机进行 OS 检测nmap-O--osscan-limit192.168.1.15. 脚本扫描# 使用默认脚本扫描nmap-sC192.168.1.1# 使用特定脚本nmap--scripthttp-title192.168.1.1# 使用多个脚本nmap--scripthttp-title,ssl-cert192.168.1.1# 使用脚本类别nmap--scriptvuln192.168.1.1# 带参数的脚本扫描nmap--scriptsmb-enum-shares --script-argssmbuseradmin,smbpasspassword192.168.1.16. 综合扫描# 全面扫描OS检测、版本检测、脚本扫描nmap-A192.168.1.1# 全面扫描 路由追踪nmap-A--traceroute192.168.1.1# 全面扫描 所有端口nmap-A-p-192.168.1.1 输出解读示例nmap-sS-sV-O192.168.1.1典型输出Starting Nmap 7.80 ( https://nmap.org ) at 2024-01-01 12:00 CST Nmap scan report for 192.168.1.1 Host is up (0.0020s latency). Not shown: 995 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10deb10u2 (protocol 2.0) 80/tcp open http nginx 1.14.2 443/tcp open ssl/http nginx 1.14.2 3306/tcp open mysql MySQL 5.5.60 8080/tcp open http-proxy Squid http proxy 3.5.27 MAC Address: 00:11:22:33:44:55 (Vendor Name) Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.2 - 4.9 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 12.34 seconds 实用场景示例场景 1网络资产发现#!/bin/bash# 网络资产发现脚本NETWORK192.168.1.0/24OUTPUT_FILEnetwork_inventory_$(date%Y%m%d_%H%M%S).txtecho 网络资产发现扫描 echo网络:$NETWORKecho开始时间:$(date)echo输出文件:$OUTPUT_FILEecho# 1. 主机发现echo1. 主机发现...nmap-sn$NETWORK-oGhosts_scan.gnmap# 提取活动主机IPgrepStatus: Uphosts_scan.gnmap|cut-d -f2active_hosts.txtHOST_COUNT$(wc-lactive_hosts.txt)echo发现$HOST_COUNT个活动主机# 2. 端口扫描快速echo-e\n2. 快速端口扫描...nmap-F-iLactive_hosts.txt-oGports_scan.gnmap# 3. 详细扫描对开放端口的主机echo-e\n3. 详细服务扫描...whileread-rhost;doecho扫描主机:$hostnmap-sV-O--scriptbanner$host$OUTPUT_FILEecho---$OUTPUT_FILEdoneactive_hosts.txt# 4. 生成报告echo-e\n4. 生成摘要报告...echo 网络资产摘要 summary_$(date%Y%m%d).txtecho扫描时间:$(date)summary_$(date%Y%m%d).txtecho网络范围:$NETWORKsummary_$(date%Y%m%d).txtecho活动主机数:$HOST_COUNTsummary_$(date%Y%m%d).txtechosummary_$(date%Y%m%d).txt# 按服务统计echo开放端口统计:summary_$(date%Y%m%d).txtgrep-E^[0-9]/tcp.*open$OUTPUT_FILE|\awk{print $3}|sort|uniq-c|sort-rnsummary_$(date%Y%m%d).txtecho-e\n扫描完成echo详细报告:$OUTPUT_FILEecho摘要报告: summary_$(date%Y%m%d).txt# 清理临时文件rm-fhosts_scan.gnmap ports_scan.gnmap active_hosts.txt场景 2安全审计扫描#!/bin/bash# 安全审计扫描脚本TARGET$1OUTPUT_DIRsecurity_audit_$(date%Y%m%d_%H%M%S)if[-z$TARGET];thenecho用法:$0目标IP/范围exit1fimkdir-p$OUTPUT_DIRcd$OUTPUT_DIR||exitecho 安全审计扫描 echo目标:$TARGETecho开始时间:$(date)echo输出目录:$OUTPUT_DIRecho# 1. 全面扫描echo1. 执行全面扫描...nmap-A-T4-p-$TARGET-oAfull_scan# 2. 漏洞扫描echo-e\n2. 执行漏洞扫描...nmap--scriptvuln$TARGET-oNvuln_scan.txt# 3. Web 应用扫描echo-e\n3. 执行 Web 应用扫描...nmap--scripthttp-*$TARGET-oNweb_scan.txt# 4. 数据库扫描echo-e\n4. 执行数据库扫描...nmap--scriptmysql-*,postgresql-*$TARGET-oNdb_scan.txt# 5. SSH 安全扫描echo-e\n5. 执行 SSH 安全扫描...nmap--scriptssh-*$TARGET-oNssh_scan.txt# 6. 防火墙检测echo-e\n6. 执行防火墙检测...nmap-sA$TARGET-oNfirewall_scan.txt# 7. 生成报告echo-e\n7. 生成综合报告...catsecurity_report.mdEOF # 安全审计报告 ## 基本信息 - 目标:$TARGET- 扫描时间:$(date)- 扫描工具: Nmap$(nmap--version|head-1)## 扫描结果摘要 ### 开放端口 \\\$(grep-E^[0-9]/tcp.*openfull_scan.nmap|head-20)\\\### 发现的服务 \\\$(grep-E^\|_[0-9]/tcpfull_scan.nmap|head-20)\\\### 操作系统信息 \\\$(grep-A5OS detailsfull_scan.nmap)\\\### 潜在漏洞 \\\$(grep-E(VULNERABLE|CVE)vuln_scan.txt|head-10)\\\## 建议 1. 关闭不必要的端口 2. 更新发现的服务到最新版本 3. 检查并修复发现的漏洞 EOFecho-e\n扫描完成echo报告文件:$OUTPUT_DIR/security_report.mdecho原始数据文件在:$OUTPUT_DIR/场景 3网络监控#!/bin/bash# 网络监控脚本TARGETS_FILEmonitor_targets.txtLOG_DIRmonitor_logsINTERVAL300# 5分钟mkdir-p$LOG_DIRecho 网络监控开始 echo监控目标:$(cat$TARGETS_FILE|wc-l)个主机echo检查间隔:$INTERVAL秒echo日志目录:$LOG_DIRecho按 CtrlC 停止echowhiletrue;doTIMESTAMP$(date%Y%m%d_%H%M%S)LOG_FILE$LOG_DIR/scan_$TIMESTAMP.txtecho[$(date%Y-%m-%d %H:%M:%S)] 开始扫描...# 执行快速扫描nmap-T4-F-iL$TARGETS_FILE-oN$LOG_FILE/dev/null21# 检查变化if[-f$LOG_DIR/last_scan.txt];thenCHANGES$(diff$LOG_DIR/last_scan.txt$LOG_FILE|grep-E^[]|head-5)if[-n$CHANGES];thenecho检测到变化:echo$CHANGES# 发送警报示例记录到文件echo[$(date%Y-%m-%d %H:%M:%S)] 网络变化检测$LOG_DIR/alerts.logecho$CHANGES$LOG_DIR/alerts.logecho---$LOG_DIR/alerts.logfifi# 保存本次扫描结果cp$LOG_FILE$LOG_DIR/last_scan.txt# 统计信息UP_HOSTS$(grep-cStatus: Up$LOG_FILE)OPEN_PORTS$(grep-copen$LOG_FILE)echo[$(date%Y-%m-%d %H:%M:%S)] 扫描完成 - 活动主机:$UP_HOSTS, 开放端口:$OPEN_PORTS# 等待下一次扫描sleep$INTERVALdone⚙️ Nmap 脚本引擎NSENmap 脚本引擎提供了强大的扩展功能常用脚本类别# 查看所有脚本类别ls/usr/share/nmap/scripts/|xargs-I{}basename{}.nse|sort-u# 常用脚本示例nmap--scriptauth192.168.1.1# 身份认证检查nmap--scriptbrute192.168.1.1# 暴力破解nmap--scriptdefault192.168.1.1# 默认脚本nmap--scriptvuln192.168.1.1# 漏洞检测nmap--scriptsafe192.168.1.1# 安全脚本nmap--scriptintrusive192.168.1.1# 侵入式脚本nmap--scriptdiscovery192.168.1.1# 发现脚本nmap--scriptdos192.168.1.1# 拒绝服务检测nmap--scriptexploit192.168.1.1# 漏洞利用nmap--scriptexternal192.168.1.1# 外部脚本自定义脚本扫描# 扫描特定服务nmap--scriptftp-*192.168.1.1 nmap--scripthttp-*192.168.1.1 nmap--scriptsmb-*192.168.1.1 nmap--scriptssh-*192.168.1.1 nmap--scriptssl-*192.168.1.1# 使用多个脚本nmap--scripthttp-title,http-headers,http-methods192.168.1.1# 带参数的脚本nmap--scripthttp-brute --script-argsuserdbusers.txt,passdbpasswords.txt192.168.1.1⚠️ 重要注意事项法律合规仅扫描你有权扫描的网络。扫描速度避免过快的扫描使用-T选项控制。隐蔽性某些扫描类型可能被入侵检测系统发现。资源消耗全面扫描可能消耗大量网络和系统资源。准确性防火墙、IDS 可能影响扫描结果准确性。版本更新定期更新 nmap 和脚本数据库。 相关工具工具用途说明masscan高速端口扫描比 nmap 更快但功能较少zmap互联网范围扫描专为快速互联网扫描设计netdiscoverARP 发现工具局域网主机发现hping3数据包构造工具高级网络测试nc(netcat)网络瑞士军刀端口测试和连接tcpdump网络抓包工具流量分析 最佳实践分阶段扫描先主机发现再端口扫描最后服务检测。保存结果使用-oA保存所有格式的结果。使用脚本合理使用 NSE 脚本增强扫描能力。定时扫描定期扫描监控网络变化。结果分析结合其他工具分析 nmap 结果。nmap是网络管理员、安全专家和渗透测试人员的必备工具。掌握其用法可以帮助你更好地了解网络状况、发现安全漏洞和监控网络变化。