You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中按文本块关联Nmap扫描的IP、MAC与OS信息

Nmap扫描结果提取:关联IP、MAC与OS信息的Bash脚本方案

刚接触Bash脚本就能想到用grep提取信息已经很棒啦!你遇到的核心问题是原脚本只能逐行提取IP和MAC,没法处理Nmap按主机块输出的结构,更没法应对OS信息的各种缺失/猜测场景。咱们来写一个能完美适配你需求的脚本,处理所有你给出的测试情况。

需求明确

你需要从nmap -O --osscan-guess 192.168.0.0/24 -oN testscan.txt的输出中,提取每台主机的:

  • IP地址
  • MAC地址
  • 操作系统信息(优先取OS details:,没有则取Aggressive OS guesses:,都没有则显示Not found)
    最终输出格式要求:
IP - MAC - OS信息

解决方案脚本

这个脚本会按主机扫描块来处理内容,跟踪每台主机的IP、MAC、OS信息,遇到下一个主机报告时输出上一个的结果,最后处理完所有行后输出最后一台主机的信息:

#!/bin/bash

# 初始化变量
current_ip=""
current_mac=""
current_os="Not found"

# 处理输入文件
while IFS= read -r line; do
    # 检测新的主机扫描报告
    if [[ "$line" =~ ^Nmap\ scan\ report\ for\ ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$ ]]; then
        # 如果不是第一个主机,先输出上一个主机的结果
        if [[ -n "$current_ip" ]]; then
            echo "$current_ip - $current_mac - $current_os" >> results.txt
        fi
        # 重置当前主机的变量,提取新IP
        current_ip="${BASH_REMATCH[1]}"
        current_mac=""
        current_os="Not found"
    fi

    # 提取MAC地址
    if [[ "$line" =~ ^MAC\ Address:\ ([A-F0-9:]+) ]]; then
        current_mac="${BASH_REMATCH[1]}"
    fi

    # 提取精确OS信息(优先)
    if [[ "$line" =~ ^OS\ details:\ (.*)$ ]]; then
        current_os="${BASH_REMATCH[1]}"
    fi

    # 提取激进猜测的OS信息(当没有精确结果时)
    if [[ "$line" =~ ^Aggressive\ OS\ guesses:\ (.*)$ ]]; then
        current_os="${BASH_REMATCH[1]}"
    fi

    # 处理"Too many fingerprints"的情况(保持OS为Not found)
    if [[ "$line" =~ ^Too\ many\ fingerprints\ match\ this\ host ]]; then
        current_os="Not found"
    fi
done < testscan.txt

# 输出最后一个主机的结果
if [[ -n "$current_ip" ]]; then
    echo "$current_ip - $current_mac - $current_os" >> results.txt
fi

脚本说明

  • 主机块检测:通过匹配Nmap scan report for开头的行,识别新主机的开始,此时先输出上一个主机的结果,再重置变量。
  • MAC提取:匹配MAC Address:开头的行,用正则捕获MAC地址。
  • OS处理优先级:
    1. 优先提取OS details:的精确结果
    2. 如果没有精确结果,提取Aggressive OS guesses:的猜测结果
    3. 遇到Too many fingerprints...或者没有任何OS相关行时,保持Not found
  • 最后处理:循环结束后,手动输出最后一个主机的结果(因为循环里只有遇到新主机才会输出上一个)

测试验证

用你提供的测试扫描内容运行这个脚本,会生成符合要求的results.txt:

192.168.0.1 - MA:CA:DR:ES:S0:03 - Linux 2.6.32 - 3.13
192.168.0.102 - MA:CA:DR:ES:S0:02 - Not found
192.168.0.104 - MA:CA:DR:ES:S0:01 - Microsoft Windows Server 2008 SP1 or Windows Server 2008 R2

内容的提问来源于stack exchange,提问作者SpookyLoops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:17:50