如何在android中使用python获取mac地址

时间:2013-01-31 22:33:19

标签: android python mac-address xbmc

我正在尝试在Android中的XBMC linux环境中编写插件。 我可以在XBMC中看到Mac地址。但是我想抓住插件的mac地址,我无法弄清楚如何。

mac=uuid.getnode()

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

请有人提出任何建议

3 个答案:

答案 0 :(得分:3)

如果你看the docs

  

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

第一部分解释了为什么它只是“数字”。 假设是一个数字。如果您想要某种特定的十六进制字符串格式,只需通过调用hex()来格式化它,例如。

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

没有推荐的方法在Android上获取MAC地址,主要是因为他们不希望您获得MAC地址。 This blog post解释了原因,this SO question(特别是Seka Alekseyev的回答)增加了更多细节。有些应用程序尝试在获得MAC地址后尝试保留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发行版中没有任何内容直接公开这些函数,因此您必须编写自己的包装器。

答案 1 :(得分:3)

您可以使用XBMC InfoLabels

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

答案 2 :(得分:0)

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

  

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

     

mac_address = o.read()。strip()#on“ff:ff:ff:ff:ff:ff”form