Инструкция этого типа вызывает процесс подключения к SSID, получения IP адреса и других IP параметров, измерение времени отклика DNS-серверов.
Для подключения (ассоциации) используется wpa_supplicant.
В качестве возможных входных параметров используются:
| Параметр | Значение | Комментарий |
|---|---|---|
| interface | wlan0 | Имя беспроводного интерфейса (wlan0 или wlan1), через который подключаться. Опциональный параметр |
| ssid | строка | Указывается имя беспроводной сети, к которой необходимо подключиться. Если указано, будет проведено подключение только к заданному SSID, даже если в параметрах задачи (настройке группы) указано несколько SSID. Если не задано, то WifiConnect будет исполняться циклически для всех сетей, для которых на сервере выставлено "тестировать подключение" и список которых (BSSID) передан сервером.. |
| scan_ssid | 0 или 1 | Определяет, будет ли сенсор проводить предварительное сканирование (поиск) сети перед подключением. По умолчанию 0 (нет). |
| nslookup_timeout | время в секундах | таймаут nslookup |
mac_per_bssid | False (по умолчанию) True | Определяет метод формирования клиентского МАС адреса, используемого при подключении. Если не параметр не указан или значение не равно True, используется "родной" адрес wlan0 или wlan1 интерфейса сенсора. Если параметр равен True, на каждую попытку подключения сенсор модифицирует МАС адрес своего клиентского интерфейса так, чтобы он был похож на адрес BSSID, куда пойдёт подключение, но со сменой первых двух байт на F0:F0. Например, при подключении к b4:6e:08:76:c1:91 адрес интерфейса выставится в f0:f1:08:76:c1:91. Подобное может потребоваться при тестировании DHCP сервера в беспроводной сети, при этом не применяя постоянную полную рандомизацию адреса , которая может привести к исчерпанию пула адресов. Функция доступна с версии 1.1095 ПО сенсора. Данная функция привязывает МАС сенсора к BSSID, т.е. относительно последовательных измерений заданного BSSID адрес клиента (сенсора) будет постоянный. Но при этом разный для разных тестируемых BSSID. |
mode | 1 или 2 | Определяет режим работы со списком тестируемых сетей. Данный параметр обрабатывается планировщиком задачи (wnam_pask.py:488) в момент "размножения" инструкций по тестируемым BSSID. Описание режимов: 1 (по умолчанию): Используется перечень SSID/BSSID, находящийся в файле /tmp/mynetworksG2. Данный файл формируется сенсоров при получении списка тестируемых сетей с сервера, в MQTT-команде SETCONNECTBSSIDS. Если файла нет либо он пустой, сенсор не знает, к каким сетям проводить подключения, и игнорирует все имеющиеся в задаче инструкции WifiConnect/WifiAuth/QifiQuality/Quality. 2: Используется перечень SSID/BSSID, сформированный в результате только что отработавшей инструкции типа WifiScan. Подключение ведется ко всем BSSID, которые соответствуют SSID из перечня полученных ранее настроек "своих SSID" с выставленным признаком "Тестировать". Учитывается величина порога уровня сигнала (передаётся в сенсор в составе неявных параметров инструкции WifiConnect, "rssiMin"). Если перечень пуст (WifiScan не запускался, "своих сетей" или "Тестировать" не указано, не соответствует критерию порога), инструкции WifiConnect и далее игнорируются. Также игнорируется содержимое перечня из файла /tmp/mynetworksG2, присланного сервером. |
Обратите внимание, что когда при выполнении задачи сенсор доходит до инструкции типа WifiConnect, в параметрах самой инструкции обычно не указано никаких сведений, к какой сети, и как, подключаться.
Сенсор использует переданный сервером список SSID/BSSID для подключения, и/или сведения о соседних найденных BSSID, полученные только что при сканировании эфира.
Планировщик задач сенсора:
- Определяет перечень SSID/BSSID для подключения (зная параметры безопасности для каждой из тестируемых им сетей). Получается список "тестируемых объектов".
- Размножает пары инструкций WifiConnect/WifiQuaity (либо Quality), опционально добавляя после подключения инструкцию WifiAuth гостевой авторизации, для каждого из "тестируемых объектов"
- Если при подключении к какой-то сети результат окажется неуспешным, связанные инструкции WifiAuth и WifiQuaity пропускаются
- Если при успешном подключении к какой-то гостевой сети последующее выполнение авторизации WifiAuth окажется неуспешным, связанная инструкция WifiQuaity пропускается
- В конце каждого теста происходит отключение от SSID
Период времени межу первым появлением сенсора на сервере (при его первоначально регистрации), и моментом получения сервером первого набора результатов измерений сенсором, является особым (в базе данных: признак fresh=true).
В это время необходимо, чтобы сенсор самостоятельно нашел окружающие его точки доступа, подключился к ним, и измерил параметры их работы.
Для этого сенсор при первоначальной регистрации автоматически получает в ответе типа REG значение параметра wificonnect_mode=2, что заставляет его проводить подключения ко всем найденным SSID (с учётом порога уровня сигнала). Сервер, получив сведения о найденных и опрошенных точках доступа (при fresh==true):
- добавляет точки доступа в группу сенсора, если их до сих пор там нет
- привязывает эти точки доступа к сенсору
- если какая-либо из точек доступа, информация о которой была передана этим сенсором, существовала в системе и была привязана к другому сенсору с худшим уровнем сигнала, она пере-привязывается к этому сенсору
- признак fresh устанавливается в false
- параметр wificonnect_mode сенсору более не передаётся (если только он не был явно переопределен в настройках сенсора, группы или задачи)
Типовой код скрипта инструкции:
import json
import sys
import wnam_wifi_connectiondata = ' '.join(sys.argv[1:])
json_data = json.loads(data)['data']wnam_wifi_connection.change_network(**json_data)
По завершении подключения, если оно было успешным, происходит:
- получение IP адреса, и измерение времени, которое это заняло
- получение IP адреса по DNS запросу к тому серверу (серверам), которые были получены в DHCP-процессе. Измеряется время резолва имен
- для ipv4 ya.ru и google.com.
- для ipv6 ipv6.ya.ru и ipv6.google.com
- эти dns адреса могут быть изменены передачей инструкции параметров ip4_resolv_1, ip4_resolv_2, ip6_resolv_1, ip6_resolv_1
Инструкция WifiConnect возвращает серверу результат следующего вида:
Величины ssid_duration (время ассоциации), dhcp_duration (время получения IP адреса), go_ping и ya_ping (время DNS-резолвинга) выдаются в миллисекундах.
Полученный тайминги отображаются в отчете типа "Подключение к сети".
Параметр "ip" соответствует выданному по DHCP IP адресу DNS-сервера (в примере = 8.8.8.8).
