#!/bin/bash if [ $# -lt 2 ]; then echo "Usage: $0 /path/to/wireshark capture.pcapng [ssl debug file] [--] [other wireshark options]" exit 1 fi DEBUGGER=() case $1 in gdb|*/gdb) while :; do arg=$1; shift DEBUGGER+=("$arg") [[ $arg != --args ]] || break done ;; valgrind|*/valgrind) while :; do arg=$1; shift DEBUGGER+=("$arg") [[ $arg != -- ]] || break done ;; esac SSLKEYLOGFILE=${SSLKEYLOGFILE:-$PWD/premaster.txt} WIRESHARK=$1 CAPTFILE=$2 SSLDEBUG= shift 2 # set SSL debug file only if ssl debug file is given case $1 in -*|'') ;; *) SSLDEBUG=$1 ; shift ;; esac # -- marks end of our options and the begin of wireshark options case $1 in --) shift ;; esac if [ ! -x "$WIRESHARK" ]; then echo "$WIRESHARK: not an executable" exit 1 fi if [ ! -s "$CAPTFILE" ]; then echo "$CAPTFILE: file is empty or does not exist" exit 1 fi [ -z "$SSLDEBUG" ] || set -- -o ssl.debug_file:"$SSLDEBUG" "$@" # Set AddressSanitizer options if not already if [ -z "$ASAN_OPTIONS" ]; then # Abort so it can be caught by gdb ASAN_OPTIONS=abort_on_error=1 # Strip source path (assume /tmp/wireshark/) ASAN_OPTIONS+=:strip_path_prefix=/tmp/wireshark/ export ASAN_OPTIONS fi # For ASAN, disable slice allocator and use g_malloc directly. if [ -z "$G_SLICE" ]; then export G_SLICE=always-malloc fi "${DEBUGGER[@]}" \ "$WIRESHARK" -r "$CAPTFILE" \ -o http.ssl.port:443,4430-4433 \ -o ssl.keylog_file:"$SSLKEYLOGFILE" \ -o dtls.keylog_file:"$SSLKEYLOGFILE" \ "$@"