在Raspbian上通过USB启用RTL8188CUS的监控模式

11
我正在尝试在树莓派B+(或任何树莓派)上,为一个带有RTL8188CUS芯片组的USB wifi适配器启用监视模式。
$ 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,您需要启用kernel distribution中包含但未编译的rtlwifi / rtl8192cu内核模块。这需要对一些文件进行微小修改,如下面的“ STEP 2”所示。
该帖子中提到的USB问题已在4.1.6+中解决,因此rtlwifi驱动程序应该可以正常工作。
在新的树莓派(型号B+)上重新创建步骤... STEP 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:获取Raspbian内核源代码并添加缺少的依赖项

$ 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/

第三步:编译和安装内核(需耗费多个小时)

来自内核构建文档的总结。

$ 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

STEP 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驱动程序一起使用?


1
这个问题可能更适合在超级用户服务器故障 StackExchanges上提问,因为它与直接编程无关。 - Mr. Llama
当我尝试这个时,我刚刚忘记考虑一件小事:在RaspPi 2上,第3步是不同的(如上面链接的构建文档所述)。 - luckyrumo
2个回答

11

原来重新编译和加载rtlwifi模块的步骤是正确的。问题在于iwconfig在这种情况下无法启用/确定监视模式。

相反,我使用了iw,如Steven Gordon所述 - 使用iw捕获WiFi监视模式,并且它起作用了。

总结一下:

步骤6b:列出可用的物理网络接口

$ iw dev

第七步:确定物理接口是否支持监控模式。
$ 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

完成。


2

如果还有人感兴趣,现在 rtl8192cu 已经默认编译到树莓派内核中了。可以通过注释掉 /etc/modprobe.d/blacklist-rtl8192cu.conf 中的黑名单来激活它。在重启后执行 sudo iwconfig wlan0 mode monitor 就可以无需进一步操作地激活监控模式。


1
这很有帮助!谢谢! - vs4vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接