diff --git a/testssl.sh b/testssl.sh index b4cf211..c4f9fe6 100755 --- a/testssl.sh +++ b/testssl.sh @@ -1922,40 +1922,43 @@ http_head() { # arg2: extra http header # # return codes: -# 0: all fine -# 1: server dind't respond within HEADER_MAXSLEEP -# 3: server dind't respond within HEADER_MAXSLEEP and PROXY was defined +# 0: all fine (response header is returned as string) +# 1: server didn't respond within HEADER_MAXSLEEP +# 3: server didn't respond within HEADER_MAXSLEEP and PROXY was defined # -http_header_printf() { +http_head_printf() { local request_header="$2" local useragent="$UA_STD" - local tmpfile=$TEMPDIR/$NODE.$NODEIP.http_header_printf.log - local errfile=$TEMPDIR/$NODE.$NODEIP.http_header_printf-err.log + local tmpfile=$TEMPDIR/$NODE.$NODEIP.http_head_printf.log + local errfile=$TEMPDIR/$NODE.$NODEIP.http_head_printf-err.log local -i ret=0 local proto="" foo="" node="" query="" [[ $DEBUG -eq 0 ]] && errfile=/dev/null IFS=/ read -r proto foo node query <<< "$1" - exec 33<>/dev/tcp/$node/80 - printf -- "%b" "HEAD ${proto}//${node}/${query} HTTP/1.1\r\nUser-Agent: ${useragent}\r\nHost: ${node}\r\n${request_header}\r\nAccept: */*\r\n\r\n\r\n" >&33 2>$errfile & + node=${node%:*} + # $node works here good as it connects via IPv6 first, then IPv4 + bash -c "exec 33<>/dev/tcp/$node/80" >/dev/null & wait_kill $! $HEADER_MAXSLEEP if [[ $? -ne 0 ]]; then - # not killed + # not killed --> socket open. Now we connect to the virtual host "$node" + printf -- "%b" "HEAD ${proto}//${node}/${query} HTTP/1.1\r\nUser-Agent: ${useragent}\r\nHost: ${node}\r\n${request_header}\r\nAccept: */*\r\n\r\n\r\n" >&33 2>$errfile + ret=0 + if [[ $DEBUG -eq 0 ]] ; then + cat <&33 + else + cat <&33 >$tmpfile + cat $tmpfile + fi + else if [[ -n "$PROXY" ]]; then ret=3 + else + ret=1 fi - ret=1 - else - ret=0 fi - if [[ $DEBUG -eq 0 ]] ; then - cat <&33 - else - cat <&33 >$tmpfile - cat $tmpfile - fi - exec 33<&- + exec 33<&- exec 33>&- return $ret } @@ -1963,9 +1966,6 @@ http_header_printf() { ldap_get() { local ldif - local -i success - local crl="$1" - local tmpfile="$2" local jsonID="$3" if type -p curl &>/dev/null; then @@ -17703,7 +17703,7 @@ run_opossum() { case $service in HTTP) uri=${URI/https:\/\//} - response=$(http_header_printf http://${uri} 'Upgrade: TLS/1.0\r\n\r\nClose\r\n') + response=$(http_head_printf http://${uri} 'Upgrade: TLS/1.0\r\n\r\nClose\r\n') # In any case we use $response but we handle the return codes case $? in 0) ret=0 ;;