获取没有Wifi的android设备的MAC地址

Posted

技术标签:

【中文标题】获取没有Wifi的android设备的MAC地址【英文标题】:Get MAC Address of android device without Wifi 【发布时间】:2011-09-05 17:12:31 【问题描述】:

如何获取没有 Wifi 接口的安卓设备(例如安卓模拟器)的网络接口的 MAC 地址?通过WifiManager获取的WifiInfo返回null

编辑

更清楚地说:我必须与本地网络上的现有网络协议(不是我设计的)通信,我必须在注册阶段在有效负载中发送通信接口的 mac 地址。

【问题讨论】:

我编辑我的问题更清楚 外部设备无论如何都无法看到真实的mac地址,因为有一个NAT(PC)在路上,那么发现它和制作一个(使用本地管理位)向上? 这仅适用于模拟器。带有以太网接口(有线网络)的安卓设备呢? 事实证明,该协议并没有明确要求有效的 MAC 地址,而是唯一的标识符。一个现有的实现只是使用 mac-address 作为这个标识符,这就是为什么我认为它是必要的。这就是为什么 Alexander Lucas 关于唯一标识符的回答最适合我的情况。但是我认为获取非 wifi 设备的 mac 地址的问题对其他人来说可能仍然很有趣,这就是为什么我将 Chris Stratton 的答案标记为最佳。 我在这里发布了工作解决方案***.com/a/47789324/5330408 【参考方案1】:

使用 adb 获取 android 设备的 wifi MAC: adb shell getprop ril.wifi_macaddr

在 Java 中使用以下代码以编程方式获取它:

Process p = Runtime.getRuntime.exec("adb", "shell", "getprop", "ril.wifi_macaddr")
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream());
String macAddress = br.readLine();

【讨论】:

【参考方案2】:

See this post 我已经提交了 Utils.java 示例以提供纯 java 实现。

Utils.getMACAddress("wlan0");
Utils.getMACAddress("eth0");
Utils.getIPAddress(true); // IPv4
Utils.getIPAddress(false); // IPv6 

【讨论】:

不!获取wifi mac地址。我必须使用这种方法至少打开一次 wifi。当我在设备刚启动后使用Utils.getMACAddress("wlan0"); 时,它会返回一个假地址。【参考方案3】:

将 /sys/class/net/[something]/address 读取为文本文件

但按照你的想法,它不太可能有用。

【讨论】:

对我来说,如果我用“eth0”替换 [something] 就可以了。非常感谢分享这个。 它“不太可能有用”的原因是 Android 设备通常位于 NAT 之后,这使得它们的实际客户端 MAC 地址无关紧要 - 您可以提供任何随机数,在会话中持续存在或不在您的偏好。【参考方案4】:

我将迈出一大步,假设您需要此 MAC 地址来为设备建立唯一标识符。 Mac 地址不是这样做的方法。

有一篇题为“Identifying App Installations”的 Android 开发者博客文章很好地涵盖了生成唯一 ID 的主题,包括流行的方法和优缺点。这绝对值得一读。与这篇文章非常相关的是以下引用:

也许可以从设备的 WiFi 或蓝牙硬件中检索 Mac 地址。我们不建议将其用作唯一标识符。首先,并非所有设备都有 WiFi。另外,如果 WiFi 没有打开,硬件可能不会报告 Mac 地址。

您可以使用的选项包括 TelephonyManager.getDeviceId()、android.os.Build.SERIAL 和 Settings.Secure.ANDROID_ID,所有这些都在链接的帖子中进行了更详细的介绍。

【讨论】:

对不起,这不适用于我所需要的。我必须与现有协议(不是我实现的)通信,在注册阶段我必须在有效负载中发送我的本地 MAC 地址。 android.os.Build.SERIAL 仅适用于 Android 2.3 及更高版本。 非常感谢您的回复:正是我需要的。【参考方案5】:

您想要 MAC 地址的网络接口是什么?如果没有wifi,你肯定无法获取wifi设备的MAC地址。它代表物理硬件,如果不存在,它就根本不存在。

【讨论】:

是的,wifi接口的mac地址根本不存在。但问题是如何获取最终发送消息的接口的 MAC 地址(例如,可能是以太网接口或模拟器上的虚拟接口)。

以上是关于获取没有Wifi的android设备的MAC地址的主要内容,如果未能解决你的问题,请参考以下文章

android设备 如何通过mac地址知道ip地址

Wifi Direct - 此设备地址不适用于 android 10

android获取Mac地址和IP地址

如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?

Android如何获取到连接的WIFI无线路由器的所有客户端的MAC地址?

获取android以太网MAC地址(不是wifi接口)