如何在 Linux 中实用地检索连接的接入点信息
How to pragmatically retrieve connected Access Point Info in Linux
我正在寻找 C++ 中的示例代码,它在 Linux 中检索连接的接入点信息。
WifiManager.GetConnectionInfo API 在 Android 中提供了类似的功能,其中 returns BSSID、SSID、SignalStrength 和 [=22= 中连接的 AccesPoint 的其他参数] 设备。
我们在 LINUX 有像 Windows 这样的 Wifi 系统 API 可用吗?
下面的 post 建议使用 cfg80211,但我不知道如何使用它。
http://www.linuxwireless.org/en/developers/Documentation/cfg80211/
请参考下面提到的功能,它将打印连接的接入点的 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);
}
我正在寻找 C++ 中的示例代码,它在 Linux 中检索连接的接入点信息。
WifiManager.GetConnectionInfo API 在 Android 中提供了类似的功能,其中 returns BSSID、SSID、SignalStrength 和 [=22= 中连接的 AccesPoint 的其他参数] 设备。
我们在 LINUX 有像 Windows 这样的 Wifi 系统 API 可用吗?
下面的 post 建议使用 cfg80211,但我不知道如何使用它。 http://www.linuxwireless.org/en/developers/Documentation/cfg80211/
请参考下面提到的功能,它将打印连接的接入点的 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);
}