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:CD
或 FF123456ABCD
一样打印它?任何帮助都感激不尽!非常感谢。
不幸的是,在 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);
}
所以最近我一直在研究 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:CD
或 FF123456ABCD
一样打印它?任何帮助都感激不尽!非常感谢。
不幸的是,在 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);
}