🛜

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あたりが有名なのでしょうか。
https://zenn.dev/dijk/articles/9c1ec4e3a963cb

あとはCiscoのWLCでWi-Fi構築しているご家庭であれば、WLCでも取得は可能かと思います。

端末は手持ちのスマホを使いましたが、特に機種の制約はありません。

評価環境

以下の図のような構成を作りました。
検証用なのでサーバは何でも大丈夫です。


評価環境

パケットキャプチャ

端末の使用周波数確認

端末側で適当なアプリを使って、端末が接続しているWi-Fiの周波数と帯域幅を確認しておきます。
今回はチャネル44の80MHz幅を使っているようです。

以下のアプリを使いました。
https://play.google.com/store/apps/details?id=abdelrahman.wifianalyzerpro

macOSのSnifferモードでのパケットキャプチャ

  1. Wi-FiアイコンをOption(⌥)キーを押しながらクリックし、"Open Wireless Diagnostics..."をクリック(日本語だと「ワイヤレス診断」でしょうか)。

    Wireless Diagnosticsの起動

  2. Wireless Diagnosticsが起動したら、WindowメニューからSnifferを選びます。


Snifferの起動

  1. Snifferの開始画面が表示されるので、確認した端末の周波数・帯域幅を設定してStartをクリックしてキャプチャを開始します。


Sniffer画面

  1. キャプチャ中に端末のWi-FiをOFF→ONした上で、サーバに向けて適宜通信を実施(サーバのWebページを読み込む等)します。
  1. 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