iwlib.h 打印附近接入点的 BSSID

iwlib.h Print BSSID of nearby Access Points

所以最近我一直在研究 C 中的信标帧和 802.11 数据包,并在 Linux 中遇到了 iwlib.h。我制作了一小段代码来显示所有附近的网络及其 SSID。这是代码:

#include <stdio.h>
#include <iwlib.h>

int main() {
    wireless_scan_head head;
    wireless_scan *result;

    int sockfd = iw_sockets_open();
    iw_get_range_info(sockfd "wlan0", &range);
    result = head.result

    do {
        printf ("%s\n", result->b.essid);
        result = result->next;
    } while(result != NULL);

    return 0;
}

有没有什么方法可以使用此代码提取 BSSID/AP MAC 地址,这样我就可以像 FF:12:34:56:AB:CDFF123456ABCD 一样打印它?任何帮助都感激不尽!非常感谢。

不幸的是,在 iwlib 中禁用了读取 Mac 地址的支持,有一个 API iw_get_mac_addr() 但它已被禁用。
但是,可以使用其套接字描述符轻松提取特定接口的 MAC 地址。
下面的 C 示例代码假定 WiFi 接口的名称为 "wlp3s0".

#include <stdio.h>
#include <time.h>
#include <iwlib.h>

int main(void) {
  wireless_scan_head head;
  wireless_scan *result;
  iwrange range;
  int sock;
  struct ifreq s;

  sock = iw_sockets_open();

  if (iw_get_range_info(sock, "wlp3s0", &range) < 0) {
    printf("Error during iw_get_range_info.\n");
    exit(2);
  }

  if (iw_scan(sock, "wlp3s0", range.we_version_compiled, &head) < 0) {
    printf("Error during iw_scan.\n");
    exit(2);
  }

  strcpy(s.ifr_name, "wlp3s0");
  if (0 == ioctl(sock, SIOCGIFHWADDR, &s)) {
    int i;
    for (i = 0; i < 6; ++i)
      printf("%02x", (unsigned char) s.ifr_addr.sa_data[i]);
      puts("\n");
  }

  result = head.result;
  while (NULL != result) {
    printf("%s\n", result->b.essid);
    result = result->next;
  }

  exit(0);
}