1. 程式人生 > >樹莓派無線網卡監聽模式

樹莓派無線網卡監聽模式

dbm mac ada .com enc 方案 如果 說明 奇技淫巧

Background

項目裏需要在樹莓派上運行抓包程序,需要使用無線網卡,進入監聽模式,進行抓包;

默認的無線網卡是不支持monitor模式的,支持monitor模式的網卡列表可以在這裏查到

於是我選了兩個RTL8188CUS的USB無線網卡,足夠便宜,而且京東上找得到(吐槽:京東上好多無線網卡都不寫芯片組型號,還有很多是不支持monitor模式的MTK7610,而且搜索芯片組型號基本搜不到商品,但是京東可以開發票報銷啊,而且物流快啊,淘寶藥丸,想要買網卡的同學上京東搜RTL8188能搜到網卡的,跟客服確認一下是不是RTL8188CUS就行,吐槽完畢)

Ubuntu 試水

在ubuntu上插入USB接口,ifconfig一下,可以看到多了一個設備wl********,名字太長了,重啟一下系統,它會變成wlan0或wlan1(如果有多個無線網卡的話),這樣方便操作一點

這裏需要註意區分哪個卡是自己插上去的新卡,在終端輸入iwconfig,如果wlan1 Nickname是“WIFI@REALTEK”,wlan1就是我們新買的RTL8188啦,

pi@raspberrypi:~ $ iwconfig
eth0      no wireless extensions.

wlan1     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Auto  Frequency=2.412 GHz  Access Point: Not-Associated   
          Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

lo        no wireless extensions.

wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

接著嘗試關掉wlan1,讓它進入待命狀態,再設置監聽模式,再啟動wlan1

pi@raspberrypi:~ $ sudo ifconfig wlan1 down
pi@raspberrypi:~ $ sudo iwconfig wlan1 mode monitor
pi@raspberrypi:~ $ sudo ifconfig wlan1 up

沒有報錯,說明這個網卡確實支持monitor模式,也可以再執行iwconfig,可以看到wlan1的Mode從Auto變成了monitor。

樹莓派翻車

然而到了raspbian(我試過Ubuntu mate也一樣)上,同樣執行

pi@raspberrypi:~ $ sudo iwconfig wlan1 mode monitor
Error for wireless request "Set Mode" (8B06) :
    SET failed on device wlan1 ; Invalid argument.

去網上搜這個問題,回答都是很多年前的了,很少有在樹莓派3B上試過的方案,最靠譜的一個答案在這裏,在樹莓派2B+的年代,raspbian禁用了rtlwifi驅動,因為它再raspbian上不穩定,對於rtl8188cus,會去使用rtl8192cu的驅動(恩,這是正確的做法),但是在raspbian上,一旦使用了rtl8192cu的驅動,網卡就開不了監聽模式,所以需要重新編譯raspbian內核,將rtlwifi驅動打開,將rtl8192驅動關掉。

然而!在2017年的現在,我下載了raspbian的內核源碼,發現官網已經把rtlwifi的驅動打開了!並且在這種情況下還是不能使用monitor模式!

峰回路轉

在網上繼續搜索有沒有什麽奇技淫巧可以解決這個問題,忽然發現這個工程

在這個工程裏編譯了linux3.6上的rtlwifi,替換到raspbian的驅動裏邊去

意識到,既然raspbian現在已經編譯了rtlwifi和rtl8192兩個驅動,那麽就應該手動關掉rtl8192的驅動,手動啟用rtlwifi的驅動!

  • 首先查看自己的內核版本
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux
  • 確認是否確實編譯了rtlwifi的驅動
pi@raspberrypi:/lib/modules/4.9.41-v7+/kernel/drivers/net/wireless/realtek $ ls
rtl818x  rtl8192cu  rtl8xxxu  rtlwifi

可以看到有rtlwifi

  • 然後檢查當前使用的驅動
pi@raspberrypi:~ $ lsmod | grep 8192
8192cu                582217  0
cfg80211              543091  2 8192cu,brcmfmac

顯示的是8192cu,確實是rtl8192cu的驅動,如果是使用rtlwifi的驅動,顯示的應該是rtl8192cu

  • 手動禁用rtl8192驅動
pi@raspberrypi:~ $ sudo depmod 4.9.41-v7+
pi@raspberrypi:~ $ sudo rmmod 8192cu
pi@raspberrypi:~ $ sudo modprobe rtl8192cu
  • 再嘗試將網卡設為監聽模式
pi@raspberrypi:~ $ sudo ifconfig wlan1 down
pi@raspberrypi:~ $ sudo iwconfig wlan1 mode monitor
pi@raspberrypi:~ $ sudo ifconfig wlan1 up

一切正常!

總結

想要在樹莓派3B+上使用RTL8188CUS開啟無線網卡監聽模式,就把rtl8192的驅動禁用掉,把rtlwifi的驅動開起來就好了

樹莓派無線網卡監聽模式