我想获得可用的无线networking列表。 理想情况下,这将通过一些C调用,但我不介意,如果我不得不用系统调用kludge它。 更好的,如果所需的C通话或程序不需要一些奇特的第三方包。
互联网似乎build议我使用sudo iwlist <interface> scan似乎从命令行做的伎俩,但我宁愿不需要root权限。 我只想看基本的东西,不要改变任何东西。
我如何枚举所有可用的无线networking并将其显示在列表框中?
为什么我需要两个不同的连接wpa_supplicant(wpa_cli – ctrl_conn和mon_conn)
无法使用推荐的Edimax EW7811U连接到无线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软件包应该可以使用。
在命令行中进行扫描非常简单。 手册页是你的朋友在这里(检查出iwconfig和iwlist )。 但是使用C接口有点难度,所以我会把重点放在这个。
首先,正如其他人所提到的,一定要下载无线工具源代码 。 编程接口的所有文档都在.c文件中。 据我所知,这个API没有web文档。 但是,源代码很容易阅读。 你几乎只需要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,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("%sn",result->b.essid); result = result->next; } exit(0); }
免责声明:这只是一个演示程序。 有些结果可能没有essid。 此外,这假定您的无线接口是“wlan0”。 你明白了。
阅读iwlib源代码!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。