【问题标题】:How to pragmatically retrieve connected Access Point Info in Linux如何在 Linux 中务实地检索连接的接入点信息
【发布时间】:2019-02-25 12:44:06
【问题描述】:

我正在寻找 C++ 中的示例代码,用于在 Linux 中检索连接的接入点信息。

Android 中的 WifiManager.GetConnectionInfo API 提供了类似的功能,它为 Android 设备中连接的 AccesPoint 返回 BSSID、SSID、SignalStrength 和其他参数。

我们在 LINUX 中是否有任何可用的 Wifi 系统 API,例如 Windows?

下面的帖子建议使用 cfg80211,但我不知道如何使用它。 http://www.linuxwireless.org/en/developers/Documentation/cfg80211/

【问题讨论】:

    标签: c++ linux posix ioctl


    【解决方案1】:

    请参考下面提到的功能,该功能将打印连接的接入点的 MAC 地址和网络 SSID。

    char *
    get_essid (char *iface)
    {
       int           fd;
       struct iwreq  w;
       char          essid[IW_ESSID_MAX_SIZE];
    
       if (!iface) return NULL;
    
       fd = socket(AF_INET, SOCK_DGRAM, 0);
       printf("Socket desc is: %d\n", fd);
    
       if(fd <0)
       {
        printf("Socket failed: %d", fd);
       }
    
       strncpy (w.ifr_ifrn.ifrn_name, iface, IFNAMSIZ);
       memset (essid, 0, IW_ESSID_MAX_SIZE);
       w.u.essid.pointer = (caddr_t *) essid;
       w.u.data.length = IW_ESSID_MAX_SIZE;
       w.u.data.flags = 0;
    
       int ret = ioctl (fd, SIOCGIWESSID, &w);
       printf("ioctl ret is : %d\n", ret);
    
       ret = ioctl (fd, SIOCGIFHWADDR, &w);
       printf("ioctl ap details ret is : %d\n", ret);
    
       //get HWaddr
       u_int8_t hd[6];
    
    
            memcpy(hd,w.u.ap_addr.sa_data,sizeof(hd));
        int i=0;
        printf("HWaddr:");
        for(i;i<6;i++)
        {
            printf("%02X:",hd[i]);
        }
    
       close (fd);
    
    
       return strdup (essid);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多