Получить андроид Ethernet MAC-адрес (не Wi-Fi интерфейс) - PullRequest
14 голосов
/ 07 сентября 2011

Я использую Android с уровнем API 8 и хочу получить адрес моего интерфейса Ethernet (eth0).

На уровне API 8 класс NetworkInterface не имеет функции getHardwareAddress (),WifiManager также не работает, поскольку это не беспроводной интерфейс.

Заранее спасибо!

Ответы [ 7 ]

26 голосов
/ 09 сентября 2011

Это моё решение, основанное на ответе Джоэля Ф.Надеюсь, это кому-нибудь поможет!

/*
 * 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;
    }
}
20 голосов
/ 07 сентября 2011

Предполагая, что ваш интерфейс Ethernet - eth0, попробуйте открыть и прочитать файл /sys/class/net/eth0/address.

2 голосов
/ 31 марта 2016

этот способ использовать 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);
1 голос
/ 04 января 2013

Проверьте также / sys / class / efuse / mac хотя бы на платформах Amlogic.

0 голосов
/ 27 апреля 2018
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;
}
0 голосов
/ 07 февраля 2018

Может быть, мой ответ будет полезен для некоторых из вас, и, по крайней мере, забавен для всех остальных.

Я пытался получить MAC-адрес Ethernet для устройства Android TV, чтобы попытаться найти фактического производителя, на которого зарегистрирован MAC-адрес.Я подключился к устройству с помощью adb и воспользовался отличным ответом Джоэля Ф. выше, и он отлично работал.

Затем я перевернул коробку и там она находится на наклейке внизу устройства.* Так что если вам это не нужно программно, попробуйте сначала перевернуть устройство. MAC address sticker on bottom of device.

PS Я связался с производителем, адрес которого зарегистрирован, и они сказали, что несделать эту модель и чтобы другие производители копировали свои MAC-адреса.

0 голосов
/ 10 марта 2014

Прямо сейчас (март 2014 г.) Google не предоставляет API для Ethernet

Это разум, потому что у нас нет способа получить ethernet mac, как в случае с Wi-Fi.

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

Одной из альтернатив является чтение файла eth0. Пожалуйста, дайте мне знать, если кто-то знает иначе!

...