gpt4 book ai didi

linux - 如何在 Linux 上获取可用无线网络的列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:29 25 4
gpt4 key购买 nike

我想获取可用无线网络的列表。理想情况下,这将通过一些 C 调用,但我不介意我是否必须通过系统调用来解决它。如果所需的 C 调用或程序不需要一些奇特的第 3 方包,那就更好了。

互联网似乎建议我使用 sudo iwlist <interface> scan这似乎确实可以从命令行解决问题,但我宁愿不需要 root 权限。我只想看到基础,不想改变任何东西。

最佳答案

在命令行中进行扫描非常容易。手册页是您的 friend (查看 iwconfigiwlist)。但是使用 C 接口(interface)有点困难,所以我将重点介绍它。

首先,正如其他人提到的,一定要下载 wireless tools source code .编程接口(interface)的所有文档都在 .c 文件中。据我所知,该 API 没有 Web 文档。但是,源代码非常容易阅读。对于这个问题,您几乎只需要 iwlib.hiwlib.c

虽然您可以使用iw_set_extiw_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。此外,这假设您的无线接口(interface)是“wlan0”。你明白了。

阅读iwlib源代码!

关于linux - 如何在 Linux 上获取可用无线网络的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57571545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com