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

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

编辑

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

【问题讨论】:

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

标签: android mac-address


【解决方案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 地址(例如,可能是以太网接口或模拟器上的虚拟接口)。
    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    相关资源
    最近更新 更多