Подтвердить что ты не робот

Получите MAC-адрес Ethernet для Android (не интерфейс Wi-Fi)

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

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

Спасибо заранее!

4b9b3361

Ответ 1

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

Ответ 2

Это мое решение, основанное на ответе 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;
    }
}

Ответ 3

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

Ответ 4

Сейчас (март 2014 года) Google не причисляет API к Ethernet

Это rason, потому что у нас нет способа получить mac ethernet как в случае wifi.

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

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

Ответ 5

этот способ использовать 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);

Ответ 6

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

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

Затем я перевернул коробку и там наклейка на нижней части устройства.

Итак, если вы не нуждаетесь в нем программно, попробуйте сначала перенести устройство. MAC-адрес наклейка на нижней части устройства.

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