以下是搜索WiFi的示例C程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <linux/wireless.h>

#define IW_SCAN_MAX_DATA 2048

int main(int argc, char *argv[]) {
    int sock_fd, iw_scan_max_data;
    struct iwreq iw_req;
    char scan_data[IW_SCAN_MAX_DATA];
    struct iw_scan_req scan_req;
    struct iw_range range;
    int i;

    // 创建套接字
    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock_fd == -1) {
        perror("socket");
        exit(EXIT_FAILURE);
    }

    // 获取范围信息
    memset(&range, 0, sizeof(range));
    if (ioctl(sock_fd, SIOCGIWRANGE, &iw_req) < 0) {
        perror("SIOCGIWRANGE");
        exit(EXIT_FAILURE);
    }

    // 设置扫描请求
    memset(&scan_req, 0, sizeof(scan_req));
    scan_req.scan_type = IW_SCAN_TYPE_PASSIVE;
    scan_req.scan_time = 3000; // 3秒

    // 获取扫描结果
    memset(scan_data, 0, IW_SCAN_MAX_DATA);
    memset(&iw_req, 0, sizeof(iw_req));
    strncpy(iw_req.ifr_name, "wlan0", IFNAMSIZ); // 修改为你的无线网卡
    iw_req.u.data.pointer = (caddr_t) &scan_req;
    iw_req.u.data.length = sizeof(scan_req);
    if (ioctl(sock_fd, SIOCSIWSCAN, &iw_req) < 0) {
        perror("SIOCSIWSCAN");
        exit(EXIT_FAILURE);
    }
    sleep(3); // 等待扫描完成
    memset(&iw_req, 0, sizeof(iw_req));
    strncpy(iw_req.ifr_name, "wlan0", IFNAMSIZ); // 修改为你的无线网卡
    iw_req.u.data.pointer = (caddr_t) scan_data;
    iw_req.u.data.length = IW_SCAN_MAX_DATA;
    if (ioctl(sock_fd, SIOCGIWSCAN, &iw_req) < 0) {
        perror("SIOCGIWSCAN");
        exit(EXIT_FAILURE);
    }

    // 输出扫描结果
    iw_scan_max_data = range.we_max_data + IW_SCAN_MAX_DATA;
    for (i = 0; i < iw_scan_max_data; i += sizeof(struct iw_event)) {
        struct iw_event *event = (struct iw_event *) (scan_data + i);
        if (event->cmd == SIOCGIWAP) {
            struct sockaddr *addr = (struct sockaddr *) (event + 1);
            char addr_str[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, &addr->sa_data[2], addr_str, INET_ADDRSTRLEN);
            printf("%s\n", addr_str);
        }
    }

    close(sock_fd);
    exit(EXIT_SUCCESS);
}

注意:需要将程序中的"wlan0"修改为你的无线网卡名称

orangepi4b 搜索wifi的C程序

原文地址: https://www.cveoy.top/t/topic/fiXu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录