Nexmon環境構築手順 for RaspberryPi3/4B
ここでは,RaspberryPi3/4BにNexmonをインストールし,実際にCSIを取得するまでの一連の流れを説明します.
Nexmon
Cypress/Bloadcom製のWI-Fiチップ向けに開発された,オープンソースCSI収集用ファームウェアパッチです.
参考にしたサイト
RaspberryPiの初期設定
イメージファイルの書き込み
- バージョン :Bullseye
- アーキテクチャ:armhf(ARM hard float)
- タイプ :Lite版
- リリース日 :2022年1月28日
- ダウンロードURL:
https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2022-01-28/2022-01-28-raspios-bullseye-armhf-lite.zip
Wi-Fi/SSHの設定
この記事では詳しく触れませんが,各自設定していただくことを強く推奨します.
付録:公開鍵認証を使用したSSH接続
$ cd ~
$ mkdir .ssh
$ touch .ssh/authorized_keys
$ nano .ssh/authorized_keys
// 自身の公開鍵(.pub)をコピペ
$ sudo reboot
Nexmonのインストール
- Nexmon_csiのバイナリファイルからインストールスクリプトを実行(2分程度)
$ sudo curl -fsSL https://raw.githubusercontent.com/nexmonster/nexmon_csi_bin/main/install.sh | sudo bash
$ sudo reboot
これ以降,無線SSH接続ができなくなるため,有線SSH接続に切り替える(初めから有線SSH接続で行うこと推奨します)
CSI収集テスト
通信環境の確認
- Wi-Fiアナライザなどを使用して,観測したい無線通信チャネルと帯域幅を確認する
- mcpコマンドで,base64でエンコードされたパラメータ文字列を作成する
$ sudo mcp -C 1 -N 1 -c {チャネル}/{帯域幅}
ここで生成された文字列をコピーしておくことを推奨
// mcpで指定できるオプションは-hで一覧表示可能
$ sudo mcp -h
CSI収集開始
- パラメータ文字列を設定し,モニターモードインターフェース(mon0)を追加する
$ sudo ifconfig wlan0 up
$ sudo nexutil -Iwlan0 -s500 -b -l34 -v{mcpで生成した文字列}
$ sudo iw dev wlan0 interface add mon0 type monitor
$ sudo ip link set mon0 up
- tcpdumpコマンドでCSIの収集を開始する
//基本的な実行コマンド
$ sudo tcpdump -i wlan0 dst port 5500
//書き込みファイルの指定
$ sudo tcpdump -i wlan0 dst port 5500 -vv -w {任意のファイル名}.pcap
//指定パケット数だけ書き込みファイルに出力
$ tcpdump -i wlan0 dst port 5500 -vv -w {任意のファイル名}.pcap -c {観測したいパケット数}
//例:1000パケットに達するまで観測し,output.pcapファイルとして出力する
$ sudo tcpdump -i wlan0 dst port 5500 -vv -w output.pcap -c 1000
mcpコマンドで更にオプションを追加することで特定MACアドレスでフィルタリングすることも可能です.
// MACアドレスでフィルタリングするオプション(-m)の使用方法
$ sudo mcp -C 1 -N 1 -c {チャネル}/{帯域幅} -m XX:XX:XX:XX:XX:XX
- 以降は,mon0インターフェースを追加する部分からコマンドを打ち込みなおす
付録:CSIデータ(.pcap)から振幅情報をCSVファイルに出力する
Nexmonで収集されたCSIデータはpcapファイルとしてローカルに保存されます.
今回は,そこから振幅成分(RSSI)を抽出して,CSVファイルとしてデコードするPythonコードを作成しましたので,ご紹介しておきます.(Gitリポジトリは以下です.)
使用方法
// GitHubリポジトリをクローン
$ git clone https://github.com/haradakaito/Nexmon_Setup.git
// 実行方法:srcフォルダに移動してmain.pyを実行
$ cd src
$ python main.py
- 事前に,pcapfilesディレクトリ下に任意のpcapファイルを保存しておくこと
- main.pyの実行パラメータを適切なパラメータに適宜変更すること(ファイル名,帯域幅,出力したい行数)
※出力したい行数については,"開始行-終了行"という形式で入力(例:0-10は0行目から10行目まで出力)
ポートフォリオ紹介