Add script for turning nessus html to spreadsheet
This commit is contained in:
parent
3f5663c362
commit
fb93abe720
1 changed files with 55 additions and 0 deletions
55
bin/.bin/nessus-html-to-spreadsheet
Executable file
55
bin/.bin/nessus-html-to-spreadsheet
Executable file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# replaces " with \"
|
||||
echoescaped(){
|
||||
echo -n '"'
|
||||
echo "$@" | sed 's/"/\\"/g'
|
||||
echo -n '"'
|
||||
}
|
||||
printRow(){
|
||||
local id="$1"
|
||||
local title="$(echo "$container" | hq "#$id" text)"
|
||||
local -a headings
|
||||
local -a bodys
|
||||
|
||||
while IFS= read -rd '' heading; do
|
||||
headings+=("$heading")
|
||||
done < <( echo "$container" | hq "#${id}-container" data |\
|
||||
hq -0 '.details-header' text )
|
||||
while IFS= read -rd '' body; do
|
||||
bodys+=("$body")
|
||||
done < <( echo "$container" | hq "#${id}-container" data |\
|
||||
hq -0 '.details-header + div' text )
|
||||
|
||||
# For some reason the html output doesn't put the observed bit in a div like
|
||||
# the others
|
||||
local observed="$(echo "$container" | hq "#${id}-container" data |\
|
||||
sed -n '/<h2/,$p' | hq 'div:nth-of-type(2)' text)"
|
||||
|
||||
local link="${bodys[2]}"
|
||||
local expected="${bodys[5]}"
|
||||
# For some reason the html output doesn't put the observed bit in a div like
|
||||
# the others
|
||||
local observed="$(echo "$container" | hq "#${id}-container" data |\
|
||||
sed -n '/<h2/,$p' | hq 'div:nth-of-type(2)' text)"
|
||||
|
||||
echoescaped -n "${title}"
|
||||
echo -n ","
|
||||
echoescaped -n "${link}"
|
||||
echo -n ","
|
||||
echoescaped -n "${expected}"
|
||||
echo -n ","
|
||||
echoescaped -n "${observed}"
|
||||
echo ","
|
||||
}
|
||||
|
||||
# Expects a file on stdin
|
||||
# Get the bit between compliance failed and the next heading
|
||||
container="$(cat - | sed -n "/<h6.*Compliance 'FAILED'/,/<h6/p")"
|
||||
ids="$(echo "$container" | grep -Eo 'id="idp[0-9]*-container' |\
|
||||
cut -d '"' -f2 | cut -d '-' -f1)"
|
||||
|
||||
echo "Title,See Also,Expected,Observed"
|
||||
while read id; do
|
||||
printRow "$id"
|
||||
done <<< "$ids"
|
Loading…
Add table
Add a link
Reference in a new issue