我正在开发的C++跨平台应用程序需要枚举设备上的所有活动IP,并区分Wi-Fi IP和热点IP。我的方法是比较IP接口名称。在Android和iOS等平台上,接口名称的差异足以区分它们(使用Linux的getifadrs()和ioctl(socket、SIOCGIFCONF和&ifconf)等函数)。例如,在iOS上,Wi-Fi接口的名称总是"en0",而热点接口的名称始终以字符串"bridge"(例如"bridge100")开头。
我现在的目标是Windows Phone 8.1:
- 有没有办法枚举WP8.1下的接口名称(而不是适配器名称)
- 在WP8.1下,可以区分Wi-Fi和热点IP吗
- 有没有一种方法可以在WinRT(Windows运行时)8.x下实现这一点
- 有没有一种方法可以在C++/CX中做到这一点
有一些Windows函数用于枚举接口信息(例如GetAdaptersInfo),但WP8.1不支持这些函数,并且它们不提供接口名称。
有人能给我指正确的方向吗?
非常感谢。
您可以尝试Quickstart:检索网络连接信息文章。当然,它概述了JavaScript库调用,但它们在C++/C#中是类似的。例如,使用NetworkInformation.GetConnectionProfiles方法,您的代码可能看起来像:
// Retrieve all active connections
var connectionProfiles = NetworkInformation.GetConnectionProfiles();
foreach (var connProfile in connectionProfiles)
{
// Get all network names that alias this connection's IP
var theNames = connProfile.GetNetworkNames();
if (theNames.Any(name => name == "My Desired Name"))
{
// Do the thing
}
}
ConnectionProfile类还包含ProfileName属性,该属性可能在某种程度上指示该配置文件标识的连接类型,但我怀疑这不一定是您所寻求的信息类型。
关于标识连接类型,可以使用NetworkAdapter属性对象的IanaInterfaceType属性来获取有关连接类型的更多信息。
foreach (var connProfile in connectionProfiles)
{
if (connProfile.NetworkAdapter.IanaInterfaceType == 71) {
// Take action related to IEEE 802.11 wireless network connection
}
}
通用Windows 8.1运行时支持这些方法和属性。