Linux系统下用C获取可用WiFi的代码示例
时间: 2023-03-23 13:00:29 浏览: 318
以下是使用C语言在Linux系统下获取可用WiFi的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <linux/wireless.h>
int main() {
int sock_fd;
struct iwreq iwreq;
char iface[IFNAMSIZ];
/* 打开一个socket */
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (sock_fd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
/* 获取无线接口名称 */
printf("请输入无线接口名称:");
scanf("%s", iface);
/* 设置接口名称 */
strncpy(iwreq.ifr_name, iface, IFNAMSIZ);
/* 获取扫描结果 */
if (ioctl(sock_fd, SIOCSIWSCAN, &iwreq) < 0) {
perror("ioctl[SIOCSIWSCAN]");
exit(EXIT_FAILURE);
}
/* 打印扫描结果 */
printf("可用的WiFi列表:\n");
struct iw_event iwe;
char buffer[4096];
iwreq.u.data.pointer = buffer;
iwreq.u.data.length = sizeof(buffer);
iwreq.u.data.flags = 0;
while (ioctl(sock_fd, SIOCGIWSCAN, &iwreq) >= 0) {
char *ptr = buffer;
char *end = ptr + iwreq.u.data.length;
do {
memcpy(&iwe, ptr, sizeof(iwe));
ptr += iwe.len;
switch (iwe.cmd) {
case SIOCGIWAP:
printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
(unsigned char) iwe.u.ap_addr.sa_data[0],
(unsigned char) iwe.u.ap_addr.sa_data[1],
(unsigned char) iwe.u.ap_addr.sa_data[2],
(unsigned char) iwe.u.ap_addr.sa_data[3],
(unsigned char) iwe.u.ap_addr.sa_data[4],
(unsigned char) iwe.u.ap_addr.sa_data[5]);
break;
}
} while (ptr < end);
sleep(1);
}
/* 关闭socket */
close(sock_fd);
return 0;
}
```
此示例代码使用了Linux的Wireless Extension库,通过socket和ioctl函数获取无线接口扫描结果,并打印出可用的WiFi列表。用户需要输入无线接口的名称,如“wlan0”等。
阅读全文