[工具使用] Linux命令-nmap(网络探测和安全审计工具)

569 0
Honkers 2026-6-16 07:59:15 来自手机 | 显示全部楼层 |阅读模式

nmap(Network Mapper)是 Linux 中最强大的网络探测和安全审计工具。它可以发现网络上的主机、扫描开放端口、检测服务版本、识别操作系统,甚至进行漏洞检测。

⚠️ 法律和道德声明

重要:仅扫描你拥有或获得明确授权的网络。未经授权的扫描可能违法。

📦 基本语法

  1. nmap [扫描类型] [选项] {目标规范}
复制代码

目标规范可以是:

  • IP 地址:192.168.1.1
  • IP 范围:192.168.1.1-100
  • CIDR 表示法: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更新脚本数据库
时序选项-T<0-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. 基本主机发现
  1. # 发现本地网络中的活动主机(不扫描端口)
  2. nmap -sn 192.168.1.0/24
  3. # 发现特定 IP 范围的主机
  4. nmap -sn 192.168.1.1-100
  5. # 从文件读取目标列表进行发现
  6. nmap -sn -iL hosts.txt
  7. # 使用多种发现技术
  8. nmap -sn -PE -PS22,80,443 192.168.1.0/24
复制代码
2. 端口扫描
  1. # 快速扫描(100个常用端口)
  2. nmap -F 192.168.1.1
  3. # 扫描特定端口
  4. nmap -p 22,80,443 192.168.1.1
  5. # 扫描端口范围
  6. nmap -p 1-1000 192.168.1.1
  7. # 扫描所有端口(1-65535)
  8. nmap -p- 192.168.1.1
  9. # 扫描最常见的 1000 个端口
  10. nmap --top-ports 1000 192.168.1.1
  11. # 混合 TCP/UDP 扫描
  12. nmap -p U:53,67,T:21-25,80,443 192.168.1.1
复制代码
3. 服务版本检测
  1. # 检测服务版本
  2. nmap -sV 192.168.1.1
  3. # 高强度版本检测
  4. nmap -sV --version-intensity 9 192.168.1.1
  5. # 快速版本检测
  6. nmap -sV --version-light 192.168.1.1
  7. # 显示版本检测过程
  8. nmap -sV --version-trace 192.168.1.1
复制代码
4. 操作系统检测
  1. # 操作系统检测
  2. nmap -O 192.168.1.1
  3. # 操作系统检测(更积极猜测)
  4. nmap -O --osscan-guess 192.168.1.1
  5. # 仅对确定的主机进行 OS 检测
  6. nmap -O --osscan-limit 192.168.1.1
复制代码
5. 脚本扫描
  1. # 使用默认脚本扫描
  2. nmap -sC 192.168.1.1
  3. # 使用特定脚本
  4. nmap --script=http-title 192.168.1.1
  5. # 使用多个脚本
  6. nmap --script=http-title,ssl-cert 192.168.1.1
  7. # 使用脚本类别
  8. nmap --script=vuln 192.168.1.1
  9. # 带参数的脚本扫描
  10. nmap --script=smb-enum-shares --script-args=smbuser=admin,smbpass=password 192.168.1.1
复制代码
6. 综合扫描
  1. # 全面扫描(OS检测、版本检测、脚本扫描)
  2. nmap -A 192.168.1.1
  3. # 全面扫描 + 路由追踪
  4. nmap -A --traceroute 192.168.1.1
  5. # 全面扫描 + 所有端口
  6. nmap -A -p- 192.168.1.1
复制代码

🔍 输出解读示例

  1. nmap -sS -sV -O 192.168.1.1
复制代码

典型输出:

  1. Starting Nmap 7.80 ( https://nmap.org ) at 2024-01-01 12:00 CST
  2. Nmap scan report for 192.168.1.1
  3. Host is up (0.0020s latency).
  4. Not shown: 995 closed ports
  5. PORT STATE SERVICE VERSION
  6. 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
  7. 80/tcp open http nginx 1.14.2
  8. 443/tcp open ssl/http nginx 1.14.2
  9. 3306/tcp open mysql MySQL 5.5.60
  10. 8080/tcp open http-proxy Squid http proxy 3.5.27
  11. MAC Address: 00:11:22:33:44:55 (Vendor Name)
  12. Device type: general purpose
  13. Running: Linux 3.X|4.X
  14. OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
  15. OS details: Linux 3.2 - 4.9
  16. Network Distance: 1 hop
  17. Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
  18. OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  19. Nmap done: 1 IP address (1 host up) scanned in 12.34 seconds
复制代码

🔧 实用场景示例

场景 1:网络资产发现
  1. #!/bin/bash
  2. # 网络资产发现脚本
  3. NETWORK="192.168.1.0/24"
  4. OUTPUT_FILE="network_inventory_$(date +%Y%m%d_%H%M%S).txt"
  5. echo "=== 网络资产发现扫描 ==="
  6. echo "网络: $NETWORK"
  7. echo "开始时间: $(date)"
  8. echo "输出文件: $OUTPUT_FILE"
  9. echo ""
  10. # 1. 主机发现
  11. echo "1. 主机发现..."
  12. nmap -sn "$NETWORK" -oG "hosts_scan.gnmap"
  13. # 提取活动主机IP
  14. grep "Status: Up" hosts_scan.gnmap | cut -d' ' -f2 > active_hosts.txt
  15. HOST_COUNT=$(wc -l < active_hosts.txt)
  16. echo "发现 $HOST_COUNT 个活动主机"
  17. # 2. 端口扫描(快速)
  18. echo -e "\n2. 快速端口扫描..."
  19. nmap -F -iL active_hosts.txt -oG "ports_scan.gnmap"
  20. # 3. 详细扫描(对开放端口的主机)
  21. echo -e "\n3. 详细服务扫描..."
  22. while read -r host; do
  23. echo "扫描主机: $host"
  24. nmap -sV -O --script=banner "$host" >> "$OUTPUT_FILE"
  25. echo "---" >> "$OUTPUT_FILE"
  26. done < active_hosts.txt
  27. # 4. 生成报告
  28. echo -e "\n4. 生成摘要报告..."
  29. echo "=== 网络资产摘要 ===" > "summary_$(date +%Y%m%d).txt"
  30. echo "扫描时间: $(date)" >> "summary_$(date +%Y%m%d).txt"
  31. echo "网络范围: $NETWORK" >> "summary_$(date +%Y%m%d).txt"
  32. echo "活动主机数: $HOST_COUNT" >> "summary_$(date +%Y%m%d).txt"
  33. echo "" >> "summary_$(date +%Y%m%d).txt"
  34. # 按服务统计
  35. echo "开放端口统计:" >> "summary_$(date +%Y%m%d).txt"
  36. grep -E "^[0-9]+/tcp.*open" "$OUTPUT_FILE" | \
  37. awk '{print $3}' | sort | uniq -c | sort -rn >> "summary_$(date +%Y%m%d).txt"
  38. echo -e "\n扫描完成!"
  39. echo "详细报告: $OUTPUT_FILE"
  40. echo "摘要报告: summary_$(date +%Y%m%d).txt"
  41. # 清理临时文件
  42. rm -f hosts_scan.gnmap ports_scan.gnmap active_hosts.txt
复制代码
场景 2:安全审计扫描
  1. #!/bin/bash
  2. # 安全审计扫描脚本
  3. TARGET="$1"
  4. OUTPUT_DIR="security_audit_$(date +%Y%m%d_%H%M%S)"
  5. if [ -z "$TARGET" ]; then
  6. echo "用法: $0 <目标IP/范围>"
  7. exit 1
  8. fi
  9. mkdir -p "$OUTPUT_DIR"
  10. cd "$OUTPUT_DIR" || exit
  11. echo "=== 安全审计扫描 ==="
  12. echo "目标: $TARGET"
  13. echo "开始时间: $(date)"
  14. echo "输出目录: $OUTPUT_DIR"
  15. echo ""
  16. # 1. 全面扫描
  17. echo "1. 执行全面扫描..."
  18. nmap -A -T4 -p- "$TARGET" -oA "full_scan"
  19. # 2. 漏洞扫描
  20. echo -e "\n2. 执行漏洞扫描..."
  21. nmap --script=vuln "$TARGET" -oN "vuln_scan.txt"
  22. # 3. Web 应用扫描
  23. echo -e "\n3. 执行 Web 应用扫描..."
  24. nmap --script=http-* "$TARGET" -oN "web_scan.txt"
  25. # 4. 数据库扫描
  26. echo -e "\n4. 执行数据库扫描..."
  27. nmap --script=mysql-*,postgresql-* "$TARGET" -oN "db_scan.txt"
  28. # 5. SSH 安全扫描
  29. echo -e "\n5. 执行 SSH 安全扫描..."
  30. nmap --script=ssh-* "$TARGET" -oN "ssh_scan.txt"
  31. # 6. 防火墙检测
  32. echo -e "\n6. 执行防火墙检测..."
  33. nmap -sA "$TARGET" -oN "firewall_scan.txt"
  34. # 7. 生成报告
  35. echo -e "\n7. 生成综合报告..."
  36. cat > "security_report.md" << EOF
  37. # 安全审计报告
  38. ## 基本信息
  39. - 目标: $TARGET
  40. - 扫描时间: $(date)
  41. - 扫描工具: Nmap $(nmap --version | head -1)
  42. ## 扫描结果摘要
  43. ### 开放端口
  44. \`\`\`
  45. $(grep -E "^[0-9]+/tcp.*open" full_scan.nmap | head -20)
  46. \`\`\`
  47. ### 发现的服务
  48. \`\`\`
  49. $(grep -E "^\|_[0-9]+/tcp" full_scan.nmap | head -20)
  50. \`\`\`
  51. ### 操作系统信息
  52. \`\`\`
  53. $(grep -A5 "OS details" full_scan.nmap)
  54. \`\`\`
  55. ### 潜在漏洞
  56. \`\`\`
  57. $(grep -E "(VULNERABLE|CVE)" vuln_scan.txt | head -10)
  58. \`\`\`
  59. ## 建议
  60. 1. 关闭不必要的端口
  61. 2. 更新发现的服务到最新版本
  62. 3. 检查并修复发现的漏洞
  63. EOF
  64. echo -e "\n扫描完成!"
  65. echo "报告文件: $OUTPUT_DIR/security_report.md"
  66. echo "原始数据文件在: $OUTPUT_DIR/"
复制代码
场景 3:网络监控
  1. #!/bin/bash
  2. # 网络监控脚本
  3. TARGETS_FILE="monitor_targets.txt"
  4. LOG_DIR="monitor_logs"
  5. INTERVAL=300 # 5分钟
  6. mkdir -p "$LOG_DIR"
  7. echo "=== 网络监控开始 ==="
  8. echo "监控目标: $(cat "$TARGETS_FILE" | wc -l) 个主机"
  9. echo "检查间隔: $INTERVAL 秒"
  10. echo "日志目录: $LOG_DIR"
  11. echo "按 Ctrl+C 停止"
  12. echo ""
  13. while true; do
  14. TIMESTAMP=$(date +%Y%m%d_%H%M%S)
  15. LOG_FILE="$LOG_DIR/scan_$TIMESTAMP.txt"
  16. echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始扫描..."
  17. # 执行快速扫描
  18. nmap -T4 -F -iL "$TARGETS_FILE" -oN "$LOG_FILE" > /dev/null 2>&1
  19. # 检查变化
  20. if [ -f "$LOG_DIR/last_scan.txt" ]; then
  21. CHANGES=$(diff "$LOG_DIR/last_scan.txt" "$LOG_FILE" | grep -E "^[<>]" | head -5)
  22. if [ -n "$CHANGES" ]; then
  23. echo "检测到变化:"
  24. echo "$CHANGES"
  25. # 发送警报(示例:记录到文件)
  26. echo "[$(date '+%Y-%m-%d %H:%M:%S')] 网络变化检测" >> "$LOG_DIR/alerts.log"
  27. echo "$CHANGES" >> "$LOG_DIR/alerts.log"
  28. echo "---" >> "$LOG_DIR/alerts.log"
  29. fi
  30. fi
  31. # 保存本次扫描结果
  32. cp "$LOG_FILE" "$LOG_DIR/last_scan.txt"
  33. # 统计信息
  34. UP_HOSTS=$(grep -c "Status: Up" "$LOG_FILE")
  35. OPEN_PORTS=$(grep -c "open" "$LOG_FILE")
  36. echo "[$(date '+%Y-%m-%d %H:%M:%S')] 扫描完成 - 活动主机: $UP_HOSTS, 开放端口: $OPEN_PORTS"
  37. # 等待下一次扫描
  38. sleep "$INTERVAL"
  39. done
复制代码

⚙️ Nmap 脚本引擎(NSE)

Nmap 脚本引擎提供了强大的扩展功能:

常用脚本类别
  1. # 查看所有脚本类别
  2. ls /usr/share/nmap/scripts/ | xargs -I {} basename {} .nse | sort -u
  3. # 常用脚本示例
  4. nmap --script=auth 192.168.1.1 # 身份认证检查
  5. nmap --script=brute 192.168.1.1 # 暴力破解
  6. nmap --script=default 192.168.1.1 # 默认脚本
  7. nmap --script=vuln 192.168.1.1 # 漏洞检测
  8. nmap --script=safe 192.168.1.1 # 安全脚本
  9. nmap --script=intrusive 192.168.1.1 # 侵入式脚本
  10. nmap --script=discovery 192.168.1.1 # 发现脚本
  11. nmap --script=dos 192.168.1.1 # 拒绝服务检测
  12. nmap --script=exploit 192.168.1.1 # 漏洞利用
  13. nmap --script=external 192.168.1.1 # 外部脚本
复制代码
自定义脚本扫描
  1. # 扫描特定服务
  2. nmap --script=ftp-* 192.168.1.1
  3. nmap --script=http-* 192.168.1.1
  4. nmap --script=smb-* 192.168.1.1
  5. nmap --script=ssh-* 192.168.1.1
  6. nmap --script=ssl-* 192.168.1.1
  7. # 使用多个脚本
  8. nmap --script=http-title,http-headers,http-methods 192.168.1.1
  9. # 带参数的脚本
  10. nmap --script=http-brute --script-args userdb=users.txt,passdb=passwords.txt 192.168.1.1
复制代码

⚠️ 重要注意事项

  1. 法律合规:仅扫描你有权扫描的网络。
  2. 扫描速度:避免过快的扫描(使用 -T 选项控制)。
  3. 隐蔽性:某些扫描类型可能被入侵检测系统发现。
  4. 资源消耗:全面扫描可能消耗大量网络和系统资源。
  5. 准确性:防火墙、IDS 可能影响扫描结果准确性。
  6. 版本更新:定期更新 nmap 和脚本数据库。

🔄 相关工具

工具用途说明
masscan高速端口扫描比 nmap 更快,但功能较少
zmap互联网范围扫描专为快速互联网扫描设计
netdiscoverARP 发现工具局域网主机发现
hping3数据包构造工具高级网络测试
nc (netcat)网络瑞士军刀端口测试和连接
tcpdump网络抓包工具流量分析

🎯 最佳实践

  1. 分阶段扫描:先主机发现,再端口扫描,最后服务检测。
  2. 保存结果:使用 -oA 保存所有格式的结果。
  3. 使用脚本:合理使用 NSE 脚本增强扫描能力。
  4. 定时扫描:定期扫描监控网络变化。
  5. 结果分析:结合其他工具分析 nmap 结果。

nmap 是网络管理员、安全专家和渗透测试人员的必备工具。掌握其用法可以帮助你更好地了解网络状况、发现安全漏洞和监控网络变化。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行