From cce48a34d07abaccf7202f171cf0bf92764900d5 Mon Sep 17 00:00:00 2001 From: Dirk Date: Sun, 19 Nov 2017 20:44:06 +0100 Subject: [PATCH] New socksend(), json flat: scan time There's a new socksend() function which gives up to 8% performance benefit (LAN) as is saves 3 sed and 1 tr command in every socksend call. It has not been put in production yet as it shows a problem in ticketbleed check and it is late and I call it a day ;-) and resolve that later (see #902). For performance tests it's quite handy to also have in the flat json format a footer with time consumed for each run. fileout_json_footer() was patched accordingly. --- testssl.sh | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/testssl.sh b/testssl.sh index ad5b64a..b3b1593 100755 --- a/testssl.sh +++ b/testssl.sh @@ -639,14 +639,13 @@ strip_quote() { #################### JSON FILE FORMATING #################### -fileout_pretty_json_footer() { - echo -e " ], - \"scanTime\" : \"$SCAN_TIME\"\n}" -} - fileout_json_footer() { - "$do_json" && printf "]\n" >> "$JSONFILE" - "$do_pretty_json" && (printf "$(fileout_pretty_json_footer)") >> "$JSONFILE" + if "$do_json"; then + fileout_json_finding "scanTime" "INFO" "$SCAN_TIME" "" "" "" + printf "]\n" >> "$JSONFILE" + fi + "$do_pretty_json" && echo -e " ], + \"scanTime\" : \"$SCAN_TIME\"\n}" >> "$JSONFILE" } fileout_json_section() { @@ -695,6 +694,7 @@ fileout_json_print_parameter() { fileout_json_finding() { local target + local finding="$3" # FIXME: dealing with locals and globals in fileout() if "$do_json"; then "$FIRST_FINDING" || echo -n "," >> "$JSONFILE" @@ -2598,6 +2598,8 @@ std_cipherlists() { # ARG1: hexbyte with a leading comma (!!), separated by commas # ARG2: sleep socksend() { + local data + # the following works under BSD and Linux, which is quite tricky. So don't mess with it unless you're really sure what you do if "$HAS_SED_E"; then data=$(sed -e 's/# .*$//g' -e 's/ //g' <<< "$1" | sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//; /^$/d' | sed 's/,/\\/g' | tr -d '\n') @@ -2609,6 +2611,20 @@ socksend() { sleep $2 } +socksend2() { + local data line + + # read line per line and strip comments (bash internal func can't handle multiline statements + data="$(while read line; do + printf "${line%\#*}" + done <<< "$1" )" + data="${data// /}" # strip ' ' + data="${data//,/\\}" # s&r , by \ + [[ $DEBUG -ge 4 ]] && echo && echo "\"$data\"" + printf -- "$data" >&5 2>/dev/null & + sleep $2 +} + openssl2rfc() { local rfcname="" @@ -12322,7 +12338,7 @@ run_grease() { fi # Check for ClientHello size bug. According to RFC 7586 "at least one TLS - # implementation is known to hang the connection when [a] ClientHello + # implementation is known to hang the connection when [a] ClientHello # record [with a length between 256 and 511 bytes] is received." # If the length of the host name is more than 75 bytes (which would make # $SNI more than 87 bytes), then the ClientHello would be more than 511