处理nessus xml文件时出现更多问题。
我有一些来自nessus的xml数据,用于存储可以使用此xsl标记提取的xml标记中的主机名等信息:
<xsl:value-of select="../ReportItem[(@pluginID=12053)]/description"/>
然后唯一的问题是这个标签除了主机名之外还在其中存储了一堆垃圾。例如,标签通常包含此信息:
概要:可以获取遥控器的网络名称 主办。说明:远程主机侦听UDP端口137或TCP 端口445并回复NetBIOS nbtscan或SMB请求。注意 这个插件收集要在其他插件中使用的信息,但确实如此 本身并不会生成报告。解决方案:无风险因素:无插件 输出:已收集以下6个NetBIOS名称:VOODOO1 = 计算机名称VOODOO =工作组/域名VOODOO1 =文件服务器 服务VOODOO =浏览器服务选举VOODOO =主浏览器 MSBROWSE =主浏览器远程主机的适配器上有以下MAC地址:10:50:56:ab:10:02
我唯一感兴趣的部分是“VOODOO1 =计算机名称”部分。实际上在“=”符号之前更准确。我想知道是否可以在标签的'select'中使用正则表达式函数,例如:
<xsl:value-of select="regexp(../ReportItem[(@pluginID=12053)]/description,'\w =')"/>
这将只提取与正则表达式匹配的标记内容并显示它。现在我有标签显示的全部内容很烦人。我试图使用
的各种变体<xsl:analyze-string select="$elValue" regex="\w = ">
标签没有运气。我不断收到错误,说'不能成为<td>
的子标签或我尝试过的任何其他xslt元素,即for-each等。
提前致谢。
根据目前为止的反馈,这里有一些由nessus生成的xml
<ReportItem port="137" svc_name="netbios-ns?" protocol="udp" severity="1" pluginID="10150" pluginName="Windows NetBIOS / SMB Remote Host Information Disclosure" pluginFamily="Windows">
<description>Synopsis :
It is possible to obtain the network name of the remote host.
Description :
The remote host listens on UDP port 137 or TCP port 445 and replies to NetBIOS nbtscan or SMB requests.
Note that this plugin gathers information to be used in other plugins but does not itself generate a report.
Solution :
n/a
Risk factor :
None
Plugin output :
The following 6 NetBIOS names have been gathered :
VOODOO1 = Computer name VOODOO = Workgroup / Domain name VOODOO1 = File Server Service VOODOO = Browser Service Elections VOODOO = Master Browser
__MSBROWSE__ = Master Browser
The remote host has the following MAC address on its adapter :
01:a0:52:bf:0a:02
</description>
</ReportItem>`
<xsl:value-of select="regexp(../ReportItem[(@pluginID=12053)]/description,'\w =')"/>
此行无效。我做了,看看是否有人知道是否有类似的东西。它只会产生错误,因为我做了。
答案 0 :(得分:1)
你需要XSLT 2.0。我怀疑你用xsl:analyze-string得到的错误消息是因为你使用的是XSLT 1.0处理器。
答案 1 :(得分:0)
正如Mike Kay所说,这不适用于XSLT 1.0。获取Saxon的.NET版本,以便您可以使用更现代的XSLT版本。您可以从命令行或Powershell中调用它。这是一个让您入门的示例:
#!/bin/bash
# Assumes the script is located in the data directory
for filename in ./*.txt; do
name=$(basename $filename .txt)
echo "$filename -> $name"
sed -i "3s/location/$name/" $filename
done