当前位置:首页 > 技术 > 正文内容

Smap输出格式深度剖析:XML、JSON与Grepable实战指南

访客 技术 2026年9月7日 6

Smap依托Shodan数据引擎,为安全研究人员提供了Nmap的现代化替代方案。本文深入探讨其三种核心输出格式的技术特性、应用场景及最佳实践,助力高效处理网络扫描数据。

XML格式:企业级报告首选

XML输出位于internal/output/xml.go,完整保留扫描会话的元数据与结果细节,与Nmap生态工具链无缝兼容。

核心优势

  • 遵循标准化Nmap XML Schema,支持XSLT样式转换生成可视化报告
  • 完整记录扫描参数、时间戳、主机存活状态及操作系统指纹
  • 集成CPE(通用平台枚举)标识,便于漏洞关联分析

执行指令

smap -oX enterprise_scan.xml 192.168.1.0/24

关键节点说明

元素功能描述
<nmaprun>根元素,承载扫描器版本、启动参数及执行时间
<hosthint>目标主机提示信息,优化大规模扫描性能
<portused>用于OS检测的端口状态样本
<osclass>操作系统分类置信度与CPE绑定

JSON格式:自动化流水线基石

JSON模块实现于internal/output/json.go,采用流式序列化设计,可高效处理大规模扫描结果集。

技术特性

  • 原生支持jqgron等命令行JSON处理器
  • 数组结构优化,便于导入Elasticsearch、MongoDB等文档数据库
  • 支持Pretty Print与紧凑模式切换

执行指令

smap -oJ api_data.json --min-rate 1000 10.0.0.0/8

数据模型示例

{
  "scan_info": {
    "tool": "smap",
    "version": "0.1.12",
    "started": "2024-01-15T09:23:17Z"
  },
  "targets": [
    {
      "addr": "203.0.113.45",
      "status": "up",
      "services": [
        {
          "port": 443,
          "proto": "tcp",
          "state": "open",
          "banner": "nginx/1.24.0",
          "tls": true,
          "cert_subject": "CN=*.example.org"
        }
      ],
      "vulns": ["CVE-2023-44487"]
    }
  ]
}

Grepable格式:终端效率利器

Grepable输出由internal/output/grep.go实现,采用紧凑的键值对格式,专为Shell文本处理工具链设计。

设计哲学

  • 单主机单行的扁平化结构,规避多行记录解析复杂度
  • 字段定界符统一为/,与awk -F'/'模式高度契合
  • 省略XML/JSON的层级嵌套,降低正则提取难度

执行指令

smap -oG live_hosts.gnmap -sn 172.16.0.0/16

字段解析规范

Host: 198.51.100.7 (edge-router.lab.local)	Status: Up
Host: 198.51.100.7 ()	Ports: 22/open/tcp//ssh/OpenSSH_9.2/; 161/filtered/udp//snmp///	Ignored State: closed (998)

典型处理模式

# 提取存活主机IP
awk '/Status: Up/{print $2}' scan.gnmap | cut -d: -f2

# 筛选特定服务端口
grep '/http/' scan.gnmap | grep -oP 'Host: \K[^ ]+'

多格式并行输出策略

Smap支持单次扫描多目标格式输出,满足异构下游系统的数据消费需求:

smap -oX audit/$(date +%Y%m%d)_full.xml \
     -oJ siem/import_$(date +%s).json \
     -oG - 10.0.0.0/22 | tee >(grep 'open/tcp' > quick_check.txt)

格式选型决策矩阵

下游系统推荐格式关键考量
DefectDojo、DradisXML原生支持Nmap XML导入
Splunk、ELK StackJSON无需自定义解析规则
Ansible InventoryGrepable快速生成动态主机清单
CI/CD流水线JSON结构化退出码与结果断言
手工分析报告XML+HTML转换浏览器可读性与打印友好

高级过滤与转换技巧

JSON流式处理

smap -oJ - target | jq -c '.targets[] | select(.services | length > 0) | {ip: .addr, ports: [.services[].port]}'

XML转CSV快速转换

xmllint --xpath '//host/address/@addr|//port/@portid|//service/@name' scan.xml | \
  paste - - - | tr '="' ',' | sed 's/addr,//;s/portid,//;s/name,//'

Grepable状态码批量统计

cut -d: -f3 scan.gnmap | sort | uniq -c | sort -rn

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。