|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
file="$1"
|
|
|
|
# Shift the attributes so we can ignore the filename easily
|
|
|
|
shift
|
|
|
|
|
|
|
|
if [ ! -n "$file" ]; then
|
|
|
|
echo "You must provide an xml file"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
json=$(php -r "echo json_encode(simplexml_load_file('$file'));" 2> /dev/null)
|
|
|
|
|
|
|
|
if [[ "$json" == "false" ]]; then
|
|
|
|
echo "Please provide a valid xml file"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
function print_basic_info(){
|
|
|
|
echo $json | # Echo the full json file
|
|
|
|
jq ' if ( .host | type ) == "object" then [ .host ] else .host end ' | # Get the hosts as an array (even if there is only one
|
|
|
|
#jq '.[0]'
|
|
|
|
jq '[ .[] | {
|
|
|
|
address: .address."@attributes".addr,
|
|
|
|
port: {
|
|
|
|
tcp : (try ( [ .ports.port[] | select( ."@attributes".protocol == "tcp" ) | {
|
|
|
|
port: ."@attributes".portid,
|
|
|
|
service: .service."@attributes",
|
|
|
|
} ] ) catch null ),
|
|
|
|
udp : (try ( [ .ports.port[] | select( ."@attributes".protocol == "udp" ) | {
|
|
|
|
port: ."@attributes".portid,
|
|
|
|
service: .service."@attributes",
|
|
|
|
} ] ) catch null )
|
|
|
|
}
|
|
|
|
} ]'
|
|
|
|
#.ports.port[] | [ . ]
|
|
|
|
#| [select(."@attributes".protocol)]
|
|
|
|
}
|
|
|
|
|
|
|
|
function print_with_match(){
|
|
|
|
local match=$1
|
|
|
|
echo $json | # Echo the full json file
|
|
|
|
jq ' if ( .host | type ) == "object" then [ .host ] else .host end ' | # Get the hosts as an array (even if there is only one
|
|
|
|
#jq '.[9]'
|
|
|
|
#jq '[ .[9] | {
|
|
|
|
# address: .address."@attributes".addr,
|
|
|
|
# domains: .hostnames.hostname."@attributes".name,
|
|
|
|
# port: {
|
|
|
|
# tcp : (try ( [ .ports.port[] | select( ."@attributes".protocol == "tcp" ) | select( .service."@attributes".name | test("'"$match"'; "i") ) | {
|
|
|
|
# port: ."@attributes".portid,
|
|
|
|
# service: .service."@attributes",
|
|
|
|
# } ] ) catch null ),
|
|
|
|
# udp : (try ( [ .ports.port[] | select( ."@attributes".protocol == "udp" ) | {
|
|
|
|
# port: ."@attributes".portid,
|
|
|
|
# service: .service."@attributes",
|
|
|
|
# } ] ) catch null )
|
|
|
|
# }
|
|
|
|
#} ]'
|
|
|
|
jq '[ .[9] | {
|
|
|
|
address: .address."@attributes".addr,
|
|
|
|
domains: .hostnames.hostname."@attributes".name,
|
|
|
|
port: {
|
|
|
|
tcp : [ .ports.port | {
|
|
|
|
port: .,
|
|
|
|
service: .service."@attributes",
|
|
|
|
} ],
|
|
|
|
}
|
|
|
|
} ]'
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ -n "$1" ] ; then
|
|
|
|
case "$1" in
|
|
|
|
-h|--help)
|
|
|
|
#print_help
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
basic)
|
|
|
|
print_basic_info
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
print_with_match "$@"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|