Гочи не всегда перехватывает полные хендшейки и не всегда записывает валидные .pcap
файлы — их невозможно преобразовать в .hc22000
из-за отсутствия некоторых данных (сами хендшейки в .pcap
тоже отсутствовать могут).
Плагин aircrackonly удаляет невалидные .pcap
файлы, но не все.
А т.к. мне нужны только настоящие хендшейки — придется писать свой скрипт (сюда у вас нет доступа) (учтите, сам скрипт старый, harcoded n shi, но логика понятна):
#!/usr/bin/env bash
# update_handshakes.sh:
# deletes invalid pcaps, add that APs to whitelist, sync w pwnagotchi
#-------------------------------[Error handling]-------------------------------
function Error_Handler {
local exit_code="$?"
echo "Error: exit code: $exit_code" >&2
exit "$exit_code"
}
set -eEuo pipefail
trap Error_Handler ABRT HUP INT QUIT TERM ERR
#-------------------------[Global variables/constants]-------------------------
# Dependencies. Packages
HCXPCAPNGTOOL_PKG_NAME='hcxpcapngtool'
TSHARK_PKG_NAME='tshark'
# Directories
PWNAGOTCHI_DIR="${HOME}/side-projects/pwnagotchi"
PCAP_FILES_DIR="${PWNAGOTCHI_DIR}/backups/root/handshakes"
HC22000_FILES_DIR="${PCAP_FILES_DIR}/hc22000"
# Files
PWNAGOTCHI_CONFIG_FILE="${PWNAGOTCHI_DIR}/backups/etc/pwnagotchi/config.toml"
PWNAGOTCHI_CONFIG_TEMPLATE_FILE="${PWNAGOTCHI_DIR}/etc/config-template.toml"
# Other
PWNAGOTCHI_SSH_HOSTNAME='root@10.0.0.2'
PCAP_QUANTITY_BEFORE="$(
find "$PCAP_FILES_DIR" -maxdepth 1 -type f -name '*.pcap' | wc --lines
)"
#---------------------------------[Main code]----------------------------------
# If $HCXTOOLS_PKG_NAME not installed -> installs it
for package in "$HCXPCAPNGTOOL_PKG_NAME" "$TSHARK_PKG_NAME"; do
type "$package" &> /dev/null || { echo "$package' is not installed"; exit 1; }
done
# If $HC22000_FILES_DIR dir not exist -> creates it
[[ -d "$HC22000_FILES_DIR" ]] || mkdir --parents "$HC22000_FILES_DIR"
# backup.sh
"${PWNAGOTCHI_DIR}/admin_scripts/backup.sh"
# Remove invalid pcaps
for pcap_file in "$PCAP_FILES_DIR"/*.pcap; do
# Finding out the file name (w/o extension)
filename="$(basename -s '.pcap' "$pcap_file")"
# Output .hc22000 file
output_file="${HC22000_FILES_DIR}/${filename}.hc22000"
if [[ ! -f "$output_file" ]]; then
hcxpcapngtool "$pcap_file" -o "$output_file" &> /dev/null
[[ ! -f "$output_file" ]] && rm "$pcap_file"
echo "$pcap_file was invalid -> will be DELETED"
fi
done
find "$HC22000_FILES_DIR" -type f -name '*.pcap.hc22000' -delete
#----------------------------[Creating config.toml]----------------------------
cp "$PWNAGOTCHI_CONFIG_TEMPLATE_FILE" "$PWNAGOTCHI_CONFIG_FILE"
{
echo 'main.whiletist = ['
for pcap_file in "$PCAP_FILES_DIR"/*.pcap; do
mac_address="$(
tshark \
-r "$pcap_file" \
-e wlan.sa -Y "wlan.fc.type_subtype == 0x0008" -Tfields \
| sort \
| uniq \
| head --lines=1
)"
[[ -n "$mac_address" ]] && echo "\"$mac_address\","
done
echo ']'
} >> "$PWNAGOTCHI_CONFIG_FILE"
#----------------------[Sync handshakes & config (rsync)]----------------------
echo 'Syncing with shmunk...'
rsync \
--recursive --delete \
"$PCAP_FILES_DIR"/ \
"${PWNAGOTCHI_SSH_HOSTNAME}:/root/handshakes/"
rsync \
"$PWNAGOTCHI_CONFIG_FILE" \
"${PWNAGOTCHI_SSH_HOSTNAME}:/etc/pwnagotchi/config.toml"
#--------------------------------[Final output]--------------------------------
PCAP_QUANTITY_AFTER="$(
find "$PCAP_FILES_DIR" -maxdepth 1 -type f -name '*.pcap' | wc --lines
)"
(( PCAP_QUANTITY_DIFF = PCAP_QUANTITY_AFTER - PCAP_QUANTITY_BEFORE ))
if (( PCAP_QUANTITY_DIFF > 0 )); then
echo "+$PCAP_QUANTITY_DIFF pcaps 😎😎"
elif (( PCAP_QUANTITY_DIFF < 0 )); then
echo "$PCAP_QUANTITY_DIFF pcaps 😐😐"
else
echo "No quantity changes 🥱🥱"
fi