Script for filtering wlan.ta packets and README(needs to be revised)

edoardoColi
edoardoColi 2 years ago
parent b4328ea35a
commit c15c8195a3

@ -0,0 +1,296 @@
#!/bin/bash
#Author: Edoardo Coli
#
#Requirements: bash tshark
#Tested with: GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
#Tested with: TShark (Wireshark) 3.6.7 (Git v3.6.7 packaged as 3.6.7-1~ubuntu18.04.0+wiresharkdevstable)
#Temporary files to save data
_FILE_TMP=".MACrandom.tmp"
_FILE2_TMP=".MAClistall.tmp"
_FILE3_TMP=".MACprobe.tmp"
#Reverence strings
_FILE_REF=''
_SSID_REF=''
#Flags for optional variables
_ENHANCED_FLAG='false'
_VERBOSE_FLAG='false'
_UNIQ_FLAG='false'
_PROBE_FLAG='false'
#Global parametric variable
_MAX_TO=50000
#Counters to show the results
_PCKS_CNTR=0
_PCKS_WLAN_CNTR=0
_PCKS_SSID_CNTR=0
_SCOPE_ALL_CNTR=0
_SCOPE_RAND_CNTR=0
_SCOPE_FIX_CNTR=0
#Set the error color to red
ERROR="\e[31m"
#Set the warning color to yellow
WARNING="\e[33m"
#Set color to highlight the results
LOOKGOOD="\e[0;38;5;208m"
#Set the default color
DEFAULT="\e[0m"
### error_msg(program_name, msg)
function error_msg()
{
echo "Error: $2"
echo "Usage: $1 [OPTIONS]"
echo "Try '$1 -h' for more information."
}
### verbose_msg(msg)
function verbose_msg()
{
if [[ $_VERBOSE_FLAG == 'true' ]]; then
echo -e "${LOOKGOOD}$1${DEFAULT}"
fi
}
### usage(program_name)
function usage()
{
echo "Usage: $1 [OPTIONS]"
echo "Specifies a file to analyze if not passed through redirection."
echo "Pipe(|) have priority over flag -f."
echo "Redirection(<) have priority over pipe(|)."
echo "WARNING: When using pipe redirection for data stream remember to use the -U and -w flags."
echo " The "-U" flag instructs tcpdump to write packets to the output file immediately (unbuffered mode)."
echo " (this should avoid having \"appears to have been cut short in the middle of a packet\")"
echo " The "-w" flag specifies the output file where packets will be saved."
echo
echo "Options:"
echo " -e, Option to discriminate and merge different MAC addresses (NOT YET DEVELOPED)"
echo " -f, Set the file to analyze"
echo " -i, Set SSID filter to analyze frames"
echo " -n, Number of packets to analyze, in case of file data input (starting from the beginning) ~~TODO test with data stream"
echo " -p, Option to pipe in data stream, without a pipe is ignored"
echo " -u, Option to not consider duplicates in MAC count"
echo " -v, Option for enable verbose messages"
echo
echo "Example:"
echo " sudo tcpdump -i <interface> -U -w $_FILE3_TMP | $0 -p"
echo " $0 < file.pcap"
echo " cat file.pcap | $0"
echo " $0 -f file.pcap"
echo
}
### Behavior when received SIGINT
function handle_sigint()
{
# verbose_msg "SIGINT received..."
# verbose_msg "killing main process"
#Cleanup code
rm -f "$_FILE_TMP"
rm -f "$_FILE2_TMP"
rm -f "$_FILE3_TMP"
rm -f "$lock_print"
kill -9 $_PROCESS_ID #forcefully terminate the process, and any subprocesses or child processes, with the ID using the SIGKILL signal (sometimes it's not enough, why?)
exit 0
}
### check_ret(prog_name, val_ret)
function check_ret()
{
notgood=0
case $1 in
"filtering_away")
if [ $2 -ne 0 ]; then
notgood=1
fi
;;
"print_results")
if [ $2 -ne 0 ]; then
notgood=1
fi
;;
*) echo -e "${WARNING}Setup success value returned for function \"$1\"${DEFAULT}"
return 1;;
esac
if [ $notgood -eq 1 ]; then
echo -e "${ERROR}Problem with the execution of \"$1\", exited with status $2${DEFAULT}"
fi
}
###
function filtering_away()
{
#(TENTATIVO DI PARALLELIZZAZIONE) OK MA SCAMBIA I RISULTATI A CASO IN BASE A COME FINISCE wc
# verbose_msg "Counting packets in $_FILE_REF"
# verbose_msg "Counting packets with field 'wlan' in $_FILE_REF"
# _TMP=$(tshark -r $_FILE_REF -T fields -e frame.number -c $_MAX_TO | wc -l & tshark -r $_FILE_REF -Y "wlan" -T fields -e frame.number -c $_MAX_TO | wc -l)
# wait #Command to wait for the background process to finish before continuing with the rest of the script.
# _PCKS_CNTR=$(echo $_TMP | cut -d ' ' -f 1)
# _PCKS_WLAN_CNTR=$(echo $_TMP | cut -d ' ' -f 2)
# verbose_msg "=> $_PCKS_CNTR in $_FILE_REF"
# verbose_msg "=> $_PCKS_WLAN_CNTR wlan"
scope='wlan.ta' #filter for the main scope of divide randomized MAC and fixed ones.
filterSSID=''
verbose_msg "Counting packets in $_FILE_REF"
_PCKS_CNTR=$(tshark -r $_FILE_REF -T fields -e frame.number -c $_MAX_TO | wc -l) #for details see 'man tshark'.
verbose_msg "=> $_PCKS_CNTR"
verbose_msg "Counting packets with field 'wlan' in $_FILE_REF"
_PCKS_WLAN_CNTR=$(tshark -r $_FILE_REF -Y "wlan" -T fields -e frame.number -c $_MAX_TO | wc -l) #for details see 'man tshark'.
verbose_msg "=> $_PCKS_WLAN_CNTR"
if ! [[ $_SSID_REF == '' ]]; then
filterSSID="&& (wlan.ssid == $_SSID_REF)" #filter from command line to narrow the scope with a specific SSID.
verbose_msg "Counting packets with field 'wlan.ssid == $_SSID_REF' in $_FILE_REF"
_PCKS_SSID_CNTR=$(tshark -r $_FILE_REF -Y "wlan.ssid == $_SSID_REF" -T fields -e frame.number -c $_MAX_TO | wc -l) #for details see 'man tshark'.
verbose_msg "=> $_PCKS_SSID_CNTR"
fi
filter="($scope) && (wlan) $filterSSID" #save the complete filter which wanna use to split the data.
rm -f $_FILE_TMP $_FILE2_TMP #just as a precaution.
if [[ $_UNIQ_FLAG == 'true' ]]; then
verbose_msg "Counting packets with filter '$filter' in $_FILE_REF"
_SCOPE_ALL_CNTR=$(tshark -r $_FILE_REF -Y "$filter" -T fields -e wlan.ta -c $_MAX_TO | tr '[:lower:]' '[:upper:]' | sort | uniq | tee >(wc -l) >"$_FILE2_TMP") #for details see 'man tshark'. tr swap all upper-case. sort+uniq remove the duplicates. tee split the data in the pipe.
verbose_msg "=> $_SCOPE_ALL_CNTR"
if [[ $_VERBOSE_FLAG == 'true' ]]; then
_SCOPE_RAND_CNTR=$(cut -c 1-17 $_FILE2_TMP | awk '/^.[AE26]:..:..:..:..:../{print $1}' | sort | uniq | tee >(wc -l) >"$_FILE_TMP") #cut print selected parts of line. awk is used to consider only MAC specified(x[A E 2 6]:xx:xx:xx:xx:xx). sort+uniq remove the duplicates(seems useless but necessary). tee split the data in the pipe.
else
_SCOPE_RAND_CNTR=$(cut -c 1-17 $_FILE2_TMP | awk '/^.[AE26]:..:..:..:..:../{print $1}' | sort | uniq | wc -l) #cut print selected parts of line. awk is used to consider only MAC specified(x[A E 2 6]:xx:xx:xx:xx:xx). sort+uniq remove the duplicates(seems useless but necessary).
fi
else
verbose_msg "Counting packets with filter '$filter' in $_FILE_REF"
_SCOPE_ALL_CNTR=$(tshark -r $_FILE_REF -Y "$filter" -T fields -e wlan.ta -e wlan.fc.type -c $_MAX_TO | tr '[:lower:]' '[:upper:]' | tee >(wc -l) >"$_FILE2_TMP") #for details see 'man tshark'. tr swap all upper-case. tee split the data in the pipe.
verbose_msg "=> $_SCOPE_ALL_CNTR"
if [[ $_VERBOSE_FLAG == 'true' ]]; then
_SCOPE_RAND_CNTR=$(cut -c 1-17 $_FILE2_TMP | awk '/^.[AE26]:..:..:..:..:../{print $1}' | tee >(wc -l) >"$_FILE_TMP") #cut print selected parts of line. awk is used to consider only MAC specified(x[A E 2 6]:xx:xx:xx:xx:xx). tee split the data in the pipe.
else
_SCOPE_RAND_CNTR=$(cut -c 1-17 $_FILE2_TMP | awk '/^.[AE26]:..:..:..:..:../{print $1}' | wc -l) #cut print selected parts of line. awk is used to consider only MAC specified(x[A E 2 6]:xx:xx:xx:xx:xx).
fi
fi
_SCOPE_FIX_CNTR=$(expr $_SCOPE_ALL_CNTR - $_SCOPE_RAND_CNTR)
return 0;
}
###
function print_results()
{
if ! [ -t 0 ]; then
echo "Total Number of Packets captured: $_PCKS_CNTR"
else
echo "Total Number of Packets captured in \"$_FILE_REF\": $_PCKS_CNTR"
fi
echo
echo -n "Number of Frame Structure of IEEE 802.11"
if [[ $_UNIQ_FLAG == 'false' ]]; then
echo -n " (with field 'wlan.ta' $_SCOPE_ALL_CNTR)"
fi
echo -n " : $_PCKS_WLAN_CNTR"
if [[ $_PCKS_WLAN_CNTR -eq 0 || $_PCKS_CNTR -eq 0 ]]; then
echo
else
echo "(~$(expr $_PCKS_WLAN_CNTR \* 100 / $_PCKS_CNTR )%)"
fi
if ! [[ $_SSID_REF == '' ]]; then
echo "-->Taking into account only those with \"SSID=$_SSID_REF\": $_PCKS_SSID_CNTR"
fi
echo -n "----> with randomized MAC: $_SCOPE_RAND_CNTR"
if [[ $_SCOPE_RAND_CNTR -eq 0 || $_PCKS_WLAN_CNTR -eq 0 ]]; then
echo
else
echo "(~$(expr $_SCOPE_RAND_CNTR \* 100 / $_SCOPE_ALL_CNTR )%)"
fi
echo "----> with fixed MAC: $_SCOPE_FIX_CNTR"
if [[ $_VERBOSE_FLAG == 'true' ]]; then
N=10
if [ $(wc -l < $_FILE_TMP) -gt $N ]; then
echo && echo -e "${LOOKGOOD}$_FILE_TMP${DEFAULT}" && head -n $N "$_FILE_TMP" && echo "..."
elif [ $(wc -l < $_FILE_TMP) -gt 0 ]; then
echo && echo -e "${LOOKGOOD}$_FILE_TMP${DEFAULT}" && head -n $N "$_FILE_TMP"
fi
# rm $_FILE_TMP
if [ $(wc -l < $_FILE2_TMP) -gt $N ] && [[ $_UNIQ_FLAG == 'false' ]]; then
echo && echo -e "${LOOKGOOD}$_FILE2_TMP${DEFAULT}" && head -n $N "$_FILE2_TMP" && echo "..." && echo "[Frame Control Type:]" && echo "[0-Management Frame, 1-Control Frame, 2-Data Frame, 3-Extension Frame, (4+)-PV1 Reserved]"
elif [ $(wc -l < $_FILE2_TMP) -gt $N ]; then
echo && echo -e "${LOOKGOOD}$_FILE2_TMP${DEFAULT}" && head -n $N "$_FILE2_TMP" && echo "..."
elif [ $(wc -l < $_FILE2_TMP) -gt 0 ]; then
echo && echo -e "${LOOKGOOD}$_FILE2_TMP${DEFAULT}" && head -n $N "$_FILE2_TMP"
fi
# rm $_FILE2_TMP
fi
echo
return 0
}
### START EXECUTION
_PROCESS_ID=$$ #save the process ID of the current shell
trap handle_sigint SIGINT #set up a trap for SIGINT
if [ $# -le 0 ] && [ -t 0 ]; then #if the number of arguments is less than or equal to 0 and we don't have a redirection.
error_msg $0 "Nothing has been passed to analyze"
exit 1
else
while getopts 'ef:hi:n:puv' flag; do #colon(:) to indicate that the flag has one argument.
case "${flag}" in
e) _ENHANCED_FLAG='true' ;;
f) _FILE_REF="${OPTARG}" ;;
h) usage $0
exit 0;;
i) _SSID_REF="${OPTARG}" ;;
n) _MAX_TO="${OPTARG}" ;;
p) _PROBE_FLAG='true' ;;
u) _UNIQ_FLAG='true' ;;
v) _VERBOSE_FLAG='true' ;;
*) exit 1;;
esac
done
fi
if ! [ -t 0 ]; then #checks if the descriptor is opened with a redirection, regardless of type of redirection used.
if [ -p /dev/stdin ]; then #checks if there is a pipe redirection. Redirection from a command and not from a file.
if [[ $_PROBE_FLAG == 'true' ]]; then #checks if we want to process a data stream (from tcpdump).
lock_print=$(mktemp) #creates a unique temporary file name in /tmp/ folder.
_FILE_REF="$_FILE3_TMP"
sleep 2 #waiting to have something to analyze
echo -ne "\033[2J\033[H"
while true
do
filtering_away > $lock_print
check_ret filtering_away $?
print_results >> $lock_print
check_ret print_results $?
echo -e "\033[2J\033[H"
echo "$(cat $lock_print)"
done
else
_FILE_REF=$(mktemp) #creates a unique temporary file name in /tmp/ folder.
cat /dev/stdin > "$_FILE_REF"
fi
else
if head -c4 | od -t x4 -N4 | grep -q -e "a1b2c3d4" -e "d4c3b2a1" -e "0a0d0d0a"; then #handled only pcap, pcapng files (not erf ...) using magic number of file.
_FILE_REF=$(mktemp) #creates a unique temporary file name in /tmp/ folder.
cat /dev/stdin > "$_FILE_REF"
else
error_msg $0 "Not a pcap/pcapng file"
exit 1;
fi
fi
else
if ! [[ $_FILE_REF == '' ]]; then
if ! head -c4 $_FILE_REF | od -t x4 -N4 | grep -q -e "a1b2c3d4" -e "d4c3b2a1" -e "0a0d0d0a"; then #handled only pcap, pcapng files (not erf ...) using magic number of file.
error_msg $0 "'$_FILE_REF' not a pcap/pcapng file"
exit 1;
fi
else
error_msg $0 "Insert a file using -f flag"
exit 1;
fi
fi
filtering_away
check_ret filtering_away $?
if ! [ -t 0 ]; then
rm -f "$_FILE_REF"
fi
print_results
check_ret print_results $?
exit 0

@ -1,2 +1,26 @@
# 5G_Sandbox TODO better
Programs developed during my master's degree in 'Computer Science and Networking' related to network infrastructure, wireless networks and more
cos'e 5g
perche si puo' fare una sandbox
cose 802.11
cosa si vuole fare con lo script
come funziona lo script
gestione del caso live stream
Il supporto per gli indirizzi MAC randomizzati non è sempre disponibile su tutti i dispositivi Android a causa di limitazioni hardware o software. In alcuni casi, i dispositivi più vecchi potrebbero non essere in grado di supportare la funzionalità di indirizzi MAC randomizzati a causa delle limitazioni hardware, ad esempio di una scheda di rete che non dispone di hardware per la generazione di indirizzi MAC randomizzati. Inoltre, l'implementazione degli indirizzi MAC randomizzati potrebbe essere influenzata anche dalle politiche di privacy e sicurezza del produttore del dispositivo o dell'operatore di rete mobile. Alcuni produttori potrebbero decidere di non implementare questa funzionalità perché non rientra nei loro obiettivi di sicurezza e privacy, oppure perché la loro politica di sicurezza prevede l'utilizzo di indirizzi MAC statici per motivi di tracciabilità e identificazione dei dispositivi.
WPA3 (Wi-Fi Protected Access 3) è stata introdotta per migliorare la sicurezza delle reti Wi-Fi rispetto alla precedente versione di sicurezza WPA2. Tra le principali ragioni per cui è stato introdotto WPA3 ci sono:
1 Maggiore resistenza agli attacchi di tipo brute-force: WPA3 utilizza un sistema di autenticazione più robusto rispetto a WPA2, basato sull'algoritmo di autenticazione Dragonfly. Questo rende più difficile per gli attaccanti individuare le password delle reti Wi-Fi.
2 Miglioramenti alla privacy: WPA3 introduce un nuovo protocollo di crittografia di tipo forward secrecy, che migliora la privacy degli utenti. Questo significa che anche se un attaccante riesce a decrittare il traffico di una sessione di rete Wi-Fi, non sarà in grado di decrittare il traffico delle sessioni precedenti o successive.
3 Protezione dalle vulnerabilità legate alla gestione delle chiavi di sicurezza: WPA3 migliora la gestione delle chiavi di sicurezza rispetto a WPA2, introducendo il protocollo di scambio di chiavi Simultaneous Authentication of Equals (SAE). SAE fornisce una maggiore protezione contro gli attacchi di tipo dictionary e permette di impostare password più robuste.
Inoltre, negli ultimi anni si è assistito all'adozione di indirizzi MAC randomizzati per aumentare la privacy degli utenti. L'indirizzo MAC (Media Access Control) è un identificatore univoco assegnato a ogni dispositivo che si connette a una rete Wi-Fi e può essere utilizzato per tracciare l'attività degli utenti.
Gli indirizzi MAC randomizzati sono stati introdotti per proteggere la privacy degli utenti impedendo il tracciamento della loro attività online. In pratica, il dispositivo utilizza un indirizzo MAC diverso ad ogni connessione, rendendo più difficile per le società di analisi o gli attaccanti tracciare l'attività degli utenti. Tuttavia, l'utilizzo di indirizzi MAC randomizzati potrebbe causare problemi di compatibilità con alcune reti Wi-Fi, poiché alcuni dispositivi richiedono un indirizzo MAC univoco per la connessione alla rete.
5G Sandbox
Per quanto riguarda il settore della comunicazione mobile, il 5G rappresenta una svolta tecnologica, poiché permette di supportare nuovi servizi e applicazioni come la realtà aumentata, la realtà virtuale, il cloud computing, l'Internet delle Cose (IoT) e molto altro ancora. Inoltre, il 5G supporta un maggior numero di dispositivi per unità di superficie rispetto al 4G, consentendo di soddisfare la crescente domanda di connettività mobile. Il 5G utilizza una combinazione di diverse tecnologie, come la modulazione OFDM (Orthogonal Frequency Division Multiplexing) e l'accesso radio NB-IoT (Narrowband Internet of Things), per fornire una maggiore capacità di trasmissione dati, una velocità di trasferimento più elevata e una latenza più bassa rispetto al 4G.
Per quanto riguarda il WiFi, il 5G e il WiFi sono tecnologie complementari che possono lavorare insieme per offrire una connessione più veloce e affidabile. Il WiFi è una tecnologia di rete locale wireless che utilizza le onde radio per connettere dispositivi ad una rete. Il 5G, d'altra parte, è una tecnologia di rete cellulare che offre una connessione mobile veloce e affidabile. Il protocollo 802.11 del WiFi e il protocollo 5G sono stati sviluppati per funzionare in modo indipendente, ma possono essere utilizzati insieme per offrire una connessione Internet più veloce e affidabile. Ad esempio, alcune implementazioni di 5G, come il 5G FWA (Fixed Wireless Access), utilizzano il WiFi come mezzo per trasmettere i dati in un'area specifica.

Loading…
Cancel
Save