nmap扫描结果保存 xml to html for windows
首先 Nmap扫描443端口并保存为xml报告输出
nmap -T5 -Pn -p 443 -iL C:\Users\loki\Desktop\443_Scan.txt -oX C:\Users\loki\Desktop\443_shahebao.xml
然后 为了在windows上顺利的使用 xsltproc 相关库文件下载地址:https://zlatkovic.com/pub/libxml/
xsltproc主程序:libxslt-1.1.26.win32.zip;其中包含我们所需要的xsltproc可执行文件:xsltproc.exe
运行xsltproc所需要的一些库
C语言实现的XML解析器:libxml2-2.7.8.win32.zip;其支持N多规范或协议,比如XML,XML-NS,XPath,XPointer,XInclude,UTF-8/UTF-16,XML Catalog,Canonical XML,Relax NG等。
字符编码转换:iconv-1.9.2.win32.zip;比如从UTF-8转换为GB18030,就可以用iconv。
压缩工具:zlib-1.2.5.win32.zip;
全部下载好以后,整合解压到一个目录下:

C:\Users\loki>tree /F C:\Users\loki\Desktop\All\comb 卷 OS 的文件夹 PATH 列表 卷序列号为 DA80-61BA C:\USERS\LOKI\DESKTOP\ALL\COMB │ readme.txt │ ├─bin │ iconv.dll │ iconv.exe │ libexslt.dll │ libxml2.dll │ libxslt.dll │ minigzip.exe │ mode.xsl │ xmlcatalog.exe │ xmllint.exe │ xsltproc.exe │ zlib1.dll │ ├─include │ │ iconv.h │ │ zconf.h │ │ zlib.h │ │ │ ├─libexslt │ │ exslt.h │ │ exsltconfig.h │ │ exsltexports.h │ │ libexslt.h │ │ │ ├─libxml │ │ c14n.h │ │ catalog.h │ │ chvalid.h │ │ debugXML.h │ │ dict.h │ │ DOCBparser.h │ │ encoding.h │ │ entities.h │ │ globals.h │ │ hash.h │ │ HTMLparser.h │ │ HTMLtree.h │ │ list.h │ │ nanoftp.h │ │ nanohttp.h │ │ parser.h │ │ parserInternals.h │ │ pattern.h │ │ relaxng.h │ │ SAX.h │ │ SAX2.h │ │ schemasInternals.h │ │ schematron.h │ │ threads.h │ │ tree.h │ │ uri.h │ │ valid.h │ │ xinclude.h │ │ xlink.h │ │ xmlautomata.h │ │ xmlerror.h │ │ xmlexports.h │ │ xmlIO.h │ │ xmlmemory.h │ │ xmlmodule.h │ │ xmlreader.h │ │ xmlregexp.h │ │ xmlsave.h │ │ xmlschemas.h │ │ xmlschemastypes.h │ │ xmlstring.h │ │ xmlunicode.h │ │ xmlversion.h │ │ xmlwriter.h │ │ xpath.h │ │ xpathInternals.h │ │ xpointer.h │ │ │ └─libxslt │ attributes.h │ documents.h │ extensions.h │ extra.h │ functions.h │ imports.h │ keys.h │ libxslt.h │ namespaces.h │ numbersInternals.h │ pattern.h │ preproc.h │ security.h │ templates.h │ transform.h │ trio.h │ triodef.h │ variables.h │ win32config.h │ xslt.h │ xsltconfig.h │ xsltexports.h │ xsltInternals.h │ xsltlocale.h │ xsltutils.h │ xsltwin32config.h │ └─lib iconv.lib iconv_a.lib libexslt.lib libexslt_a.lib libxml2.lib libxml2_a.lib libxml2_a_dll.lib libxslt.lib libxslt_a.lib zdll.lib zlib.lib
xsltproc 命令用法
xsltproc <New名字.html> -o <模板..xsl> <nmap生成的.xml>
举例:
xsltproc.exe -o C:\Users\XXX\Desktop\New_lianhua.html .\mode.xsl C:\Users\XXX\Desktop\443_lianhua.xml
# xsl 模板内容,使用的事LyShark大神定义的模板,内容如下:保存为mode.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="utf-8" indent="yes" doctype-system="about:legacy-compat"/> <xsl:template match="/"> <html lang="en"> <head> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" /> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap.min.css"/> <script src="https://code.jquery.com/jquery-3.3.1.js"></script> <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script> <style> .target:before { content: ""; display: block; height: 50px; margin: -20px 0 0; } @media only screen and (min-width:1900px) { .container { width: 1800px; } } .footer { margin-top:60px; padding-top:60px; width: 100%; height: 180px; background-color: #f5f5f5; } .navbar-right { float: right!important; margin-right: -15px; } </style> <title>Nmap Scanner 扫描报告</title> </head> <body> <!--导航栏--> <nav class="navbar navbar-default navbar-fixed-top"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="#"><span class="glyphicon glyphicon-home"></span></a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="#summary">概要信息</a></li> <li><a href="#scannedhosts">主机信息</a></li> <li><a href="#onlinehosts">在线主机</a></li> <li><a href="#openservices">服务信息</a></li> </ul> </div> </div> </nav> <!--内容区--> <div class="container"> <h2 id="summary" class="target">扫描概要</h2> <div class="target"> <p >Nmap 版本:<xsl:value-of select="/nmaprun/@version"/></p> <p >Nmap命令:<xsl:value-of select="/nmaprun/@args"/></p> <p >开始时间:<xsl:value-of select="/nmaprun/@startstr"/> </p> <p >结束时间:<xsl:value-of select="/nmaprun/runstats/finished/@timestr"/></p> </div> <h2 id="scannedhosts" class="target">主机信息<xsl:if test="/nmaprun/runstats/hosts/@down > 1024"><small> (offline hosts are hidden)</small></xsl:if></h2> <div class="table-responsive"> <table id="table-overview" class="table table-striped dataTable" role="grid"> <thead> <tr> <th>状态</th> <th>IP</th> <th>主机名</th> <th>开放TCP端口数</th> <th>开放UDP端口数</th> </tr> </thead> <tbody> <xsl:choose> <xsl:when test="/nmaprun/runstats/hosts/@down > 1024"> <xsl:for-each select="/nmaprun/host[status/@state='up']"> <tr> <td><span class="label label-danger"><xsl:if test="status/@state='up'"><xsl:attribute name="class">label label-success</xsl:attribute></xsl:if><xsl:value-of select="status/@state"/></span></td> <td><xsl:value-of select="address/@addr"/></td> <td><xsl:value-of select="hostnames/hostname/@name"/></td> <td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='tcp'])"/></td> <td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='udp'])"/></td> </tr> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:for-each select="/nmaprun/host"> <tr> <td><span class="label label-danger"><xsl:if test="status/@state='up'"><xsl:attribute name="class">label label-success</xsl:attribute></xsl:if><xsl:value-of select="status/@state"/></span></td> <td><xsl:value-of select="address/@addr"/></td> <td><xsl:value-of select="hostnames/hostname/@name"/></td> <td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='tcp'])"/></td> <td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='udp'])"/></td> </tr> </xsl:for-each> </xsl:otherwise> </xsl:choose> </tbody> </table> </div> <script> $(document).ready(function() { $('#table-overview').DataTable({ language: { "sProcessing": "处理中...", "sLengthMenu": "显示 _MENU_ 项结果", "sZeroRecords": "没有匹配结果", "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项", "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项", "sInfoFiltered": "(由 _MAX_ 项结果过滤)", "sInfoPostFix": "", "sSearch": "搜索:", "sUrl": "", "sEmptyTable": "表中数据为空", "sLoadingRecords": "载入中...", "sInfoThousands": ",", "oPaginate": { "sFirst": "首页", "sPrevious": "上页", "sNext": "下页", "sLast": "末页" }, "oAria": { "sSortAscending": ": 以升序排列此列", "sSortDescending": ": 以降序排列此列" } } }); }); </script> <h2 id="onlinehosts" class="target">在线主机</h2> <xsl:for-each select="/nmaprun/host[status/@state='up']"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"><xsl:value-of select="address/@addr"/><xsl:if test="count(hostnames/hostname) > 0"> - <xsl:value-of select="hostnames/hostname/@name"/></xsl:if></h3> </div> <div class="panel-body"> <xsl:if test="count(hostnames/hostname) > 0"> <h4>Hostnames</h4> <ul> <xsl:for-each select="hostnames/hostname"> <li><xsl:value-of select="@name"/> (<xsl:value-of select="@type"/>)</li> </xsl:for-each> </ul> </xsl:if> <h4>端口信息</h4> <div class="table-responsive"> <table class="table table-bordered"> <thead> <tr> <th>端口</th> <th>协议</th> <th>状态</th> <th>探测手段</th> <th>服务</th> <th>组件</th> <th>版本</th> <th>附件信息</th> <th>CPE 信息</th> </tr> </thead> <tbody> <xsl:for-each select="ports/port"> <xsl:choose> <xsl:when test="state/@state = 'open'"> <tr class="success"> <td title="Port"><xsl:value-of select="@portid"/></td> <td title="Protocol"><xsl:value-of select="@protocol"/></td> <td title="State"><xsl:value-of select="state/@state"/></td> <td title="Reason"><xsl:value-of select="state/@reason"/></td> <td title="Service"><xsl:value-of select="service/@name"/></td> <td title="Product"><xsl:value-of select="service/@product"/></td> <td title="Version"><xsl:value-of select="service/@version"/></td> <td title="Extra Info"><xsl:value-of select="service/@extrainfo"/></td> <td title="CPE Info"><xsl:value-of select="service/cpe"/></td> </tr> <xsl:for-each select="script"> <tr class="script"> <td></td> <td><xsl:value-of select="@id"/> <xsl:text> </xsl:text></td> <td colspan="7"> <pre><xsl:value-of select="@output"/> <xsl:text> </xsl:text></pre> </td> </tr> </xsl:for-each> </xsl:when> <xsl:when test="state/@state = 'filtered'"> <tr class="warning"> <td><xsl:value-of select="@portid"/></td> <td><xsl:value-of select="@protocol"/></td> <td><xsl:value-of select="state/@state"/><br/><xsl:value-of select="state/@reason"/></td> <td><xsl:value-of select="service/@name"/></td> <td><xsl:value-of select="service/@product"/></td> <td><xsl:value-of select="service/@version"/></td> <td><xsl:value-of select="service/@extrainfo"/></td> <td><xsl:value-of select="service/cpe"/></td> </tr> </xsl:when> <xsl:when test="state/@state = 'closed'"> <tr class="active"> <td><xsl:value-of select="@portid"/></td> <td><xsl:value-of select="@protocol"/></td> <td><xsl:value-of select="state/@state"/><br/><xsl:value-of select="state/@reason"/></td> <td><xsl:value-of select="service/@name"/></td> <td><xsl:value-of select="service/@product"/></td> <td><xsl:value-of select="service/@version"/></td> <td><xsl:value-of select="service/@extrainfo"/></td> <td><xsl:value-of select="service/cpe"/></td> </tr> </xsl:when> <xsl:otherwise> <tr class="info"> <td><xsl:value-of select="@portid"/></td> <td><xsl:value-of select="@protocol"/></td> <td><xsl:value-of select="state/@state"/><br/><xsl:value-of select="state/@reason"/></td> <td><xsl:value-of select="service/@name"/></td> <td><xsl:value-of select="service/@product"/></td> <td><xsl:value-of select="service/@version"/></td> <td><xsl:value-of select="service/@extrainfo"/></td> <td><xsl:value-of select="service/cpe"/></td> </tr> </xsl:otherwise> </xsl:choose> </xsl:for-each> </tbody> </table> </div> <xsl:if test="count(hostscript/script) > 0"> <h4>主机 脚本</h4> </xsl:if> <xsl:for-each select="hostscript/script"> <h5><xsl:value-of select="@id"/></h5> <pre style="white-space:pre-wrap; word-wrap:break-word;"><xsl:value-of select="@output"/></pre> </xsl:for-each> </div> </div> </xsl:for-each> <h2 id="openservices" class="target">服务信息</h2> <div class="table-responsive"> <table id="table-services" class="table table-striped dataTable" role="grid"> <thead> <tr> <th>IP</th> <th>端口</th> <th>协议</th> <th>服务</th> <th>组件</th> <th>版本</th> <th>CPE</th> <th>附加信息</th> </tr> </thead> <tbody> <xsl:for-each select="/nmaprun/host"> <xsl:for-each select="ports/port[state/@state='open']"> <tr> <td><xsl:value-of select="../../address/@addr"/><xsl:if test="count(../../hostnames/hostname) > 0"> - <xsl:value-of select="../../hostnames/hostname/@name"/></xsl:if></td> <td><xsl:value-of select="@portid"/></td> <td><xsl:value-of select="@protocol"/></td> <td><xsl:value-of select="service/@name"/></td> <td><xsl:value-of select="service/@product"/></td> <td><xsl:value-of select="service/@version"/></td> <td><xsl:value-of select="service/cpe"/></td> <td><xsl:value-of select="service/@extrainfo"/></td> </tr> </xsl:for-each> </xsl:for-each> </tbody> </table> </div> <script> $(document).ready(function() { $('#table-services').DataTable({ language: { "sProcessing": "处理中...", "sLengthMenu": "显示 _MENU_ 项结果", "sZeroRecords": "没有匹配结果", "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项", "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项", "sInfoFiltered": "(由 _MAX_ 项结果过滤)", "sInfoPostFix": "", "sSearch": "搜索:", "sUrl": "", "sEmptyTable": "表中数据为空", "sLoadingRecords": "载入中...", "sInfoThousands": ",", "oPaginate": { "sFirst": "首页", "sPrevious": "上页", "sNext": "下页", "sLast": "末页" }, "oAria": { "sSortAscending": ": 以升序排列此列", "sSortDescending": ": 以降序排列此列" } } }); }); </script> </div> <!-- 页脚 --> <footer class="footer" style="height: 50px; margin-top: 20px; padding-top: 20px;"> <div class="container"> <p class="text-muted"> This Report Was Generated By <a href='https://www.cnblogs.com/lyshark'>LyShark</a>.<br/> </p> </div> </footer> </body> </html> </xsl:template> </xsl:stylesheet>
为了以后能直接在命令行使用,需要增加系统环境变量(略)
参考资料:
https://zhuanlan.zhihu.com/p/564996663
https://www.crifan.com/files/doc/docbook/docbook_dev_note/release/webhelp/download_xsltproc_win.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2019-02-24 English trip V1 - B 19. Life of Confucius 孔子的生活 Teacher:Patrick Key: