今これをスタバで読んでいるとしたら、そこの空間では1秒間に10回の頻度で「ビーコン(Beacon)」と呼ばれるパケットが飛び交ってるはず。スタバのAP(無線LANアクセスポイント)がビーコンを発信しているから。
例えば我が家のAPのビーコンを一つを捕まえて中身を見てみると・・・
一番上の行に「IEEE 802.11 Beacon frame」とある。
ビーコンってのは船舶の灯台みたいに「ピコン・・・ピコン・・・」っと定期的にAPが「私はここにいます・・・私はこういうやつです・・・」っと周りに知らせるためにある。私たちは気づかないけど、APはそういう信号を常に出している。
せっかくだから、ビーコン、もうちょっと詳しく見てみよう。
ビーコンは、特定の相手に送るわけじゃないんで Receiver address (宛先アドレス)はブロードキャスト、つまり不特定多数宛を示すアドレス「ff:ff:ff:ff:ff:ff」になってる。
また、送り主のAPのMACアドレス(消してある部分)が Transmitter address の項目などに書いてある。
・・・というわけで、こういうWiFi電波のパケットの波の中で私たちはのんびりコーヒーを飲みながらスマフォをいじってるわけです・・・。
どうやってWiFiパケットを見るか?
WiFiってなんなのかというと、「IEEE 802.11」という規格のパケット(厳密にはフレームと呼ぶ)のやり取りで成り立っているプロトコール。
802.11パケットを見るには、自分のパソコンのWiFiアンテナで802.11パケットを捕らえ、ドライバーからアプリケーションに渡し、内容を解析する、とういのが一般的。そして、パケットを見るアプリケーションの中でも一番有名なのがWireshark。
!!!注意事項!!!
802.11に限らず、ネットワーク上のパケットを見る行為をパケットキャプチャ(パケット捕獲?)という。自分宛以外のパケットを見ると、それは盗聴にあたる。違法行為である可能性がある。
最近こういう事件があった。
電波法など詳しくないんで何とも言えないけれど、公共無線LANでの実験はやらない方がいいと思う。実験は自己責任でどうぞ。
パケットキャプチャーのセットアップ
私が今回Windows上でパケットキャプチャーしたセットアップは以下のとおり。
- USB無線LANアダプター:Netgear A6200 (Broadcomチップセット)
- モニターモードをサポートするドライバー:Acrlyric WiFi 付属ドライバー
- パケットの分析用アプリケーション:Wireshark
以下、その手順
(1) 無線LANアダプター
何を使うかは、何をやりたいかによって変わる。私は「モニターモード」でやりたかったんで、Acrylicが公開しているモニターモードが可能なUSBアダプターの一覧からNetgear A6200を選んだ。
ちなみにモニターモードとは?
自分のアダプターはどのAPとも接続されていないんだけど、空中に飛び交う802.11パケットを拾える状態。
逆に自分のアダプターが、ある特定のAPに接続されている状態で、さらに別の人宛てのパケットをも拾っている状態を「プロミスキャスモード」という。802.11パケットの勉強のためなら「プロミスキャスモード」で十分。
アダプターの接続は普通にUSBポートに刺す。
(2)モニターモードをサポートするドライバーをインストール
Acrylic WiFi をインストールする際に、オプションでモニターモードをサポートするドライバーをインストールできます。モニターモードでなくてもいいなら Acrylic WiFiのメインのアプリケーションのみのインストールでOK。
(3)パケットキャプチャーを実行する
私が試した限りでは、次の手順で802.11パケットをキャプチャーできる。
まず、Acrylic WiFi をスタートする。メニューバーの中央からやや右側に「NDIS interface」というドロップダウンメニューがあるので、そこから無線LANアダプターを選ぶ。
さらに「Mode」を「Monitor」にしてモニターモードにしておく。
「スタート」ボタンのすぐ右に数字があって、そこをクリックすると、どのチャンネルの電波を拾うか、を設定できるダイアログが開く。
私は2.4GHz帯のチャンネル(1、6、11など)を監視することに(これはデフォルト設定だった)。
「スタート」ボタンを押すとパケットキャプチャーが始まる。
まず、Acrylic でどのAPの電波を拾っているかを確認。下ではチャンネルは1、6、などを拾っているのが見える。信号の強さ(Rssi)やデータ転送速度も見える。
Acrylic WiFi では(少なくとも最新のVersion2.0)では残念ながらパケットそのものを解析することは出来ない(お金を払ってPROエディションにすれば出来る機能)。
Acrylic は開いたままで、Wiresharkでパケットキャプチャーをすれば、Wiresharkでパケットの内容を詳しく調べることが出来る。
Wireshark をスタートしたら、キャプチャー対象のインターフェイスを選ぶ。
Acrylic をインストールした時に、モニターモードをサポートするNDISドライバーをインストールしていたんで、使用しているNETGEARの無線LANアダプター用のNDISインターフェイスが表示されている。
それを選ぶ。
Wireshark でパケットキャプチャーをスタートすると、キャプチャーされた802.11パケットが続々と流れてくる。
Acrylic側を見てみると、チャンネルが1,2,3、・・・13とサイクルしているのが確認できる。ことなるチャンネルでパケットを拾っているわけだ。
例えば3、
例えば8
それに合わせて Wireshark 側でも異なるチャンネルのパケットがキャプチャーされているのが分かる。下のスクショだと上の方に周波数、2437(2.437GHz)、チャンネルで言うと「6」、のパケットが6つほど見え、すぐあとに2.442GHz(チャンネル7)のパケットが一つみえる。
特定のチャンネルだけをモニターしたいなら、先ほどのチャンネル設定ダイアログで、一つのチャンネルに固定する。
これで802.11パケットのキャプチャーが出来るようなった。
(4)キャプチャーしたパケットを解析する
これはパケットをキャプチャーする目的に寄るけど、Wiresharkで解析するならいくつかのよくある操作があるので紹介する。
(4-1)特定の種類のパケットのみを見る(フィルターを使う)
802.11のパケットの種類は大まかに三つの type がある。
- Management frames: APと接続したり切断したり認証したり・・ (0)
- Control frames: 他のフレームを運ぶため。ヘッダーしかない (1)
- Data frames: 実際にデータを含むパケット (2)
例えば Management frames だけを表示したい場合は Filter に
wlan.fc.type == 0 (解説:WLANのFrameControlヘッダのtypeフィールドが0)
と指定して「Apply」ボタンを押すと、Management frame だけが表示される。
同様にして、Control frame と Data frame のみを表示するには
とすればよい。
また、それぞれの type には、さらに細かく分けた subtype がある。
例えば Management frame の一つである Beacon frame のsubtype は8なので
とすれば Beacon frame のみ表示される。
802.11パケットの type や subtype の実際の値はネットで検索すれば出てくる。下は「Wireshark 802.11 Display Filter Field Reference」という便利なPDFが合ったんで、そこから抜粋した。Beacon の subtype が8であることが確認できる。
(4-2)特定のインターフェイス宛のパケットのみ見る
まず、自分の無線LANアダプターのMACアドレスを調べる。コンソールで getmac コマンドを実行する。
アダプターのMACアドレスが分かったらその値をWireshark でFilterにかける。
wlan.ra == 88-00-00-00-00-00 (解説:WLANのReceiveAddressが88-00-00-00-00-00)
(4-3)特定のインターフェイス宛のパケットで、なおかつ特定の種類のパケットのみ見る
二つの条件をANDでつなぐ。
下は、この無線LANアダプターが受け取ったManagement frame を表示している。Probe Requst に対する Probe Response が届いたことが分かる。
こういう操作で、キャプチャーした大量のパケットから見たいものだけをフィルターをかけて表示し、それぞれのパケットの内容を詳しく見ていく、というのが一般的な解析の手順だといえる。
まとめ
WiFiの正体である802.11のパケットキャプチャーはハードウェアさえあれば簡単にできる。
パケットの解析はWiresharkで行うのが一般的。
802.11のパケットの意味や内容などは私もただいま絶賛勉強中!