Показать полную графическую версию : Wi-fi monitor mode
Magikanin2006
25-08-2013, 00:07
Добрый день,
Есть 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
Какой модуль ядра обслуживает эту карту? Их существует несколько. В состав ядра включен rtl8192cu в то время как сам realtek распространяет 8192cu. Есть еще 8188eu.
Вообще говоря, такое сообщение об ошибке обычно означает отсутствие поддержки данного режима драйвером. Либо данный драйвер такой режим в принципе не поддерживает, либо он был собран без поддержки этого режима. Хотя, конечно, я не могу дать гарантии, что у ошибки не может быть какой-то другой причины.
P.S. Предыдущее утверждение неверно. Сейчас попробовал выполнить команду iwconfig wlan0 mode master на своём notebook'е с адаптером WiFi на чипе Atheros и получил то же самое сообщение об ошибке, что и Вы. Однако при запуске hostapd адаптер переходит в этот режим. Значит есть и другие причины ошибки, кроме отсутствия поддержки затребованного режима.
Magikanin2006
25-08-2013, 01:20
Драйвер ядра 8188eu. Где посмотреть возможность поддержки нужного режима? Исходники ядра есть, пересобрать смогу.
AMDBulldozer
25-08-2013, 02:26
Драйвер ядра 8188eu. »
Скачал исходники этого драйвера с github (https://github.com/liwei/rpi-rtl8188eu). Если, конечно, это тот...
Судя по всему, драйвер не поддерживает режим 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
В man`е iwconfig вообще-то прописано, что надо выдавать название mode с большой буквы, а не с маленькой, т.е.
iwconfig wlan0 mode Monitor
В man`е iwconfig вообще-то прописано, что надо выдавать название mode с большой буквы, а не с маленькой, т.е.
iwconfig wlan0 mode Monitor
AMDBulldozer
25-08-2013, 15:07
В man`е iwconfig вообще-то прописано, что надо выдавать название mode с большой буквы »
Этот параметр не зависит от регистра. Для проверки можно выполнить команду с поддерживаемым режимом набранным в другом регистре. Или даже с орфографическими ошибками: "iwconfig wlan0 mode MANAGEDDD". До тех пор пока первые три буквы набраны правильно ("man" для managed, "mas" для master", "aut" для auto) команда не выдаст сообщения об ошибке - остальные она игнорирует.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.