MasaのITC Life

夢は起業家!全てにおいて凡人だけど頑張ることだけはいっちょ前!

やってみた系/その他

WiresharkでIEEE802.11フレームをキャプチャ―する方法

投稿日:2019年9月3日 更新日:


まず初めにWi-Fiとは、

IEEE802.11規格を無線LAN通信に採用した

ブランド名のことです。

※通信規格名ではないです。



この記事ではWi-Fiを使った通信を

"無線LAN通信"と表現しています。



Wiresharkでは、無線LANの中身を

キャプチャすることが出来ます。


例えば以下の画像は、

windowsで無線LANの通信をキャプチャした様子です。


ここで疑問に思う点があります。


よく見ると、windowsで

キャプチャした無線LAN通信は、

有線の通信規格である

Ethernetの規格がMAC層に表示されています。




今回キャプチャした無線通信には、

IEEE802.11規格が表示されていなければおかしいはずです。



なぜWindowsのWiresharkでIEEE802.11フレームをキャプチャ出来ないのか



実はこれは、

wiresharkで無線パケットをキャプチャしたときに、

windows OS側で、IEEE802.11 MAC フレーム等から、

必要な情報を抽出して、疑似的に

Ethernet規格に合わせて表示しています。




なので、単にwiresharkで

無線LANパケットをキャプチャすると、

Ethernetが表示されて、

「あれおかしいな?!」ということに

なってしまいます。


これを解決するために、

"モニターモード" という機能を使います。

モニターモードでキャプチャすることで、

IEEE802.11フレームをキャプチャすることが出来ます。




モニターモードは、

wireshark特有のモードではなく、

無線アダプターのモードの一つです。
(厳密には無線LANアダプターに内蔵されているチップセット)



無線LANのネットワークに所属せずに、

届いた無線LAN電波を

ひたすら取得する無線LANアダプターのモードです。



基本的にノートPC内蔵の無線LANアダプターには、

このモニターモードの機能は付いておりません。



なので、新しくUSB接続する無線LANアダプターを購入する必要があります。



ちなみにもう少し言うと、

windows版のwiresharkは、

WinpcapというPCAPを用いているため、


(※PCAPとはキャプチャしたパケットを
解析して可視化するライブラリのこと。)


モニターモードを使える無線LANアダプターを使っても、

IEEE802.11フレームをキャプチャすることが出来ません。



しかし一応、windowsでも

IEEE802.11フレームを取得する手段があります。



"AirPcap" というモニターモードで

パケットキャプチャできる

ソフトウェア&無線LANアダプターが販売されています。

ところがとてもお高いです。



Linux版のwiresharkは、

libpcapを使ってパケットキャプチャするため、

モニターモードで無線LANアダプターを使えば、

IEEE802.11をキャプチャ出来ます。




それに無線アダプターも比較的安価で手に入ります。

したがって、Linuxを使うことをお勧めします。




モニターモードで動かせる無線LANアダプターを

紹介しているサイトがありますので、

そちらを載せておきます。



Linuxの場合だと、

ノートPC内蔵のwlanアダプター(厳密にはチップセット)が

対応していれば、ドライバー次第では

モニタモードにすることが出来る場合があります。



とはいえど対応していないことが多く、

デフォルトのドライバーを適切なドライバーに入れ替えて、

モニターモードを起動させる方法もあるようです。

しかし、ネット上で適切なドライバを探すのは困難かと思われます。

wlanアダプターに

内蔵されているチップセット (ハードウェア) と

それを動かすドライバ(ソフトウェア) の両者が

モニターモードに対応して、初めて

モニターモードで起動させることが出来ます。



前置きが長くなってしまいましたが、

Linux版のwiresharkで

IEEE802.11フレームをキャプチャしてみます。



IEEE802.11 RadiotapヘッダーとMACフレームをパケットキャプチャしてみる!



AirPcapは高いので、Kali Linux で行っていきますが、Ubuntuなどのその他Linuxでも同様の手順です。



ちなみに、Virtual Box上のLinu環境で行う場合は、USB2.0以上はデフォルトでは認識しません。無線LANアダプターをVirtual Box上のLinuxで認識させるために、まずVirtual Box上のUSB設定を行なわなければいけないので、ご注意下さい。

https://wireless-network.net/virtualbox-ubuntu-usb/





準備が整ったら、wiresharkを起動させます。左上の方に以下の画像のように、"キャプチャオプション" があるのでクリックします。



キャプチャオプションの画面サイズは、おそらく小さいかと思います。なので、横に引き伸ばすと、以下のようになります。その中に、モニターモードと書かれた項目のところで、モニターモードを使用する無線LANインタフェースにレ点を打ちます。そして、キャプチャする無線LANインタフェース (私の場合はwlan0) を選択して、右下の "開始" をクリックします。



以下のようにIEEE802.11フレームのキャプチャが成功しているのが、分かります。ちなみにAPは、102ms (約0.1秒) ごとに一回のペースでビーコンフレームを送信するので、すごい勢いでキャプチャされていきます。



ちなみにモニターモードでwiresharkを動かすと、無線LANアダプターはモニタモードのままなので、AP (無線LANルータ) につなげれません。


モニターモードは、有線のプロミスキャスモードとは違って、自分がそのネットワークに所属せずに、自分宛以外のパケットもキャプチャしてしまうメリットがあります。一方でそのままモニターモードのまま放置しておくと、CPUの負荷と、いざネットワークにつなげようとしたときに、つながらないので、しっかりと通常モード (Managed) に戻しましょう。




やり方はPC再起動させるか、以下のコマンドをたたきます。

ifconfig wlan0 down
iwconfig wlan0 mode managed
ifconfig wlan0 up



wlan0のところは、お使いの環境のインターフェース名を入れます。Managedが私たちが普通に使う通常モードのことです。



今回はここまでです。

最後まで読んでいただきありがとうございました。




IEEE802.11パケットが分かれば作れる!
実際にC言語でビーコン(802.11)を送信してみた


・こんなものキャプチャしてみる!
WiresharkでUSBパケットをキャプチャしてみた


-やってみた系/その他

Copyright© MasaのITC Life , 2023 All Rights Reserved Powered by STINGER.