2012-08-08 35 views
0

更多處理nessus xml文件的問題。xslt正則表達式

我從Nessus的存儲信息,如可使用此XSL標籤被提取的XML標籤主機名等一些XML數據:

<xsl:value-of select="../ReportItem[(@pluginID=12053)]/description"/> 

那麼唯一的問題是一堆這種標籤將其存儲垃圾除了主機名之外。例如,標籤通常包含以下信息:

劇情簡介:可以獲取遠程 主機的網絡名稱。說明:遠程主機偵聽UDP端口137或TCP 端口445,並回復NetBIOS nbtscan或SMB請求。請注意, 此插件收集要在其他插件中使用的信息,但 本身不生成報告。解決方法:N/A風險因素:無插件 輸出:以下6個NetBIOS名稱已聚集:VOODOO1 = 計算機名VOODOO =工作組/域名VOODOO1 =文件服務器 服務VOODOO = Browser服務選舉VOODOO =主瀏覽器 MSBROWSE =主瀏覽器的遠程主機都有適配器以下MAC地址:10:50:56:AB:10:02

我唯一感興趣的部分是部分「VOODOO1 =計算機名稱」。事實上,'='號之前的內容更精確。我想知道是否有可能有「選擇」的標籤,像內的正則表達式功能:

<xsl:value-of select="regexp(../ReportItem[(@pluginID=12053)]/description,'\w =')"/> 

這將提取標籤的正則表達式匹配的唯一內容,並顯示它。現在我擁有令人討厭的標籤顯示的全部內容。我試圖使用各種變化的

<xsl:analyze-string select="$elValue" regex="\w = "> 

標籤沒有運氣。我不斷收到錯誤說'不能<td>或我已經嘗試過的任何其他xslt元素的子標籤,即爲每個等

在此先感謝。

意見的基礎上,到目前爲止,這裏是一些XML的多數民衆贊成由Nessus的

<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

XSLT 1.0或2.0?如果1.0,什麼引擎? – 2012-08-09 00:11:37

+0

您是說價值指令發出「VOODOO1 =計算機名稱VOODOO =工作組/域名...」還是您發佈的指令的價值根本不起作用?如果您添加輸入XML的具體示例,您當前正在獲取什麼(如果有的話)以及您想要什麼,這將會很有幫助。 – Kent 2012-08-09 02:12:35

+0

當然這裏是xml的一個例子。這是由nessus產生的。 – user1339156 2012-08-09 11:19:51

回答

1

爲此需要XSLT 2.0。我懷疑你使用xsl:analyze-string得到的錯誤消息是因爲你使用的是XSLT 1.0處理器。

+0

我使用windows powershell來使用.net xml對象。該錯誤消息似乎表明它識別xsl命令,但不希望它作爲我放在其中的任何東西的子標籤。我看到它的用法的其他例子表明它可以是我使用的標籤的子標籤。你知道是否有可能在select xpath結果上執行正則表達式嗎? – user1339156 2012-08-09 11:40:15

+0

Microsoft處理器僅實現1.0。如果您想要推進更新的XML技術,您需要開始考慮第三方解決方案,其中有一個不錯的選擇。 – 2012-08-10 19:44:36

0

正如Mike Kay指出的那樣,這不適用於XSLT 1.0。獲取NET版本Saxon,以便您可以使用更新版本的XSLT。您可以從命令行或Powershell調用它。以下是一個示例,以幫助您入門:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 
    <xsl:template match="description"> 
     <xsl:analyze-string select="." 
      regex="(\w+)\s+=\s*Computer name"> 
      <xsl:matching-substring> 
       <xsl:value-of select="regex-group(1)" /> 
      </xsl:matching-substring> 
      <xsl:non-matching-substring> 
      </xsl:non-matching-substring> 
     </xsl:analyze-string> 
    </xsl:template> 
</xsl:stylesheet>