You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

87 lines
2.2 KiB

#!/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