Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Железо в Linux (http://forum.oszone.net/forumdisplay.php?f=29)
-   -   Wi-fi monitor mode (http://forum.oszone.net/showthread.php?t=266829)

Magikanin2006 25-08-2013 00:07 2207095

Wi-fi monitor mode
 
Добрый день,

Есть Debian (kernel 3.4.43) и usb-wifi карата mw150us (определяется как 0bda:8179 Realtek).
Устройство видится и работает.
Как включить monitor mode ?
"iwconfig wlan0 mode monitor" выдает
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlan0 ; Invalid argument.

AMDBulldozer 25-08-2013 01:00 2207125

Какой модуль ядра обслуживает эту карту? Их существует несколько. В состав ядра включен rtl8192cu в то время как сам realtek распространяет 8192cu. Есть еще 8188eu.
Вообще говоря, такое сообщение об ошибке обычно означает отсутствие поддержки данного режима драйвером. Либо данный драйвер такой режим в принципе не поддерживает, либо он был собран без поддержки этого режима. Хотя, конечно, я не могу дать гарантии, что у ошибки не может быть какой-то другой причины.

P.S. Предыдущее утверждение неверно. Сейчас попробовал выполнить команду iwconfig wlan0 mode master на своём notebook'е с адаптером WiFi на чипе Atheros и получил то же самое сообщение об ошибке, что и Вы. Однако при запуске hostapd адаптер переходит в этот режим. Значит есть и другие причины ошибки, кроме отсутствия поддержки затребованного режима.

Magikanin2006 25-08-2013 01:20 2207135

Драйвер ядра 8188eu. Где посмотреть возможность поддержки нужного режима? Исходники ядра есть, пересобрать смогу.

AMDBulldozer 25-08-2013 02:26 2207148

Цитата:

Цитата Magikanin2006
Драйвер ядра 8188eu. »

Скачал исходники этого драйвера с github. Если, конечно, это тот...
Судя по всему, драйвер не поддерживает режим Monitor. Смотрим подпрограмму установки режима из файла ioctl_linux.c:
Код:

static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
                            union iwreq_data *wrqu, char *b)
{
        _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
        NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
        int ret = 0;
       
        _func_enter_;
       
        if(_FAIL == rfpwrstate_check(padapter)) {
                ret= -EPERM;
                goto exit;
        }

        if (padapter->hw_init_completed==_FALSE){
                ret = -EPERM;
                goto exit;
        }
       
        switch(wrqu->mode)
        {
                case IW_MODE_AUTO:
                        networkType = Ndis802_11AutoUnknown;
                        DBG_871X("set_mode = IW_MODE_AUTO\n");       
                        break;                               
                case IW_MODE_ADHOC:               
                        networkType = Ndis802_11IBSS;
                        DBG_871X("set_mode = IW_MODE_ADHOC\n");                       
                        break;
                case IW_MODE_MASTER:               
                        networkType = Ndis802_11APMode;
                        DBG_871X("set_mode = IW_MODE_MASTER\n");
                        //rtw_setopmode_cmd(padapter, networkType);       
                        break;                               
                case IW_MODE_INFRA:
                        networkType = Ndis802_11Infrastructure;
                        DBG_871X("set_mode = IW_MODE_INFRA\n");                       
                        break;
       
                default :
                        ret = -EINVAL;;
                        RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("\n Mode: %s is not supported  \n", iw_operation_mode[wrqu->mode]));
                        goto exit;
        }
       
/*       
        if(Ndis802_11APMode == networkType)
        {
                rtw_setopmode_cmd(padapter, networkType);
        }       
        else
        {
                rtw_setopmode_cmd(padapter, Ndis802_11AutoUnknown);       
        }
*/
       
        if (rtw_set_802_11_infrastructure_mode(padapter, networkType) ==_FALSE){

                ret = -EPERM;
                goto exit;

        }

        rtw_setopmode_cmd(padapter, networkType);

exit:
       
        _func_exit_;
       
        return ret;
       
}

Обратите внимание, что могут быть установлены 4 режима: Auto, Ad-Hoc, Master и Managed (Infrastructure). Попытка установить любой другой вызывает сообщение об ошибке. Полный список режимов, включая неподдерживаемые:
Код:

static const char * const iw_operation_mode[] =
{
        "Auto", "Ad-Hoc", "Managed",  "Master", "Repeater", "Secondary", "Monitor"
};

Конечно, возможна еще ситуация, что я скачал не те исходники. Как вариант можно попробовать какой-нибудь другой из упомянутых мной драйверов.

ruslandh 25-08-2013 09:18 2207187

В man`е iwconfig вообще-то прописано, что надо выдавать название mode с большой буквы, а не с маленькой, т.е.

iwconfig wlan0 mode Monitor

В man`е iwconfig вообще-то прописано, что надо выдавать название mode с большой буквы, а не с маленькой, т.е.

iwconfig wlan0 mode Monitor

AMDBulldozer 25-08-2013 15:07 2207310

Цитата:

Цитата ruslandh
В man`е iwconfig вообще-то прописано, что надо выдавать название mode с большой буквы »

Этот параметр не зависит от регистра. Для проверки можно выполнить команду с поддерживаемым режимом набранным в другом регистре. Или даже с орфографическими ошибками: "iwconfig wlan0 mode MANAGEDDD". До тех пор пока первые три буквы набраны правильно ("man" для managed, "mas" для master", "aut" для auto) команда не выдаст сообщения об ошибке - остальные она игнорирует.


Время: 15:06.

Время: 15:06.
© OSzone.net 2001-