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

Posted

技术标签:

【中文标题】获取android以太网MAC地址(不是wifi接口)【英文标题】:Get android Ethernet MAC Address (not wifi interface) 【发布时间】:2011-11-12 01:45:56 【问题描述】:

我正在使用 Api 级别 8 的 android,我想获取我的以太网接口 (eth0) 的地址。

在 API 级别 8 上,NetworkInterface 类没有函数 getHardwareAddress()。 WifiManager 也不起作用,因为这不是无线接口。

提前致谢!

【问题讨论】:

【参考方案1】:

这是我基于 Joel F 答案的解决方案。希望它可以帮助某人!

/*
 * Load file content to String
 */
public static String loadFileAsString(String filePath) throws java.io.IOException
    StringBuffer fileData = new StringBuffer(1000);
    BufferedReader reader = new BufferedReader(new FileReader(filePath));
    char[] buf = new char[1024];
    int numRead=0;
    while((numRead=reader.read(buf)) != -1)
        String readData = String.valueOf(buf, 0, numRead);
        fileData.append(readData);
    
    reader.close();
    return fileData.toString();


/*
 * Get the STB MacAddress
 */
public String getMacAddress()
    try 
        return loadFileAsString("/sys/class/net/eth0/address")
            .toUpperCase().substring(0, 17);
     catch (IOException e) 
        e.printStackTrace();
        return null;
    

【讨论】:

【参考方案2】:

假设您的以太网接口是 eth0,请尝试打开并读取文件 /sys/class/net/eth0/address

【讨论】:

太棒了!它成功了。你认为它适用于任何带有 eth0 的安卓设备吗? 应该,这是一个标准的 Linux 内核路径,我怀疑它们很快就会改变。很高兴它有帮助。【参考方案3】:

这种方式用java修复吧;也许可以帮助你

NetworkInterface netf = NetworkInterface.getByName("eth0");
byte[] array = netf.getHardwareAddress();
StringBuilder stringBuilder = new StringBuilder("");
String str = "";
for (int i = 0; i < array.length; i++) 
    int v = array[i] & 0xFF;
    String hv = Integer.toHexString(v).toUpperCase();
    if (hv.length() < 2) 
        stringBuilder.append(0);
    
    stringBuilder.append(hv).append("-");                   

str = stringBuilder.substring(0, stringBuilder.length()- 1);

【讨论】:

【参考方案4】:

至少在 Amlogic 平台上还要检查 /sys/class/efuse/mac。

【讨论】:

【参考方案5】:

也许我的回答会对你们中的一些人有所帮助,至少对你们其他人来说很有趣。

我试图获取 Android TV 设备的以太网 MAC 地址,以尝试找到 MAC 地址注册到的实际制造商。我使用 adb 连接到设备,并使用了上面 Joel F 的出色答案,效果很好。

然后我把盒子翻过来,它在设备底部的贴纸上。

因此,如果您不需要以编程方式使用它,请先尝试翻转设备。

附:我联系了注册地址的制造商,他们说他们不生产这个型号,其他制造商复制他们的 MAC 地址。

【讨论】:

【参考方案6】:

现在(2014 年 3 月)Google 没有提供关于 Ethernet 的 API

这是原因,因为我们没有办法像在 wifi 情况下那样获得以太网 mac。

private String getWifiMACAddress(Context ctx) 
    WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
    WifiInfo info = wifiManager.getConnectionInfo();
   return info.getMacAddress();

另一种方法是读取 eth0 文件。如果有人知道,请告诉我!

【讨论】:

【参考方案7】:
public static String getEthernetMacAddress() 
    String macAddress = "Not able to read";
    try 
        List<NetworkInterface> allNetworkInterfaces = Collections.list(NetworkInterface
                .getNetworkInterfaces());
        for (NetworkInterface nif : allNetworkInterfaces) 
            if (!nif.getName().equalsIgnoreCase("eth0")) 
                continue;

            byte[] macBytes = nif.getHardwareAddress();
            if (macBytes == null) 
                return macAddress;
            

            StringBuilder res1 = new StringBuilder();
            for (byte b : macBytes) 
                res1.append(String.format("%02X:", b));
            

            if (res1.length() > 0) 
                res1.deleteCharAt(res1.length() - 1);
            
            macAddress = res1.toString();
        
     catch (Exception ex) 
        log(LogLevel.ERROR, "getEthernetMacAddress e :" + ex.getMessage());
        ex.printStackTrace();
    
    return macAddress;

【讨论】:

【参考方案8】:

AndroidTV 的许多实现可能会将其填充到属性中,您可以使用 getprop 命令检查以找到正确的属性名称广告,然后使用 SystemProperties.get() 读取它

要在 java 中读取程序中的 MAC,您可以使用以下内容

SystemProperties.get("ro.boot.ethernet-mac");

【讨论】:

以上是关于获取android以太网MAC地址(不是wifi接口)的主要内容,如果未能解决你的问题,请参考以下文章

获取Android设备WIFI的MAC地址 “MAC地址”

如何获取Android系统的wifi MAC和有线MAC

android获取Mac地址和IP地址

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

如何获取WiFi网络接口的MAC地址?

解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题