RaspberryPiモデルb +(またはRaspberry Pi)のRTL8188CUSチップセットを使用してUSBWi-Fiドングルの監視モードを有効にしようとしています。
$ lsusb
Bus 001 Device 005: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
$ Sudo iwconfig wlan0 mode monitor
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlan0 ; Invalid argument.
github/raspberrypi/linux/issues/369 によると、カーネルディストリビューションに含まれているがコンパイルされていないrtlwifi/rtl8192cuカーネルモジュールを有効にする必要があります。これには、以下の「ステップ2」で相違するように、一部のファイルに小さな変更を加える必要があります。
そのスレッドで言及されているUSBの問題は、4.1.6以降で解決されているため、rtlwifiドライバーは機能するはずです。
新鮮なラズベリーパイ(モデルB +)で再現する手順...
ステップ0:既存のモジュールとカーネルを最新のものに更新します
$ Sudo apt-get update
$ Sudo rpi-update
$ uname -a
Linux raspberrypi 4.1.7+ #815 PREEMPT Thu Sep 17 17:59:24 BST 2015 armv6l GNU/Linux
ステップ1:ラズビアンカーネルソースを取得し、不足している依存関係を追加します
$ git clone --depth=1 https://github.com/raspberrypi/linux
$ Sudo apt-get install bc lshw
ステップ2:RTL8188CUS(RTL8192)のrtlwifi(カーネル)ドライバーを有効にします
edit linux/drivers/net/wireless/Kconfig
-#source "drivers/net/wireless/rtlwifi/Kconfig"
-source "drivers/net/wireless/rtl8192cu/Kconfig"
+source "drivers/net/wireless/rtlwifi/Kconfig"
+#source "drivers/net/wireless/rtl8192cu/Kconfig"
(Wheezy) edit linux/drivers/net/wireless/Makefile
-#obj-$(CONFIG_RTLWIFI) += rtlwifi/
+obj-$(CONFIG_RTLWIFI) += rtlwifi/
(Jessie) edit linux/drivers/net/wireless/realtek/Makefile
-#obj-$(CONFIG_RTLWIFI) += rtlwifi/
+obj-$(CONFIG_RTLWIFI) += rtlwifi/
ステップ3:カーネルをコンパイルしてインストールします(何時間もかかりました)
カーネル構築ドキュメント から要約されます。
$ cd linux
$ KERNEL=kernel
$ make bcmrpi_defconfig
$ make zImage modules dtbs
$ Sudo make modules_install
$ Sudo cp Arch/arm/boot/dts/*.dtb /boot/
$ Sudo cp Arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
$ Sudo cp Arch/arm/boot/dts/overlays/README /boot/overlays/
$ Sudo scripts/mkknlimg Arch/arm/boot/zImage /boot/$KERNEL.img
ステップ4:再起動
$ Sudo reboot
ステップ5:rtlwifi/rtl8192cuモジュールがロードされていることを確認します
$ lsmod | fgrep rtl8192cu
rtl8192cu 100806 0
rtl_usb 14781 1 rtl8192cu
rtl8192c_common 72091 1 rtl8192cu
rtlwifi 101122 3 rtl_usb,rtl8192c_common,rtl8192cu
mac80211 623281 3 rtl_usb,rtlwifi,rtl8192cu
$
$ lshw
*-network:0
description: Ethernet interface
physical id: 1
bus info: usb@1:1.3
logical name: wlan0
serial: 00:0b:81:94:e9:a3
capabilities: ethernet physical
configuration: broadcast=yes driver=rtl8192cu driverversion=4.1.7+ firmware=N/A link=no multicast=yes
ステップ6:監視モードをアクティブにしてみてください
$ Sudo iwconfig wlan0 mode monitor
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlan0 ; Operation not supported.
私は何を取りこぼしたか?
問題369は、rtlwifiドライバーで動作できることを示しているようです。
Rtlwifiモジュールを再コンパイルしてロードする手順が正しいことがわかりました。問題は、この状況でiwconfigが監視モードを有効化/決定するために機能しないことです。
代わりに、 Steven Gordonによって概説されているiw-iwを使用してモニターモードでWiFiをキャプチャする を使用しましたが、機能しました。
要約する:
ステップ6b:使用可能な物理ネットワークインターフェイスを一覧表示します
$ iw dev
ステップ7:物理インターフェイスがモニタリングモードをサポートしているかどうかを確認します
$ iw phy phy0 info
... lots of stuff ...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* mesh point
* P2P-client
* P2P-GO
... lots more stuff ...
ステップ8:その物理カードにモニタリングインターフェイスを追加します
使用しているハードウェアの「監視」インターフェースを明示的に追加する必要があります。
$ Sudo iw phy phy0 interface add mon0 type monitor
ステップ8:監視を開始します
私の場合、監視を容易にするためにtsharkを使用しており、多くのノイズではなく、いくつかの有用なフィールドを表示しています。
$ Sudo apt-get install tshark
$ Sudo tshark -i mon0 -f 'broadcast' -T fields -e frame.time_Epoch -e wlan.sa -e radiotap.dbm_antsignal -e wlan.fc.type -e wlan.fc.subtype
完了。
まだ興味がある人のために、rtl8192cu
はデフォルトでラズベリーカーネルにコンパイルされるようになりました。 /etc/modprobe.d/blacklist-rtl8192cu.conf
のブラックリストをコメントアウトすることでアクティブ化できます。再起動後にSudo iwconfig wlan0 mode monitor
を実行すると、それ以上問題なく監視モードがアクティブになります。