Получение силы сигнала WIFI - поиск наилучшего пути (IOCTL, iwlist (iw) и т. Д.)

Я хочу сканировать силу сигнала, полученного от 3 AP. Я был бы счастлив, если бы это могло происходить каждые 300 мс (макс.500 мс). Я прошил OpenWRT на роутерах.

Я искал хороший инструмент для этого. Сначала я нашел iwconfig, который работал, но только с сетями, к которым я был подключен. Так что я использовал iwlist (я не работал - может быть, мне нужно обновить его?). Вы знаете, насколько точным является его вывод? Могу ли я доверять этому?

После этого я наткнулся на IOCTL. Это выглядит действительно мощным * и профессиональным. Но является ли результат получения сигнала stregnth от WIFI более надежным, чем простой метод, такой как iwlist / iw?

* даже слишком мощный, поскольку мне не удалось скомпилировать любую программу, которую я написал, используя ее

1 ответ

Если вы хотите определить уровень сигнала точек доступа WLAN, к которым вы не подключены, сканирование является правильным способом.

Сканирование выполняется беспроводной сетевой картой с большой или небольшой "помощью" от водителя, в зависимости от конструкции беспроводной карты. Существуют карты (наборы микросхем, если быть более точными), которые имеют собственный процессор и выполняют собственный код прошивки независимо от хост-компьютера. С другой стороны, существуют "глупые" карты, на которых драйвер на главном компьютере выполняет большую часть работы.

Между драйвером и остальной частью операционной системы имеется интерфейс (API) для отправки команд драйверу и стандартного считывания информации. В Linux есть как минимум два разных API. Более старый называется Wireless Extensions, а новый называется cfg80211. Обычно драйвер поддерживает только один из API. Большинство современных драйверов используют cfg80211, но могут быть более старые драйверы, которые все еще используют беспроводные расширения.

Для каждого из двух API есть инструмент пользовательского пространства (или семейство инструментов) для его использования. Для беспроводных расширений есть iwconfig (а также iwlist, iwpriv и т.д.) для cfg80211 есть просто iw,

Итак, вопросы о правильном инструменте зависят от того, какой API использует беспроводной драйвер. Чтобы добавить путаницу;-), cfg80211 выполняет некоторую эмуляцию, которая позволяет вам выполнять некоторые вызовы Wireless Extension для драйверов, которые используют более новый API cfg80211.

Что касается ваших вопросов о ioctl(): Это общий метод для связи между пользовательским пространством и пространством ядра в операционных системах Unix. Старый API-интерфейс Wireless Extensions использует ioctl(), Более новый API cfg80211 не использует ioctl() интерфейс, но вместо него используется nl80211.

Подводя итог: использовать ли iw /cfg80211/nl80211 или iwconfig /Wireless Extensions/ioctl зависит от драйвера или вашей беспроводной карты.

Что касается желаемого интервала сканирования, я бы сказал, что 300 мс довольно короткий. Это связано с тем, что для полезного сканирования клиент должен ненадолго покинуть свой текущий канал, переключиться на другой канал и прослушивать сигналы от других точек доступа на этом канале. Поскольку выход из своего канала прерывает связь, эти временные интервалы обычно остаются короткими и выполняются нечасто.

призвание iw <dev> scan или же iwlist <dev> scan соответственно не обязательно вызовет новое сканирование, но может вернуть старый (кэшированный) список точек доступа. В зависимости от вашей беспроводной карты / драйвера может быть (im) возможно провести новое сканирование.

Другие вопросы по тегам