Linux — написание внешней программы для взаимодействия с wpa_supplicant в переполнении стека

Насколько я понимаю, можно просто связать wpa_ctrl.c с внешней программой, и тогда вы сможете использовать ее функции для контроля и получения информации от wpa_supplicant.

Может ли кто-нибудь представить пример, желательно на C ++, как бы вы:

  1. Свяжите внешнюю программу с файлом wpa_ctrl.c.
  2. Как будет выглядеть код, чтобы выполнить «сканирование», а затем напечатать «scan_results».

Я новичок в программировании на встроенной платформе Linux, и нигде нет примеров этого. Спасибо заранее!

7

Решение

Программа wpa_cli это пример именно того, что вы хотите. wpa_supplicant поддержка проекта V=1 возможность посмотреть, что нужно для создания этого исполняемого файла. Вот результат для моей сборки ARM,

gcc -c -o wpa_cli.o -MMD -O2 -Wall -g -I src -I src/utils \
-Iusr_ARM/include/libnl3 \
-DCONFIG_BACKEND_FILE -DCONFIG_IEEE80211W  -DCONFIG_DRIVER_WEXT \
-DCONFIG_WIRELESS_EXTENSION  -DCONFIG_DRIVER_NL80211 -DCONFIG_LIBNL20 \
-DEAP_PSK -DIEEE8021X_EAPOL -DCONFIG_SHA256 -DCONFIG_CTRL_IFACE \
-DCONFIG_CTRL_IFACE_UNIX  -DCONFIG_SME \
wpa_cli.c

gcc  -o wpa_cli wpa_cli.o ../src/common/wpa_ctrl.o ../src/utils/wpa_debug.o \
../src/utils/common.o ../src/utils/os_unix.o ../src/utils/eloop.o \
../src/utils/edit_simple.o -lrt

Подставьте свои пути, чтобы получить заголовки для версии wpa_supplicant используется на целевом устройстве ARM (в первой команде). Связь со всеми объект файлы, перечисленные во второй команде и связать с реальное время библиотека (с -lrt). Вы также можете посмотреть на wpa_cli.c для вашей версии wpa_supplicant чтобы получить примеры того, как отправить команды процессу соискателя.

Список объектов включает в себя wpa_ctrl.o (как вы уже догадались) и многие другие. Некоторые из них могут не понадобиться, в зависимости от используемых вами функций, но я бы начал с полного списка, а затем обрезал их после того, как у вас есть пример работы.

Лицензия является щедрым BSD на этом источнике.

Вот wpa_cli_cmd_scan () который отправляет сканирование запрос,

static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
{
return wpa_cli_cmd(ctrl, "SCAN", 0, argc, argv);
}

Вы, вероятно, также хотите scan_results; он находится в том же файле, что и wpa_cli_cmd_scan_results(),

API также хорошо документировано под интерфейс управления wpa_supplicant, где вы можете расширить свой рабочий пример. Убедитесь, что вы получаете источник, который соответствует версии wpa_supplicant используется в вашей системе. Команды выше предназначены для eglibc Система Linux; Похоже, Bionic (библиотека Android) обеспечивает -lrt по умолчанию. Если вы можете запустить команды, rm wpa_cli.o; rm wpa_cli; make V=1 в wpa_supplicant В директории сборки для вашего устройства вы увидите точные необходимые команды.

Вам, вероятно, не нужно edit_simple.o файл. Тем не менее ELOOP вероятно, необходимо получить нежелательные события от драйверов, когда запрос на сканирование завершен; по крайней мере, если вы хотите работать со многими различными чипами Wi-Fi. Шаги,

  1. послать SCAN,
  2. Ждать <SCAN_COMPLETE>.
  3. послать SCAN_RESULTS,
8

Другие решения


По вопросам рекламы [email protected]