Linux nmap 指令

Linux nmap 指令

nmap(Network Mapper)是 Linux 系统中一款功能强大且广受欢迎的网络扫描工具,用于发现网络中的主机、服务、操作系统和漏洞。它由 Gordon Lyon(Fyodor)于 1997 年开发,现为网络安全工程师、系统管理员和渗透测试人员的必备工具。nmap 支持多种扫描技术(如 TCP、UDP、SYN 扫描),提供灵活的输出格式(如 XML、JSON),并通过脚本引擎(NSE)扩展功能,适用于网络拓扑分析、安全审计和漏洞检测。


📚 什么是 nmap 指令?

概述

nmap 是一款开源的网络探测和安全审计工具,通过发送精心构造的网络数据包,分析目标主机或网络的响应,获取主机状态、开放端口、服务版本、操作系统信息等。它支持多种协议(TCP、UDP、ICMP 等)和扫描模式,适用于从简单的主机发现到复杂的漏洞扫描。nmap 的设计注重性能、灵活性和扩展性,内置 NSE(Nmap Scripting Engine)支持 Lua 脚本执行高级任务,如漏洞检测和身份验证。nmap 运行于 Linux、Windows、macOS 等平台,在 Linux 发行版(如 Ubuntu、Kali、CentOS)中尤为流行。

核心概念

  • 主机发现:检测网络中存活的主机(通过 Ping、ARP 或 TCP/UDP 数据包)。
  • 端口扫描:检查目标主机的开放端口(如 80、443)。
  • 服务探测:识别端口上运行的服务(如 Apache、SSH)及其版本。
  • 操作系统指纹识别:根据 TCP/IP 栈特征推测目标操作系统。
  • NSE 脚本:使用 Lua 脚本执行高级任务,如漏洞扫描或服务枚举。
  • 输出格式
    • 普通文本:适合人类阅读。
    • XML/JSON:适合脚本解析。
    • Grepable:便于管道处理。
  • 扫描类型
    • SYN 扫描(-sS):半开放扫描,快速隐蔽。
    • TCP 连接扫描(-sT):完整三次握手,较可靠。
    • UDP 扫描(-sU):检测 UDP 服务。
    • Ping 扫描(-sn):仅主机发现。

核心特点

  • 高效性:多线程和优化算法支持快速扫描。
  • 灵活性:支持多种扫描技术和目标指定方式。
  • 扩展性:NSE 脚本提供无限扩展可能。
  • 隐蔽性:支持伪装源地址、碎片包等规避检测。
  • 跨平台:运行于主流操作系统。
  • 社区支持:活跃社区提供脚本和更新。

基本语法

nmap [选项] [目标]
参数说明
  • 目标:主机 IP、域名或网段(如 192.168.1.1、scanme.nmap.org、192.168.1.0/24)。
  • 选项
    • -sS:SYN 扫描(默认 root 权限)。
    • -sT:TCP 连接扫描。
    • -sU:UDP 扫描。
    • -sn:Ping 扫描,仅主机发现。
    • -p PORTS:指定端口(如 -p 80,443)。
    • -A:全面扫描(OS 检测、服务探测、NSE 脚本)。
    • -oX FILE:XML 输出。
    • -oN FILE:普通文本输出。
    • –script SCRIPT:运行 NSE 脚本。
    • -v:详细输出。
    • –help:显示帮助信息。
输出行为
  • 默认:扫描目标的常见端口,输出主机状态、开放端口和服务信息。
  • 格式化:根据选项输出到终端或文件。
  • 错误:若目标不可达或权限不足,报错并退出。

注意事项

  • 法律合规

    • 未经授权扫描他人网络可能违法,仅扫描有权限的目标。
  • 权限要求

    • 高级扫描(如 SYN、OS 检测)需 root 权限:

      sudo nmap -sS 192.168.1.1
      
  • 防火墙规避

    • 目标防火墙可能屏蔽扫描,需调整选项(如 -Pn)。
  • 性能影响

    • 扫描可能增加网络负载,慎用 --max-rate。
  • NSE 脚本风险

    • 某些脚本可能触发目标报警或崩溃。

🔧 nmap 的常见用途

应用场景

  • 网络管理:发现网络中的主机和设备。
  • 安全审计:检查开放端口和服务漏洞。
  • 渗透测试:枚举服务版本和操作系统信息。
  • 故障排查:验证端口连通性或服务状态。
  • 漏洞扫描:结合 NSE 脚本检测已知漏洞。

🛠️ 基础用法与示例

准备工作

以下示例假设运行在 Bash shell(如 Ubuntu 22.04 或 Kali Linux,当前时间为 2025-06-06 14:57 CST)。我们将使用 nmap 扫描本地网络或公开测试目标(如 scanme.nmap.org),确保遵守法律,仅扫描授权目标。示例环境为本地网络 192.168.1.0/24,包含一台主机 192.168.1.100(运行 SSH 和 HTTP)。为确保高级功能,命令以 sudo 运行。

安装 nmap

在 Ubuntu 上:

sudo apt-get update
sudo apt-get install nmap

在 Kali Linux 上(默认预装):

nmap --version

在 CentOS 上:

sudo dnf install nmap
测试目标
  • 本地主机:192.168.1.100。
  • 公开目标:scanme.nmap.org(Nmap 官方测试服务器,需谨慎使用)。

示例 1:基本扫描

命令
nmap 192.168.1.100
解释
  • 默认扫描目标的 1000 个常见端口。
  • 非 root 用户使用 TCP 连接扫描。
输出示例
Starting Nmap 7.94 ( https://nmap.org ) at 2025-06-06 14:57 CST
Nmap scan report for 192.168.1.100
Host is up (0.002s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
说明
  • 显示开放端口(22、80)及其服务。

示例 2:SYN 扫描

命令
sudo nmap -sS 192.168.1.100
解释
  • -sS:半开放 SYN 扫描,需 root 权限。
  • 速度快,隐蔽性强。
输出示例
Starting Nmap 7.94 ( https://nmap.org ) at 2025-06-06 14:58 CST
Nmap scan report for 192.168.1.100
Host is up (0.001s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

示例 3:主机发现

命令
nmap -sn 192.168.1.0/24
解释
  • -sn:仅执行主机发现,不扫描端口。
  • 扫描网段内的存活主机。
输出示例
Starting Nmap 7.94 ( https://nmap.org ) at 2025-06-06 14:59 CST
Nmap scan report for 192.168.1.1
Host is up (0.001s latency).
Nmap scan report for 192.168.1.100
Host is up (0.002s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 2.10 seconds

示例 4:指定端口扫描

命令
nmap -p 22,80,443 scanme.nmap.org
解释
  • -p:扫描指定端口(22、80、443)。
  • 目标为公开测试服务器。
输出示例
Starting Nmap 7.94 ( https://nmap.org ) at 2025-06-06 15:00 CST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.080s latency).
PORT    STATE  SERVICE
22/tcp  open   ssh
80/tcp  open   http
443/tcp closed https
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

示例 5:服务版本探测

命令
sudo nmap -sV 192.168.1.100
解释
  • -sV:检测开放端口的服务版本。
  • 需 root 权限以优化扫描。
输出示例
Starting Nmap 7.94 ( https://nmap.org ) at 2025-06-06 15:01 CST
Nmap scan report for 192.168.1.100
Host is up (0.002s latency).
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu
80/tcp open  http    Apache httpd 2.4.52
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

示例 6:操作系统检测

命令
sudo nmap -O 192.168.1.100
解释
  • -O:基于 TCP/IP 栈指纹识别操作系统。
  • 需 root 权限。
输出示例
Starting Nmap 7.94 ( https://nmap.org ) at 2025-06-06 15:02 CST
Nmap scan report for 192.168.1.100
Host is up (0.002s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Ubuntu 22.04 LTS
Nmap done: 1 IP address (1 host up) scanned in 0.20 seconds

🚀 常用选项与功能

以下是 nmap 的常用选项,分类为扫描控制、探测功能和输出管理。

🔍 扫描控制

选项描述
-sSSYN 扫描(快速、隐蔽)
-sTTCP 连接扫描(可靠)
-sUUDP 扫描
-snPing 扫描(主机发现)
-Pn跳过主机发现(假设目标存活)
-p PORTS指定端口范围(如 -p 1-1000)
示例
sudo nmap -sU -p 53,123 192.168.1.100

📜 探测功能

选项描述
-sV服务版本探测
-O操作系统检测
-A全面扫描(OS、服务、NSE 脚本)
–script SCRIPT运行 NSE 脚本
–version-intensity N服务探测强度(0-9)
示例
sudo nmap -A scanme.nmap.org

📁 输出管理

选项描述
-oN FILE普通文本输出
-oX FILEXML 输出
-oG FILEGrepable 输出
-v详细输出
–open仅显示开放端口
示例
nmap -oX scan.xml 192.168.1.100

🌟 高级用法

概述

nmap 的高级用法涉及 NSE 脚本、防火墙规避、性能优化和自动化,适合安全审计和渗透测试。

🛡️ 1. 使用 NSE 脚本

命令
sudo nmap --script http-enum 192.168.1.100
解释
  • –script:运行 http-enum 脚本,枚举 Web 目录。
  • 脚本位于 /usr/share/nmap/scripts/。
输出示例
PORT   STATE SERVICE
80/tcp open  http
| http-enum:
|_  /admin/: Possible admin folder

🔍 2. 漏洞扫描

命令
sudo nmap --script vuln scanme.nmap.org
解释
  • –script vuln:运行所有漏洞检测脚本。
  • 检查已知漏洞。
输出示例
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
| http-vuln-cve2017-5638:
|_  Vulnerable to Apache Struts CVE-2017-5638

🔄 3. 防火墙规避

命令
sudo nmap -f --mtu 16 -sS 192.168.1.100
解释
  • -f:分片数据包。
  • –mtu 16:设置小 MTU,规避防火墙检测。
输出示例
  • 同 SYN 扫描,但更隐蔽。

⚡ 4. 性能优化

命令
sudo nmap --max-rate 1000 --min-parallelism 100 192.168.1.0/24
解释
  • –max-rate:每秒发送 1000 个包。
  • –min-parallelism:最低并行探针数。
输出示例
  • 加速网段扫描。

🔐 5. 自定义脚本

脚本(my-script.nse)
description = [[Simple custom script to check HTTP title]]
portrule = portnumber(80)
action = function(host, port)
  local http = require "http"
  local response = http.get(host.ip, port.number, "/")
  return response.header["title"] or "No title"
end
命令
sudo nmap --script ./my-script.nse 192.168.1.100
解释
  • 创建自定义 NSE 脚本,提取 HTTP 标题。
  • 保存到本地并运行。
输出示例
PORT   STATE SERVICE
80/tcp open  http
|_my-script: Welcome to Apache

⚠️ 使用 nmap 时的注意事项

  1. 法律合规

    • 仅扫描有权限的目标,避免违法:

      nmap scanme.nmap.org
      
  2. 权限要求

    • SYN 扫描、OS 检测需 root:

      sudo nmap -sS -O 192.168.1.100
      
  3. 防火墙影响

    • 使用 -Pn 跳过 Ping 检测:

      nmap -Pn 192.168.1.100
      
  4. 性能控制

    • 避免过高速率导致网络拥堵:

      nmap --max-rate 500 192.168.1.0/24
      
  5. 脚本安全性

    • 谨慎使用侵入性脚本(如 smb-brute)。

🛠️ 高级技巧与实战案例

概述

以下是高级技巧和实战案例,展示 nmap 在复杂场景中的应用。

🖥️ 案例 1:网络拓扑扫描

脚本
#!/bin/bash
NETWORK="192.168.1.0/24"
sudo nmap -sn "$NETWORK" -oX topology.xml
xsltproc topology.xml -o topology.html
echo "Topology saved to topology.html"
解释
  • 扫描网段,生成 XML 输出。
  • 转换为 HTML 可视化拓扑。
输出示例
Topology saved to topology.html

📦 案例 2:服务枚举

脚本
#!/bin/bash
TARGET="192.168.1.100"
sudo nmap -sV --script banner,http-title -p 22,80 "$TARGET" > services.txt
cat services.txt
解释
  • 枚举 SSH 和 HTTP 服务信息。
  • 保存结果到文件。
输出示例
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1
| banner: SSH-2.0-OpenSSH_8.9p1 Ubuntu
80/tcp open  http    Apache httpd 2.4.52
|_http-title: Welcome to Apache

🔒 案例 3:漏洞检测

脚本
#!/bin/bash
TARGET="scanme.nmap.org"
sudo nmap --script vuln -p 80 "$TARGET" -oN vuln_report.txt
cat vuln_report.txt
解释
  • 扫描 HTTP 漏洞,保存报告。
输出示例
PORT   STATE SERVICE
80/tcp open  http
| http-vuln-cve2017-5638: Not vulnerable

📈 案例 4:性能监控

脚本
#!/bin/bash
LOG=/tmp/nmap_bench.log
echo "Benchmark: $(date)" > "$LOG"
time sudo nmap -sS 192.168.1.0/24 >> "$LOG" 2>&1
cat "$LOG"
解释
  • 测试网段扫描性能。
输出示例
Benchmark: Fri Jun  6 14:57:00 CST 2025
real    0m2.150s
user    0m0.120s
sys     0m0.080s

🔧 案例 5:自动化扫描

脚本
#!/bin/bash
TARGETS=/tmp/targets.txt
echo "192.168.1.100" > "$TARGETS"
echo "scanme.nmap.org" >> "$TARGETS"
sudo nmap -iL "$TARGETS" -oX scan.xml
加入 cron
crontab -e
0 3 * * 1 /path/to/auto_scan.sh
解释
  • 每周一凌晨 3 点扫描目标列表。
  • 输出 XML 报告。
输出示例
  • scan.xml 包含扫描结果。

📝 总结

nmap 是 Linux 系统中功能最强大的网络扫描工具,适用于主机发现、端口扫描、服务探测和漏洞检测。本文从基础到高级,结合详细示例和注意事项,全面介绍了 nmap 的功能。无论是网络管理、安全审计还是渗透测试,nmap 都能显著提升效率。

更多技术分享,关注公众号:halugin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值