You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中NetworkInterface获取设备MAC地址失效问题咨询

.NET MAUI中NetworkInterface获取MAC地址的问题及解决方案

核心结论

NetworkInterface 在.NET MAUI中并非完全不可用,但受限于各平台的系统权限限制和MAUI的API适配差异,无法像传统.NET Framework/.NET Core项目那样稳定获取MAC地址,这也是你遇到接口类型显示为Unknown、物理地址为空的原因。

各平台具体情况及替代方案

Android

Android 6.0(API 23)及以上版本严格限制了MAC地址的获取:仅允许获取蓝牙和本地WLAN连接的MAC,其他场景下系统会返回空值或固定占位符。MAUI中的NetworkInterface未针对此限制做适配,因此无法正常识别接口类型和获取MAC。

替代方案:使用Android原生WifiManager API(需申请ACCESS_WIFI_STATE权限,Android 12+需动态申请):

#if ANDROID
using Android.Content;
using Android.Net.Wifi;

public string GetAndroidMacAddress()
{
    var wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService);
    var wifiInfo = wifiManager.ConnectionInfo;
    return wifiInfo.MacAddress ?? "无法获取MAC地址";
}
#endif

iOS

iOS从7.0版本开始就禁止第三方应用获取真实MAC地址,系统会统一返回02:00:00:00:00:00。MAUI的NetworkInterface自然也无法绕过此限制。

替代方案:使用IdentifierForVendor(IDFV)作为设备唯一标识,虽然不是MAC,但能满足大多数设备识别需求:

#if IOS
using UIKit;

public string GetIOSDeviceId()
{
    return UIDevice.CurrentDevice.IdentifierForVendor.ToString() ?? "无法获取设备标识";
}
#endif

Windows

Windows平台上NetworkInterface理论上可用,但你的代码仅判断NetworkInterfaceType.Ethernet,可能遗漏了WiFi等其他类型的接口(比如WiFi对应的类型是NetworkInterfaceType.Wireless80211)。调整判断逻辑后可尝试获取:

#if WINDOWS
public string GetWindowsMacAddress()
{
    var interfaces = NetworkInterface.GetAllNetworkInterfaces();
    foreach (var ni in interfaces)
    {
        // 筛选可用的网络接口(排除回环、未启用的)
        if (ni.OperationalStatus == OperationalStatus.Up && 
            ni.NetworkInterfaceType != NetworkInterfaceType.Loopback)
        {
            var mac = ni.GetPhysicalAddress().ToString();
            if (!string.IsNullOrEmpty(mac))
            {
                // 格式化MAC地址为标准格式(XX:XX:XX:XX:XX:XX)
                return string.Join(":", Enumerable.Range(0, mac.Length / 2)
                    .Select(i => mac.Substring(i * 2, 2)));
            }
        }
    }
    return "无法获取MAC地址";
}
#endif

统一调用示例

在MAUI项目中通过条件编译实现跨平台适配:

public string GetDeviceIdentifier()
{
#if ANDROID
    return GetAndroidMacAddress();
#elif IOS
    return GetIOSDeviceId();
#elif WINDOWS
    return GetWindowsMacAddress();
#else
    return "不支持的平台";
#endif
}

内容的提问来源于stack exchange,提问作者BitWiseByteDumb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:17:01