如何获取WiFi网络接口的MAC地址?
Posted
技术标签:
【中文标题】如何获取WiFi网络接口的MAC地址?【英文标题】:How to obtain MAC address of WiFi network interface? 【发布时间】:2011-02-05 18:22:20 【问题描述】:android的java.net.NetworkInterface实现好像没有 byte[] getHardwareAddress() 方法 http://developer.android.com/reference/java/net/NetworkInterface.html
我发现几个论坛的人试图这样做但没有明确的答案,我需要获得一个有点跨设备的 UUID,所以我不能依赖电话号码或 ANDROID_ID(它可以被覆盖并且哪个我认为取决于拥有谷歌帐户的用户) http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID
在 linux 中你可以使用 ifconfig 或从 /proc/net/arp 读取,你可以很容易地得到硬件地址。
android 中是否有我可以读取的文件?
必须有办法获取此地址,因为它显示在手机的“设置 > 关于手机 > 状态”中。
【问题讨论】:
我在这里发布了工作解决方案***.com/a/47789324/5330408 【参考方案1】:迟到的答案,但它可以帮助其他有同样“问题”的人。
answer 非常直接:
WifiManager wifiMan = (WifiManager) this.getSystemService(
Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String macAddr = wifiInf.getMacAddress();
上面的代码会得到你设备的MAC地址,抓取地址时记得开启wifi。此代码 sn-p 应在您的 Activity 中使用。
【讨论】:
只是为了添加一些细节,您必须向 androidManifest.xml 添加适当的权限才能使其工作:必须有办法得到这个 地址,因为它显示在 “设置 > 关于手机 > 状态”的 电话。
这意味着,如果不出意外,您可以浏览 Android 开源代码,也许使用 Google 代码搜索,找出它从哪里提取的。
我自己做了一些推敲,看起来它正在使用来自WifiInfo
的getMacAddress()
。
【讨论】:
该代码可以在这里找到github.com/android/platform_packages_apps_settings/blob/master/…【参考方案3】:更新: 从 Android 6.0 开始,上述 API 将为您提供所有设备的恒定 MAC 地址,即 02:00:00:00:00:00。详情请参阅下文http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html 发现另一个帖子声称在 6.0 中找到 MAC 地址,但未测试过How to get Wi-Fi Mac address in Android Marshmallow
【讨论】:
我使用解决方案在 Android 6、7 和 8 的物理手机上从 ***.com/questions/33103798/… 获取我自己的 mac 地址,并且它可以正常工作【参考方案4】:在Android Q上,无法再访问mac地址了。
WifiInfo.getMacAddress()
将始终返回 02:00:00:00:00:00
。
并且WifiConfiguration.getRandomizedMacAddress()
将不再可用。
【讨论】:
【参考方案5】:添加以下权限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
WifiManager 在 onCreate 中初始化。
WifiManager wifiMgr = (WifiManager) getContext().getSystemService(context.WIFI_SERVICE);
使用以下函数。
public void WI-FI_MAC()
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
String macAddress = wifiInfo.getMacAddress();
【讨论】:
这将返回与适配器相同的地址 (02:00:00:00:00:00
)
这是Android 6.0引入的限制【参考方案6】:
这是我的代码,在 android 5 + 中运行良好。
public static String getMacAddress()
try
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all)
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null)
return "";
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes)
// res1.append(Integer.toHexString(b & 0xFF) + ":");
res1.append(String.format("%02X:",b));
if (res1.length() > 0)
res1.deleteCharAt(res1.length() - 1);
return res1.toString();
catch (Exception ex)
//handle exception
return "";
【讨论】:
重复***.com/a/35830358/2826147以上是关于如何获取WiFi网络接口的MAC地址?的主要内容,如果未能解决你的问题,请参考以下文章