【问题标题】:how to get mac address in android with python如何使用python在android中获取mac地址
【发布时间】:2013-01-31 22:33:18
【问题描述】:

我正在尝试在 Android 的 XBMC linux 环境中编写插件。 我可以在 XBMC 中看到 Mac 地址。但是我想获取插件的mac地址,但我不知道怎么做。

mac=uuid.getnode()

我已经尝试过使用上面的代码,但每次在 android 中运行时只给我数字并且每次都不同。

谁能给点建议

【问题讨论】:

  • "numbers only" 是值应该。正如the docs 所说:“获取硬件地址为 48 位正整数。”如果你想把它转换成一种常见的十六进制格式,你必须明确地这样做。
  • 另外,请参阅this question(尤其是 Seka Alekseyev 的回答),了解在 Android 上使用 MAC 地址的任何问题。如果您已经知道这一点,并且出于某种原因仍然想要它,那很好;我只是想指出这一点。

标签: android python mac-address xbmc


【解决方案1】:

您可以使用XBMC InfoLabels

if xbmc.getInfoLabel('Network.MacAddress') != None:
    mac_address = xbmc.getInfoLabel('Network.MacAddress')
else:
    mac_address = None

【讨论】:

    【解决方案2】:

    如果你看the docs

    以 48 位正整数形式获取硬件地址。第一次运行时,它可能会启动一个单独的程序,这可能会很慢。如果所有获取硬件地址的尝试都失败了,我们会按照 RFC 4122 的建议选择一个随机的 48 位数字,并将其第八位设置为 1。

    第一部分解释了为什么它是“仅数字”。 应该是一个数字。如果您希望使用某种特定的十六进制字符串格式,只需对其进行格式化——例如,通过调用hex()

    最后一句话解释了为什么“每次都不一样”。如果您查看the source,在任何非Windows 平台上,getnode 将尝试_unixdll_getnode,然后_ifconfig_getnode,然后回退到一个随机数。前者在libuuidlibc 中需要一个名为uuid_generate_time 的函数,这在Android 上不存在。后者使用一系列不同的标志运行命令ifconfig 并搜索特定字符串,然后回退到arplanscan。同样,这些都不适用于 Android。

    在 Android 上没有推荐的获取 MAC 地址的方法,主要是因为他们不希望你得到一个。 This blog post 解释了原因,this SO question(尤其是 Seka Alekseyev 的回答)添加了更多细节。有些应用程序在获取 MAC 地址后会尝试将其保留,并且不再检查,这样可以解决一些问题,但不能解决大部分问题。

    有一个 Java API 可以为每个有意义的服务获取 MAC(WiFi、3G、蓝牙等)。由您决定哪个是“该”MAC,并且您需要正确的权限(例如, android.permission.ACCESS_WIFI_STATE),可能没有值或者垃圾值,但是你可以用这样的代码获取:

    WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
    String mac = wm.getConnectionInfo().getMacAddress();
    

    据我所知,SL4A 或任何其他 Android Python 发行版中都没有直接公开这些函数的内容,因此您必须编写自己的包装器。

    【讨论】:

      【解决方案3】:

      您可以通过这种简单的方式获取mac地址,假设“eth0”是您的网络设备名称:

      o = open('/sys/class/net/eth0/address', 'r')

      mac_address = o.read().strip() #on "ff:ff:ff:ff:ff:ff" 形式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 2016-01-11
        • 2016-11-06
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多