02-19-2017, 02:58 AM
(This post was last modified: 02-19-2017, 06:22 AM by devilsadvocate.)
In viewing the various Google sheets that exist that contain hashcat benchmarks, I decided to script something to get csv output after running a benchmark. Manually copying values from "./hashcat64.bin --benchmark" takes too long.
I hope you guys find this useful.
#!/bin/bash
#set -x
function usage
{
echo ' '
echo 'Usage: print_columnar_benchmark_values.sh hashcat_benchmark_logfile_from_tee.log'
echo ' '
echo 'Obtain the hashcat benchmark output by executing:'
echo '/path/to/hashcat/hashcat64.bin --benchmark | tee hashcat_benchmark_logfile_from_tee.log'
echo ' '
echo 'Optional: output this to a csv file by executing:'
echo 'print_columnar_benchmark_values.sh hashcat_benchmark_logfile_from_tee.log | tee benchmark_output.csv'
echo ' '
echo 'This script was made for hashcat-3.30 under Linux and may need to be updated in the future.'
echo ' '
exit 1
}
if [[ $# -eq 0 ]];then
echo 'Error: no benchmark output specified'
usage
fi
if [[ ! -f $1 ]]; then
echo 'Input file not found'
usage
fi
cat $1 | sed '/^$/d' | paste -s -d",\n" | grep 'Hashtype:' | grep -v 'hashcat' | grep -v 'Stopped' | grep -v 'Started' | grep -v 'OpenCL' | grep -v '===' | while read hashtype_line
do
hashtype=$(echo $hashtype_line | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs)
unparsed_speed=$(echo $hashtype_line | cut -d ':' -f 3 | cut -d '(' -f 1 | cut -f 1 | xargs)
# split unparsed_speed into two parts
speed_number=$(echo $unparsed_speed | cut -d ' ' -f 1)
speed_multiplier=$(echo $unparsed_speed | cut -d ' ' -f 2)
hashes_per_second_detect=$(echo $speed_multiplier | grep -i 'h/s' | grep -v -i 'k' | grep -v -i 'm')
kilohashes_per_second_detect=$(echo $speed_multiplier | grep -i 'kh/s')
millionhashes_per_second_detect=$(echo $speed_multiplier | grep -i 'mh/s')
# multiply base number by detected multiplier
if [[ $hashes_per_second_detect != "" ]]; then
echo "$hashtype,$speed_number"
fi
if [[ $kilohashes_per_second_detect != "" ]];then
speed_number_k=$(perl -e "print $speed_number * 1000")
echo "$hashtype,$speed_number_k"
fi
if [[ $millionhashes_per_second_detect != "" ]];then
speed_number_m=$(perl -e "print $speed_number * 1000000")
echo "$hashtype,$speed_number_m"
fi
done
I hope you guys find this useful.
#!/bin/bash
#set -x
function usage
{
echo ' '
echo 'Usage: print_columnar_benchmark_values.sh hashcat_benchmark_logfile_from_tee.log'
echo ' '
echo 'Obtain the hashcat benchmark output by executing:'
echo '/path/to/hashcat/hashcat64.bin --benchmark | tee hashcat_benchmark_logfile_from_tee.log'
echo ' '
echo 'Optional: output this to a csv file by executing:'
echo 'print_columnar_benchmark_values.sh hashcat_benchmark_logfile_from_tee.log | tee benchmark_output.csv'
echo ' '
echo 'This script was made for hashcat-3.30 under Linux and may need to be updated in the future.'
echo ' '
exit 1
}
if [[ $# -eq 0 ]];then
echo 'Error: no benchmark output specified'
usage
fi
if [[ ! -f $1 ]]; then
echo 'Input file not found'
usage
fi
cat $1 | sed '/^$/d' | paste -s -d",\n" | grep 'Hashtype:' | grep -v 'hashcat' | grep -v 'Stopped' | grep -v 'Started' | grep -v 'OpenCL' | grep -v '===' | while read hashtype_line
do
hashtype=$(echo $hashtype_line | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs)
unparsed_speed=$(echo $hashtype_line | cut -d ':' -f 3 | cut -d '(' -f 1 | cut -f 1 | xargs)
# split unparsed_speed into two parts
speed_number=$(echo $unparsed_speed | cut -d ' ' -f 1)
speed_multiplier=$(echo $unparsed_speed | cut -d ' ' -f 2)
hashes_per_second_detect=$(echo $speed_multiplier | grep -i 'h/s' | grep -v -i 'k' | grep -v -i 'm')
kilohashes_per_second_detect=$(echo $speed_multiplier | grep -i 'kh/s')
millionhashes_per_second_detect=$(echo $speed_multiplier | grep -i 'mh/s')
# multiply base number by detected multiplier
if [[ $hashes_per_second_detect != "" ]]; then
echo "$hashtype,$speed_number"
fi
if [[ $kilohashes_per_second_detect != "" ]];then
speed_number_k=$(perl -e "print $speed_number * 1000")
echo "$hashtype,$speed_number_k"
fi
if [[ $millionhashes_per_second_detect != "" ]];then
speed_number_m=$(perl -e "print $speed_number * 1000000")
echo "$hashtype,$speed_number_m"
fi
done
Code:
#!/bin/bash
#set -x
function usage
{
echo ' '
echo 'Usage: print_columnar_benchmark_values.sh hashcat_benchmark_logfile_from_tee.log'
echo ' '
echo 'Obtain the hashcat benchmark output by executing:'
echo '/path/to/hashcat/hashcat64.bin --benchmark | tee hashcat_benchmark_logfile_from_tee.log'
echo ' '
echo 'Optional: output this to a csv file by executing:'
echo 'print_columnar_benchmark_values.sh hashcat_benchmark_logfile_from_tee.log | tee benchmark_output.csv'
echo ' '
echo 'This script was made for hashcat-3.30 under Linux and may need to be updated in the future.'
echo ' '
exit 1
}
if [[ $# -eq 0 ]];then
echo 'Error: no benchmark output specified'
usage
fi
if [[ ! -f $1 ]]; then
echo 'Input file not found'
usage
fi
cat $1 | sed '/^$/d' | paste -s -d",\n" | grep 'Hashtype:' | grep -v 'hashcat' | grep -v 'Stopped' | grep -v 'Started' | grep -v 'OpenCL' | grep -v '===' | while read hashtype_line
do
hashtype=$(echo $hashtype_line | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs)
unparsed_speed=$(echo $hashtype_line | cut -d ':' -f 3 | cut -d '(' -f 1 | cut -f 1 | xargs)
# split unparsed_speed into two parts
speed_number=$(echo $unparsed_speed | cut -d ' ' -f 1)
speed_multiplier=$(echo $unparsed_speed | cut -d ' ' -f 2)
hashes_per_second_detect=$(echo $speed_multiplier | grep -i 'h/s' | grep -v -i 'k' | grep -v -i 'm')
kilohashes_per_second_detect=$(echo $speed_multiplier | grep -i 'kh/s')
millionhashes_per_second_detect=$(echo $speed_multiplier | grep -i 'mh/s')
# multiply base number by detected multiplier
if [[ $hashes_per_second_detect != "" ]]; then
echo "$hashtype,$speed_number"
fi
if [[ $kilohashes_per_second_detect != "" ]];then
speed_number_k=$(perl -e "print $speed_number * 1000")
echo "$hashtype,$speed_number_k"
fi
if [[ $millionhashes_per_second_detect != "" ]];then
speed_number_m=$(perl -e "print $speed_number * 1000000")
echo "$hashtype,$speed_number_m"
fi
done