C++代码来查找BSSID OF 关联网络

C++ code to find BSSID OF associated network

本文关键字:OF 关联 网络 BSSID 查找 代码 C++      更新时间:2023-10-16

可能的重复项:
想知道通过 UBUNTU 中的C++无线网络的 ESSID

你好

我编写了以下代码,它是项目的一部分。它用于查找当前关联网络的 ESSID。但是,它有一个缺陷,即它还显示与我不关联的网络的ESSID,即如果我尝试将自己与无线n/w相关联并且如果不成功,即没有收到DHCP报价,那么它也将显示我尝试过的ESSID。

如果可能的话,试着给我一个ioctl电话来查找当前关联的无线n/w的BSSID,因为这是我标记黑白关联和非关联的唯一方法。

法典:

int main (void)
{
    int errno;
    struct iwreq wreq;
    CStdString result = "None";
    int sockfd;
    char * id;
    char ESSID[100];
    memset(&wreq, 0, sizeof(struct iwreq));
    if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
        fprintf(stderr, "Cannot open socket n");
        fprintf(stderr, "errno = %d n", errno);
        fprintf(stderr, "Error description is : %sn",strerror(errno));
        return result ;
    }
    CLog::Log(LOGINFO,"Socket opened successfully");
    FILE* fp = fopen("/proc/net/dev", "r");
    if (!fp)
    {
        // TBD: Error
        return result;
    }
    char* line = NULL;
    size_t linel = 0;
    int n;
    char* p;
    int linenum = 0;
    while (getdelim(&line, &linel, 'n', fp) > 0)
    {
        // skip first two lines
        if (linenum++ < 2)
            continue;
        p = line;
        while (isspace(*p))
        ++p;
        n = strcspn(p, ": t");
        p[n] = 0;
        strcpy(wreq.ifr_name, p);
        id = new char[IW_ESSID_MAX_SIZE+100];
        wreq.u.essid.pointer = id;
        wreq.u.essid.length = 100;
        if ( ioctl(sockfd,SIOCGIWESSID, &wreq) == -1 ) {
            continue;
        }
        else 
        {
            strcpy(ESSID,id);
            return ESSID;
        }
        free(id);
    }
    free(line);
    fclose(fp);
    return result;
}

您没有提到您是否使用独立的基本服务集(即没有控制接入点的点对点网络),因此如果您不尝试创建点对点网络,则BSSID应该是本地接入点的MAC地址。 可用于访问该信息ioctl()常量是 SIOCGIWAPioctl有效负载信息将存储在iwreq结构中,地址为 u.ap_addr.sa_data