Raspberry PiでWiresharkによるWi-Fiパケットキャプチャ

tsharkによるBLEパケットのキャプチャ」でBLEパケットをtsharkを用いて解析しましたが、Raspberry Pi3にモニタを接続すれば、表示されたディスクトップ上でWiresharkが動作します。また、Scapyを使用したPythonプログラムにより、ARPのパケットをキャプチャします。ARP(Address Resolution Protocol)は、IPアドレスからEthernetのMACアドレスの情報を得られるプロトコルです。Wi-Fiパケットをモニタモードで監視する方法も少し調べたので記述します。 

Wiresharkによるパケット解析

次の手順でWiresharkをインストールできます。

$ sudo apt-get install wireshark

wiresharkは、コンソール端末から次のコマンドで起動します。

$ sudo wireshark

** (wireshark:1836): WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

次のようにWiresharkの実行画面が表示されます。

Wiresharkの実行画面

次のように、ディスクトップのメニューから起動すると、root権限を持たないのでエラーメッセージが表示されます。

Wiresharkの起動

次のようにWiresharkの起動時にエラーダイアログと共に画面が表示されます。

Wiresharkの起動エラー

次のようなエーメッセージがWiresharkの起動時に表示されます。

The capture session could not be initiated on interface ‘wlan0′ (You don’t have permission to capture on that device).
Please check to make sure you have sufficient permissions, and that you have the proper interface or pipe specified.

プログラムを用いたパケット解析

python言語でScapyを使用して、パケット解析を行います。Scapyは、強力なインタラクティブなパケット操作ツール、パケットジェネレータ、ネットワークスキャナ、ネットワーク検出ツール、およびパケットスニファです。それが対話的に、パケットを作成し、ネット上に送信する機能や、様々なパケットを解析するクラスを提供します。

もし、scapyがインストールされていなければ、次のコマンドでインストールします。

$ sudo apt-get install python-scapy

作成したプログラムを次に示します。

from scapy.all import sniff, ARP
 
def arp_monitor_callback(pkt):
  if ARP in pkt and pkt[ARP].op in (1,2):
    return pkt.sprintf("%ARP.hwsrc% | %ARP.psrc%")
 
print sniff(prn=arp_monitor_callback, filter="arp", store=0)

プログラムを実行すると、ARPのMACアドレスとIPアドレスが次のように表示されます。

$ sudo python dash.py
c8:60:00:a3:ad:9a | 192.168.10.100
b8:27:eb:84:4a:ba | 192.168.10.50
b8:27:eb:84:4a:ba | 192.168.10.50
10:66:82:96:26:60 | 192.168.10.1
c8:60:00:a3:ad:9a | 192.168.10.100
b8:27:eb:84:4a:ba | 192.168.10.50
b8:27:eb:84:4a:ba | 192.168.10.50
10:66:82:96:26:60 | 192.168.10.1
c8:60:00:a3:ad:9a | 192.168.10.100
b8:27:eb:84:4a:ba | 192.168.10.50
b8:27:eb:84:4a:ba | 192.168.10.50
10:66:82:96:26:60 | 192.168.10.1
b8:27:eb:84:4a:ba | 192.168.10.50
c8:60:00:a3:ad:9a | 192.168.10.100
8:60:00:a3:ad:9a | 192.168.10.100
b8:27:eb:84:4a:ba | 192.168.10.50
b8:27:eb:84:4a:ba | 192.168.10.50
10:66:82:96:26:60 | 192.168.10.1

取得したMACアドレスは、「MACアドレス検索」を使えば、ベンダーが確認できます。例えば、取得したMACアドレス「b8:27:eb:84:4a:ba」を検索すると、次のように「Raspberry Pi Foundation」と表示されます。

MACアドレス検索

モニタモード

Raspberry Pi3に標準についてくる無線LANとBluetoothのチップ「Broadcom BCM43143」についての情報は、次のコマンドで表示させます。

$ iwconfig
lo        no wireless extensions.

wlan0     IEEE 802.11  ESSID:"xxxxx"
          Mode:Managed  Frequency:2.437 GHz  Access Point: xxxxx
          Bit Rate=65 Mb/s   Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=38/70  Signal level=-72 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

eth0      no wireless extensions.

モニタモードへの変更を試みましたが、次のように、サポートしてないというエラーメッセージが表示されました。

$ sudo iwconfig wlan0  mode monitor
Error for wireless request "Set Mode" (8B06) :
    SET failed on device wlan0 ; Operation not supported.

なお、USBのWi-FiアダプタのWLI-UC-AG300Nは、モニタモードで動作することがわかっています。