当前位置:  开发笔记 > 运维 > 正文

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

如何解决《如何在Linux上获取可用无线网络列表?》经验,为你挑选了2个好方法。

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

互联网似乎建议我使用sudo iwlist scan它似乎从命令行做的技巧,但我宁愿不要求root权限.我只想看到基础知识,而不是改变任何东西.



1> 小智..:

在命令行中进行扫描非常容易.手册页是你的朋友(查看iwconfigiwlist).但是使用C接口有点困难所以我会专注于此.

首先,正如其他人所提到的,绝对要下载无线工具源代码.编程接口的所有文档都在.c文件中.据我所知,api没有web文档.但是,源代码很容易阅读.你几乎只需要iwlib.hiwlib.c这个问题.

虽然您可以使用iw_set_extiw_get_ext,但libiw实现了基本扫描功能iw_scan,您可以从中提取所需的大部分信息.

这是一个简单的程序,用于获取所有可用无线网络的ESSID.编译-liw并运行sudo.

#include 
#include 
#include 

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源代码!



2> Judge Maygar..:

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

至于权限,我想这个过程需要以root身份运行才能执行扫描.我很想知道是否可以这样做.

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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有