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

Posted

技术标签:

【中文标题】在 Raspbian 上通过 USB 启用 RTL8188CUS 的监控模式【英文标题】:Enable monitoring mode for RTL8188CUS via USB on Raspbian 【发布时间】:2015-12-18 15:42:34 【问题描述】:

我正在尝试为带有 RTL8188CUS 芯片组的 USB wifi 加密狗在树莓派 b+(或任何树莓派)上启用监控模式。

$ 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 步:获取 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/

第 3 步:编译和安装内核(耗时数小时)

总结自kernel building documentation。

$ 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驱动一起使用?

【问题讨论】:

这个问题可能更适合Super User 或Server Fault StackExchanges,因为它与编程没有直接关系。 我在尝试此操作时忘记考虑的一件小事:在 RaspPi 2 上,第 3 步是不同的(如上面链接的构建文档中所述)。 【参考方案1】:

结果表明重新编译和加载 rtlwifi 模块的步骤是正确的。问题是 iwconfig 在这种情况下无法启用/确定监控模式。

相反,我使用了iw as outlined by Steven Gordon - Capturing WiFi in Monitor mode with iw,它成功了。

总结一下:

步骤 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 现在默认编译到 raspberry 内核中。可以通过注释掉/etc/modprobe.d/blacklist-rtl8192cu.conf中的黑名单来激活它。重启后执行sudo iwconfig wlan0 mode monitor 将激活监控模式,不会有任何问题。

【讨论】:

这很有帮助!!谢谢!

以上是关于在 Raspbian 上通过 USB 启用 RTL8188CUS 的监控模式的主要内容,如果未能解决你的问题,请参考以下文章

rtl-sdr

Raspberry Pi - Raspbian - 运动 - USB 摄像头 - 黑色图像

将 raspbian wheezy USB 驱动程序 ch341.c 编译为 ch341.ko

新唐NUC980使用记录:向内核添加USB无线网卡驱动(基于RTL8188EUS)

RK3399驱动开发 | 17 - RTL8152 USB有线网卡调试(基于linux5.4.32内核)

RK3399驱动开发 | 17 - RTL8152 USB有线网卡调试(基于linux5.4.32内核)