unity获取Mac地址

文章讨论了在一台有多重MAC地址的电脑上,如何通过代码确定并获取当前网络连接(WiFi或以太网)的MAC地址。提供的代码示例展示了如何遍历网络接口,检查类型(如Wireless80211或Ethernet)和状态,以找到活跃的MAC地址。

今天发现获取mac地址发现了一个问题,有的电脑有多个mac地址 怎么判断是当前网络用的mac呢?

下面代码获取mac 拿到的是众多mac地址中的第一个

private static string GetMacAddress()
    {
        string physicalAddress = "";

        NetworkInterface[] nice = NetworkInterface.GetAllNetworkInterfaces();

        for (int i = 0; i < nice.Length; i++)
        {
            print("sdsdsd :  " + nice[i].ToString());
        }
        foreach (NetworkInterface adaper in nice)
        {
            print("nice:" + nice);
            Debug.Log("ad: " + adaper.Description);

            if (adaper.Description == "en0")
            {
                physicalAddress = adaper.GetPhysicalAddress().ToString();
                break;
            }
            else
            {
                physicalAddress = adaper.GetPhysicalAddress().ToString();

                if (physicalAddress != "")
                {
                    break;
                };
            }
        }
       
        return physicalAddress;
    }

 当前wifi使用的mac地址,如果想要以太网的mac  将Wireless80211 改为Ethernet

public static string GetmacAddress()
    {
        string strphysicalAddress = "";
        var interfaces = NetworkInterface.GetAllNetworkInterfaces();
        foreach (var iface in interfaces)
        {
            if (iface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 && iface.OperationalStatus == OperationalStatus.Up)
            {
                var physicalAddress = iface.GetPhysicalAddress();
                var macAddress = physicalAddress.ToString();
                Debug.Log("Current MAC address: " + macAddress);
                strphysicalAddress = macAddress;
                break;
            }
            else
            {
                var physicalAddress = iface.GetPhysicalAddress();
                var macAddress = physicalAddress.ToString();
                Debug.Log("没网的 MAC address: " + macAddress);
            }
        }
       
        return strphysicalAddress;
    }

Unity获取本地计算机的 MAC 地址,可以通过调用 .NET 提供的 `NetworkInterface` 类来实现。该类提供了获取网络接口信息的方法,包括物理地址(即 MAC 地址)。以下是一个完整的实现方法,支持获取无线网络和以太网接口的 MAC 地址,并可以根据需求筛选当前活跃的网络接口。 ### 获取所有类型的 MAC 地址 ```csharp using System.Collections.Generic; using System.Net.NetworkInformation; using UnityEngine; public class NetworkInfo : MonoBehaviour { public static List<string> GetMacAddresses() { List<string> macAddresses = new List<string>(); NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (var adapter in networkInterfaces) { // 可根据需要筛选特定类型的网络接口,如 Ethernet 或 Wireless80211 if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet || adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) { string macAddress = adapter.GetPhysicalAddress().ToString(); if (!string.IsNullOrEmpty(macAddress)) { macAddresses.Add(macAddress); Debug.Log($"Found MAC Address: {macAddress}"); } } } return macAddresses; } } ``` ### 获取当前活跃网络接口的 MAC 地址 如果希望仅获取当前正在使用的网络接口(例如当前连接 Wi-Fi 的设备),可以检查接口的操作状态是否为 `OperationalStatus.Up`: ```csharp public static string GetActiveMacAddress() { NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (var adapter in networkInterfaces) { if ((adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet) && adapter.OperationalStatus == OperationalStatus.Up) { string macAddress = adapter.GetPhysicalAddress().ToString(); if (!string.IsNullOrEmpty(macAddress)) { Debug.Log($"Active MAC Address: {macAddress}"); return macAddress; } } } Debug.Log("No active network interface found."); return string.Empty; } ``` ### 使用说明 - **跨平台兼容性**:以上代码适用于 Windows 平台,在 macOS 和 Linux 上可能因权限或系统限制无法获取 MAC 地址。 - **权限要求**:某些平台(如 Android)需要额外的权限才能访问网络信息,Unity 项目中需在 `AndroidManifest.xml` 中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> ``` - **安全性提示**:MAC 地址可用于设备唯一标识,但出于隐私考虑,部分操作系统(如 iOS)不允许直接访问 MAC 地址,建议使用替代方案如 `IdentifierForVendor`。 通过上述方法,可以在 Unity 项目中灵活获取本地计算机的 MAC 地址[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最菜程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值