Довольно просто выполнить сканирование в командной строке. Справочные страницы - ваш друг (проверьте iwconfig и iwlist ). Но использовать интерфейс C немного сложнее, поэтому я сосредоточусь на этом.
Прежде всего, как уже упоминали другие, обязательно скачайте исходный код беспроводных инструментов . Вся документация для интерфейса программирования находится в файлах .c . Насколько я могу сказать, нет веб-документации для API. Тем не менее, исходный код довольно легко читается. Для этого вопроса вам достаточно всего лишь iwlib.h и iwlib.c .
Хотя вы можете использовать iw_set_ext
и iw_get_ext
, libiw реализует базовую функцию сканирования iw_scan
, из которой вы можете извлечь большую часть необходимой информации.
Вот простая программа для получения ESSID для всех доступных беспроводных сетей. Скомпилируйте с -liw
и запустите с sudo
.
#include <stdio.h>
#include <time.h>
#include <iwlib.h>
int main(void) {
wireless_scan_head head;
wireless_scan *result;
iwrange range;
int sock;
/* Open socket to kernel */
sock = iw_sockets_open();
/* Get some metadata to use for scanning */
if (iw_get_range_info(sock, "wlan0", &range) < 0) {
printf("Error during iw_get_range_info. Aborting.\n");
exit(2);
}
/* Perform the scan */
if (iw_scan(sock, "wlan0", range.we_version_compiled, &head) < 0) {
printf("Error during iw_scan. Aborting.\n");
exit(2);
}
/* Traverse the results */
result = head.result;
while (NULL != result) {
printf("%s\n", result->b.essid);
result = result->next;
}
exit(0);
}
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это просто демонстрационная программа. Для некоторых результатов возможно не иметь essid. Кроме того, это предполагает, что ваш беспроводной интерфейс "wlan0". Вы поняли.
Прочитайте исходный код iwlib !