Skip to content

This repository provides the implementation of the MobiCom 23 Workshop's (WiNTECH 23) paper-- Wi-BFI

License

Notifications You must be signed in to change notification settings

francescamen/Wi-BFI

 
 

Repository files navigation

Wi-BFI

This is the implementation of the paper Wi-BFI: Extracting the IEEE 802.11 Beamforming Feedback Information from Commercial Wi-Fi Devices.


Wi-BFI is the first open-source tool for retrieving Wi-Fi beamforming feedback angles (BFAs) and reconstructing beamforming feedback information (BFI) in the form of Vmatrices


If you find the project useful and you use this code, please cite our paper:


@inproceedings{10.1145/3615453.3616514,
author = {Haque, Khandaker Foysal and Meneghello, Francesca and Restuccia, Francesco},
title = {Wi-BFI: Extracting the IEEE 802.11 Beamforming Feedback Information from Commercial Wi-Fi Devices},
year = {2023},
isbn = {9798400703409},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3615453.3616514},
doi = {10.1145/3615453.3616514},
pages = {104–111},
numpages = {8},
keywords = {compressed beamforming feedback, beamforming, Wi-Fi, multiple-input multiple-output (MIMO)},
location = {Madrid, Spain},
series = {WiNTECH '23}
}



First, clone the repository with git@github.com:kfoysalhaque/Wi-BFI.git and move into the directory with cd Wi-BFI

Then, Setup the conda environment with conda env create -f wi-bfi.yml

You might also want to install packages like tshark, wireshark, and airmon-ng

sudo apt-get install tshark wireshark aircrack-ng



Wi-BFI Usage

Extract BFAs and reconstruct Vmatrices from traces

If you already have the captured traces of the network (IEEE 802.11ac or 11ax), execute main.py with a few arguments like the following:


python main.py <'file name'> <'standard'>  <'mimo'>  <'antenna-config'>  <'bandwidth'>  <'mac address'>  <'no packet to process'>  <'file to save Vmatrices'>  <'file to save BFAs'>


Example:
python main.py 11ax_SU_4x2_160.pcapng  AX  SU  4x2  160  20:c1:9b:fe:4f:ed  200  V_ax_su_4x2_160  bfa_ax_su_4x2_160


Options for these arguments are noted here:


<'file name'>: name of the trace

<'standard'>: 'AC' / 'AX'

<'mimo'>: 'SU' / 'MU'

<'antenna-config'>: '4x2' / '4x1' / '3x3' / '3x2'/ '3x1'

<'bandwidth'>: '160' *(for AX only)* / '80'/ '40' / '20' *(for AX and AC)*

<'mac address'>: MAC address of the Beamformee from which you want to extract the BFAs and Vmatrices.

<'no packet to process'>: The number of packets that you want to process. *(Should be equal/less than the number of available packets in the trace with the pre-defined MAC address )*

<'file to save Vmatrices'>: Name of the file where you want to save the vmatrices

<'file to save BFAs'>: Name of the file where you want to save the BFAs

Sample plot of the Vmatrices:

Markdown Monster icon


Real-time plot from live capture


I am assuming that you have already installed airmon-ng, tshark etc (the above mentioned packages). It has two steps (I) start live capture and (II) start live plot


(I) Start live capture


Move into the Demo directory and execute angle_collection.sh:

./angle_collection.sh <'directory to save live captures'>  <'network interface with which you want to monitor (maybe your PC's network card)'>  <'bandwidth'> <'update interval'>

Example: Let's assume your phone is communicating with the Access Point (AP) and you want to monitor the BFAs and Vmatrices computed and transmitted by your phone (beamformee) to the AP. Now, if you want to save the live captures in a directory with the name phone, the network card with which you want to monitor is wlp3s0 (for you, it can be your PC's wireless interface), the channel in which AP is tuned-- 36 for this case, bandwidth is 80 MHz and plot update interval is 1 second, then execute the following:

./angle_collection.sh phone wlp3s0 36 80MHz 1

This will start the live capturing of the traces.

(II) Start live plot


To see the live BFAs plot please execute:
python main_live_plot.py <'standard'>  <'mimo'>  <'antenna-config'>  <'bandwidth'>  <'mac address'>  <'live_capture_directory(it should be *phone* as per example)'>  <'interval'>

You can find the demonstration of the live plot here.

For any question or query, please contact Foysal Haque at _haque.k@northeastern.edu

About

This repository provides the implementation of the MobiCom 23 Workshop's (WiNTECH 23) paper-- Wi-BFI

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%