Как прагматично получить информацию о подключенной точке доступа в Linux - PullRequest
0 голосов
/ 21 сентября 2018

Я ищу пример кода на C ++, который извлекает информацию о подключенной точке доступа в Linux.

Аналогичная функция предоставляется API-интерфейсом WifiManager.GetConnectionInfo в Android, который возвращает BSSID, SSID, SignalStrength и другие параметры для подключенного AccesPoint в устройстве Android.

Есть ли у нас какой-либо API-интерфейс системы Wifiв Linux как Windows?

В приведенном ниже посте предлагается использовать cfg80211, но я не понимаю, как его использовать.http://www.linuxwireless.org/en/developers/Documentation/cfg80211/

1 Ответ

0 голосов
/ 28 сентября 2018

см. Нижеприведенную функцию, которая печатает 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);
}
...