1

我正在开发的 C++ 跨平台应用程序需要枚举设备上的所有活动 IP,并区分 Wi-Fi IP 和热点 IP。我这样做的方法是比较IP 接口名称。在 Android 和 iOS 等平台上,接口名称的差异足以区分它们(使用 Linux 的getifaddrs()ioctl (socket, SIOCGIFCONF, &ifconf) 等函数)。 例如,在 iOS上,Wi-Fi 接口始终具有名称“en0”,而热点接口名称始终以字符串“bridge”开头(例如,“bridge100”)。

我现在的目标是 Windows Phone 8.1:

  • 有没有办法在 WP8.1 下枚举接口名称(不是适配器名称)?
  • WP8.1下能区分Wi-Fi和热点IP吗?
  • 在 WinRT (Windows Runtime) 8.x 下有没有办法做到这一点?
  • 有没有办法在 C++/CX 中做到这一点?

有用于枚举接口信息的 Windows 函数(例如,GetAdaptersInfo),但它们在 WP8.1 下不受支持,并且它们不提供接口名称。

谁能指出我正确的方向?

提前谢谢了。

4

1 回答 1

1

您可以尝试快速入门:检索网络连接信息一文。当然,它概述了 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 运行时支持这些方法和属性。

于 2015-02-18T22:15:47.200 回答