2016年2月20日土曜日

WLI-UC-GNM2でmonitor modeを使う(Debian Jessie版)

以前WLI-UC-GNM2でmonitor modeが使えるようになるまで
を投稿しましたが、Debian Jessieでは若干手順の修正が必要だったため再度投稿して忘備録にしておきます。 
かなり抜けている内容でしたしね。。。

使用しているチップセットのおさらいから。
https://wikidevi.com/wiki/Buffalo_WLI-UC-GNM2
使用しているチップセットはRT8070のようです。

RalinkはMediaTekに買収されたので、MediaTekのサイトよりドライバをダウンロード
http://www.mediatek.com/jp/downloads1/downloads/
 RT8070/ RT3070/ RT3370/ RT3572/ RT5370/ RT5372/ RT5572 USB USB    2012/10/22     v2.6.1.3 Linux
のリンクより名前とメールアドレスを入力してダウンロード。

参考元
Elecom WDC-433SU2Mで802.11acな通信を実現したかった

ダウンロードしたドライバファイルDPO_RT5572_LinuxSTA_2.6.1.3_20121022.tar.bz2を展開
(2016/2/19時点です。LinuxSAT以降のバージョンや日付は今後変更される可能性があります)

下準備

以降の作業はrootユーザーで行います
gcc、make、カーネルヘッダファイル、wireless-tools(iwconfigを使うため) tcpdumpのインストール
# apt-get install -y gcc make linux-headers-$(uname -r) wireless-tools tcpdump

VID PIDの確認
WLI-UC-GNM2を接続して
# lsusb
うちの環境だとこんな感じ。
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 007: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 004: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ソースの修正

以下の通り。

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/RT2870STA.dat
オリジナル 修正版
1#The word of "Default" must not be removed 1#The word of "Default" must not be removed
2Default 2Default
.3CountryRegion=5  3CountryRegion=1 
4CountryRegionABand=7 4CountryRegionABand=7
.5CountryCode=  5CountryCode=JP 
6ChannelGeography=1 6ChannelGeography=1
.7SSID=11n-AP  7SSID= 
8NetworkType=Infra 8NetworkType=Infra
.21AuthMode=OPEN  21AuthMode=WPA2PSK 
22EncrypType=NONE  22EncrypType=AES 

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/common/rtusb_dev_id.c
lsusbで取得したVID、PIDを追記
オリジナル 修正版
105#endif /* RT2870*/  105#endif /* RT2870*/ 
106#ifdef RT3070 106#ifdef RT3070
. 107    {USB_DEVICE(0x0411,0x01ee)}, /* WLI-UC-GNM2 */ 
107    {USB_DEVICE(0x148F,0x3070)}, /* Ralink 3070 */  108    {USB_DEVICE(0x148F,0x3070)}, /* Ralink 3070 */ 

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/os/linux/config.mk

オリジナル
修正版
24# Support Wpa_Supplicant 24# Support Wpa_Supplicant
25# i.e. wpa_supplicant -Dralink 25# i.e. wpa_supplicant -Dralink
.26HAS_WPA_SUPPLICANT=n  26HAS_WPA_SUPPLICANT=y 
27 27
.35HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n  35HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y 
36 36
952    # Linux 2.6 952    # Linux 2.6
.953    EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include  953    EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include -Wno-date-time 
954    endif 954    endif

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/os/linux/rt_linux.c
使用するカーネルバージョンによっては逆に修正したらダメかも。
Debian Jessieでは必要だがwheezyでは不要。

オリジナル
修正版
1136#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) 1136#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
1137        pOSFSInfo->fsuid = current->fsuid; 1137        pOSFSInfo->fsuid = current->fsuid;
1138        pOSFSInfo->fsgid = current->fsgid; 1138        pOSFSInfo->fsgid = current->fsgid;
1139        current->fsuid = current->fsgid = 0; 1139        current->fsuid = current->fsgid = 0;
1140#else 1140#else
.1141        pOSFSInfo->fsuid = current_fsuid(); 1141        pOSFSInfo->fsuid = current_fsuid().val;
1142        pOSFSInfo->fsgid = current_fsgid(); 1142        pOSFSInfo->fsgid = current_fsgid().val;
1143#endif 1143#endif

コンパイル

# cd DPO_RT5572_LinuxSTA_2.6.1.3_20121022
# make

カーネルモジュールと設定ファイルの導入

# cp os/linux/rt5572sta.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/
# mkdir -p /etc/Wireless/RT2870STA
# cp RT2870STA.dat /etc/Wireless/RT2870STA/

ブラックリスト追加

# gedit /etc/modprobe.d/blacklist.conf
以下を追加、もしくは新規で保存。その後再起動
blacklist rt2800usb


モジュールロードの確認

# lsmod | grep rt5572sta
下記のようにロードされていればOK
rt5572sta             784165  1
usbcore               195427  6 uhci_hcd,ehci_hcd,ehci_pci,usbhid,rt5572sta,xhci_hcd

動作確認

# ifconfig
一覧にra0があればOK
# iwlist ra0 scan
周囲のSSIDが表示されていればOK。たまにスキャンできない場合があるので
その時は抜き差しすると治ったり・・・。

monitor modeへの変更

# iwconfig ra0
ra0       Ralink STA  ESSID:""  Nickname:"RT3070STA"
          Mode:Auto  Frequency=2.412 GHz  Access Point: Not-Associated  
          Bit Rate:1 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=10/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

デフォルトではAutoになっている。
monitor modeへ変更する。
# iwconfig ra0 mode monitor
# iwconfig ra0
ra0       Ralink STA  ESSID:""  Nickname:"RT3070STA"
          Mode:Monitor  Frequency=2.412 GHz  Access Point: Not-Associated  
          Bit Rate:1 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=10/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

モニタモードへ変更できた。チャンネルを変更する。
# iwconfig ra0 channel 13
# iwconfig ra0
ra0       Ralink STA  ESSID:""  Nickname:"RT3070STA"
          Mode:Monitor  Frequency=2.472 GHz  Access Point: Not-Associated  
          Bit Rate:1 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=10/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

パケットをダンプしてみる

# tcpdump -i ra0 -e
-eオプションでヘッダの情報も見れるようになります。
例としてこちらの画像はスマホのWifi Analyzerを動かしている時のパケットをキャプチャしたもの。
SA:b0~から始まるのは動かしているスマホのMACアドレスです。