- 帖子
- 1023
- 积分
- 3120
- 技术
- 230
- 捐助
- 160
- 注册时间
- 2010-12-22
|
5楼
发表于 2014-11-28 05:02
| 只看该作者
本帖最后由 tmplinshi 于 2014-11-28 05:06 编辑
用 AutoHotkey 写了下。加我 QQ 1316882711 详谈。
下载地址: http://pan.baidu.com/s/1sjJOVQt
源码:
;-----------------------------------------
/*
[config]
ahk_version=Unicode
icon=
bin=
*/
;@Ahk2Exe-SetVersion 1.0.0.0
;-----------------------------------------
#NoEnv
#NoTrayIcon
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
SetBatchLines -1
ListLines Off
gui_title := "提取评估报告 v1.00"
; 命令行参数
;
If 1 in /?,-h,--help
{
MsgBox, % "用法: " A_ScriptName " [-dir html目录] [-o 输出文件]"
ExitApp
}
arg := ParamToObj()
arg.o := (arg.o = "") ? "评估报告_最终结果.xls" : arg.o
; 开始提取
;
FinalResult := "序号 IP地址 操作系统 检查分数 主机是否达标 基线项 风险等级 检查点 实际值 标准值 配置方法 结果`r`n"
global indexCount := 0
SetWorkingDir, % arg.dir
Loop, *.html
{
ExtractInfo(A_LoopFileFullPath, result)
FinalResult .= result
}
; 保存结果
FileOpen(arg.o, "w").Write(FinalResult)
MsgBox, 处理完毕!
Return
; ==============================================================================================
ExtractInfo(HtmlFile, ByRef ResultTable) {
ResultTable := ""
; 以 UTF-8 编码读取 html 文件内容
FileRead, data, % "*P65001 " HtmlFile
; 提取 IP地址、操作系统、检查分数
RegExMatch(data, "i)IP地址</th><td>(.*?)<.*?配置模板</th><td>(\w+).*?安全评估分</th><td>(.*?)<", m)
devInfo := m1 A_Tab m2 A_Tab m3 A_Tab ( m3>=95 ? "达标" : "不达标" )
; 将搜索范围缩小至“2.检查结果”
RegExMatch(data, "2\.检查结果</div>.*?3\.辅助信息检查结果</div>", data)
; 取得所有红色的“基线项”的出现位置
posList := [], startPos := 1
s := "<tr class='unaccord'><td colspan='1' rowspan='1' width='100px'>"
While, pos := InStr(data, s,, startPos)
startPos := pos + StrLen(s), posList.Insert(startPos)
; 取得每个红色“基线项”下面的红色信息
For i, startPos in posList
{
endPos := (i = posList.MaxIndex()) ? StrLen(data) : posList[i+1]
subData := SubStr(data, startPos, endPos-startPos)
; 获取“基线项”和“风险等级”
RegExMatch(subData, "i)/blank\.gif.*?<td>(.*?)</td><.*?>(.*?)</td>", m)
baseInfo := m1 A_Tab m2
; 获取“检查点”...
_pos := 1, _m := ""
_regEx := "i)<tr class='unaccord'><td>(.*?)</td><td>(.*?)</td><td>.*?<td>(.*?)</td><td>(.*?)</td>"
While, _pos := RegExMatch( subData, _regEx, _m, _pos+StrLen(_m) ) {
baseInfo_child := _m1 A_Tab _m2 A_Tab _m3 A_Tab _m4
indexCount ++
ResultTable .= indexCount A_Tab devInfo A_Tab baseInfo A_Tab baseInfo_child A_Tab "不合规" "`r`n"
}
}
ResultTable := (ResultTable = "") ? (devInfo "`r`n") : ResultTable
}
ParamToObj() {
global 0
obj := {}
Loop, %0%
{
param := %A_Index%
If RegExMatch(param, "^(/|-)+(\w+)(\W(.+))?$", match) {
obj[match2] := match4
key := match2
}
Else If (key != "")
obj[key] := param, key := ""
}
Return obj
} |
-
1
评分人数
-
|