Wi-FiパケットをOver-the-Airでパケットキャプチャして確認する
はじめに
スマホでネットワークパフォーマンスを測定してみたはいいけど、測定時にどんなパケットが流れているんだっけ? を確認してみようと思います。
スマホのWi-Fi接続時のパケットをOver-the-Airでキャプチャして復号し、確認することをめざします。
実行結果
Wi-Fi経由でやり取りされたパケットをキャプチャして確認できました。
パケットキャプチャ結果
環境の準備
OSと端末
- macOS Sequioia 15.3.1
- Xperia 1 IV (Android 14)
macOSはデフォルトでSnifferモード(Wi-Fiで送受信されているパケットを無線でキャプチャするモード)が搭載されているので使っています。
WindowsだとFiddlerあたりが有名なのでしょうか。
あとはCiscoのWLCでWi-Fi構築しているご家庭であれば、WLCでも取得は可能かと思います。
端末は手持ちのスマホを使いましたが、特に機種の制約はありません。
評価環境
以下の図のような構成を作りました。
検証用なのでサーバは何でも大丈夫です。
評価環境
パケットキャプチャ
端末の使用周波数確認
端末側で適当なアプリを使って、端末が接続しているWi-Fiの周波数と帯域幅を確認しておきます。
今回はチャネル44の80MHz幅を使っているようです。
以下のアプリを使いました。
macOSのSnifferモードでのパケットキャプチャ
-
Wi-FiアイコンをOption(⌥)キーを押しながらクリックし、"Open Wireless Diagnostics..."をクリック(日本語だと「ワイヤレス診断」でしょうか)。
Wireless Diagnosticsの起動 -
Wireless Diagnosticsが起動したら、WindowメニューからSnifferを選びます。
Snifferの起動
- Snifferの開始画面が表示されるので、確認した端末の周波数・帯域幅を設定してStartをクリックしてキャプチャを開始します。
Sniffer画面
- キャプチャ中に端末のWi-FiをOFF→ONした上で、サーバに向けて適宜通信を実施(サーバのWebページを読み込む等)します。
- Snifferを停止すると、
/var/tmp
にキャプチャファイル(.pcap)が生成されます。
キャプチャ結果の確認
pcapファイルをWiresharkで開いてみると、Wi-Fiのパケットがキャプチャされていることがわかります。
Beaconフレームを見ると、チャネル(44)であったり、IEEE802.11ac VHT (Wi-Fi 5)対応であったりと色々と読み取れますが、ここでは割愛します。
この時点では、Wi-Fiパケットは暗号化されており中身の確認はできません。
パケットの確認
WiresharkでWi-Fiパケットを復号するには、
設定→プロトコル→IEEE802.11と進み、"Enable decryption"にチェックを入れます。
その後、Decryption keysの"Edit..."ボタンを押します。
そうすると復号鍵入力画面になるので、"+"ボタンを押して鍵エントリを追加します。
Key typeはWEPを使っていればwep
、WPA2を使っていればwpa-pwd
を設定し、Keyに今回端末が接続していたWi-Fiの接続用パスワードとSSIDをコロンで繋いで入力します (password:SSID
)。
OKボタンで設定を確定させてメイン画面に戻ると、端末がWi-Fi経由で通信したパケットが見えるようになっています。
パケットキャプチャ結果
おわりに
Wi-Fiに接続しているスマホがWi-Fi経由で通信しているパケットを、Over-the-Airでキャプチャして確認できることがわかりました。
検証環境において、Wi-Fiで何か問題が起きていて通信が遅くなっているのかそうでないのか、といった切り分けに役立ちそうです。
Discussion