如何在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处理优先级:
- 优先提取
OS details:的精确结果 - 如果没有精确结果,提取
Aggressive OS guesses:的猜测结果 - 遇到
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
相关产品推荐
相关产品推荐

