如何获得Linux上的可用无线networking列表?

我想获得可用的无线networking列表。 理想情况下,这将通过一些C调用,但我不介意,如果我不得不用系统调用kludge它。 更好的,如果所需的C通话或程序不需要一些奇特的第三方包。

互联网似乎build议我使用sudo iwlist <interface> scan似乎从命令行做的伎俩,但我宁愿不需要root权限。 我只想看基本的东西,不要改变任何东西。

Solutions Collecting From Web of "如何获得Linux上的可用无线networking列表?"

无线工具软件包( iwlist是其中的一部分)还包含无线工具助手库。 您需要包含iwlib.h并链接到libiw.a (即添加-liw)。 然后查找iw_set_ext函数的文档。 SIOCSIWSCAN参数将是最常用的。 有关如何使用此接口的示例,请查看KDE库中的KWifiManager源代码(请参阅: Interface_wireless_wirelessextensions :: get_available_networks方法)。 或者,您也可以下载无线工具源代码,并查看iwlist.c中如何使用iwlib iw_set_ext函数进行扫描。

至于特权,我想这个过程需要以root身份执行扫描。 我很想知道这是否也可以做。

由于您使用的是Ubuntu 8.04,因此libiw-dev软件包应该可以使用。

在命令行中进行扫描非常简单。 手册页是你的朋友在这里(检查出iwconfigiwlist )。 但是使用C接口有点难度,所以我会把重点放在这个。

首先,正如其他人所提到的,一定要下载无线工具源代码 。 编程接口的所有文档都在.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。 此外,这假定您的无线接口是“wlan0”。 你明白了。

阅读iwlib源代码!