mirror of
https://github.com/vel21ripn/nDPI.git
synced 2026-04-28 15:09:47 +00:00
68 lines
2.5 KiB
Bash
Executable file
68 lines
2.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
cd "$(dirname "${0}")" || exit 1
|
|
|
|
ABS_SRCDIR="@abs_top_srcdir@"
|
|
ABS_BUILDDIR="@abs_top_builddir@"
|
|
|
|
# Baseline performances ------------------------------------------------------------------------------------------------
|
|
# Important notes: BASE values must be integers examples and represents percentage (e.g. 79%, 98%).
|
|
BASE_ACCURACY=69
|
|
BASE_PRECISION=89
|
|
BASE_RECALL=40
|
|
# ----------------------------------------------------------------------------------------------------------------------
|
|
|
|
DGA_EVALUATE="${ABS_BUILDDIR}/tests/dga/dga_evaluate"
|
|
DGA_DATA="${ABS_SRCDIR}/tests/dga/test_dga.csv"
|
|
NON_DGA_DATA="${ABS_SRCDIR}/tests/dga/test_non_dga.csv"
|
|
DGA_DATA_SIZE=0
|
|
NON_DGA_DATA_SIZE=0
|
|
DATA_SIZE=0
|
|
RC=0
|
|
|
|
get_evaluation_data_size() {
|
|
DGA_DATA_SIZE=$(wc -l "${DGA_DATA}" | awk '{split($0,a," "); print a[1]}')
|
|
NON_DGA_DATA_SIZE=$(wc -l "${NON_DGA_DATA}" | awk '{split($0,a," "); print a[1]}')
|
|
DATA_SIZE=$(( NON_DGA_DATA_SIZE + DGA_DATA_SIZE ))
|
|
}
|
|
|
|
evaluate_ndpi_dga_detection() {
|
|
# DGA detection is a binary classification problem, We evaluate the following metrics:
|
|
# Accuracy: (TP + TN) / (TP + TN + FN + FP)
|
|
# Precision: TP / (TP + FP)
|
|
# Recall: TP / (TP + FN)
|
|
|
|
TP=$($DGA_EVALUATE "${DGA_DATA}")
|
|
FN=$(( DGA_DATA_SIZE - TP ))
|
|
FP=$($DGA_EVALUATE "${NON_DGA_DATA}")
|
|
TN=$(( NON_DGA_DATA_SIZE - FP ))
|
|
|
|
ACCURACY=$(echo "print(int(((${TP} + ${TN})/(${TP} + ${TN} + ${FP} + ${FN}))*100))" | python3)
|
|
PRECISION=$(echo "print(int(((${TP})/(${TP} + ${FP}))*100))" | python3)
|
|
RECALL=$(echo "print(int(((${TP})/(${TP} + ${FN}))*100))" | python3)
|
|
|
|
# In case modified version of classification algorithm decreases performances, test do not pass.
|
|
if [ "$ACCURACY" -lt "$BASE_ACCURACY" ]; then
|
|
printf "ERROR: Your modifications decreased DGA classifier accuracy: 0.${BASE_ACCURACY} decreased to 0.${ACCURACY}!\n"
|
|
RC=1
|
|
fi
|
|
if [ "$PRECISION" -lt "$BASE_PRECISION" ]; then
|
|
printf "ERROR: Your modifications decreased DGA classifier precision: 0.${BASE_PRECISION} decreased to 0.${PRECISION}!\n"
|
|
RC=1
|
|
fi
|
|
if [ "$RECALL" -lt "$BASE_RECALL" ]; then
|
|
printf "ERROR: Your modifications decreased DGA classifier recall: 0.${BASE_RECALL} decreased to 0.${RECALL}!\n"
|
|
RC=1
|
|
fi
|
|
|
|
# Finally we print the current performances, upgrade BASE_ metrics in case you improved it.
|
|
echo "DGA detection performances report:"
|
|
echo "Accuracy=0.$ACCURACY"
|
|
echo "Precision=0.$PRECISION"
|
|
echo "Recall=0.$RECALL"
|
|
}
|
|
|
|
get_evaluation_data_size
|
|
evaluate_ndpi_dga_detection
|
|
|
|
exit $RC
|