Как я могу получить MAC-адрес моего компьютера? - PullRequest
0 голосов
/ 12 октября 2018

Я хочу получить свой MAC-адрес.Я использовал следующий код, чтобы сделать это.Но я получаю вывод как FF.Это не мой MAC-адрес.xx:xx:xx:xx:xx:ff это мой mac-адрес.

public String getMacAddress() {
    Enumeration<NetworkInterface> networks = null;
    String macaddress=null;
    try {
        networks = NetworkInterface.getNetworkInterfaces();
    } catch (SocketException e) {
        e.printStackTrace();
    }
    NetworkInterface inter;
    while (networks.hasMoreElements()) {
        inter = networks.nextElement();
        byte[] mac = null;
        try {
            mac = inter.getHardwareAddress();
        } catch (SocketException e) {
            e.printStackTrace();
        }
        if (mac != null) {
            for (int i = 0; i < mac.length; i++) {
                macaddress=String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
            }
            System.out.println("");
        }
    }
    return macaddress;
}

Как я могу получить свой MAC-адрес?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Есть 2 проблемы, которые я вижу.

Сначала вы переназначаете значение macaddress.Это означает, что всегда будет только последний байт из mac.Вторая проблема заключается в том, что вы выполняете итерацию по всем интерфейсам, которые есть на вашей машине, поэтому даже если вы изменили

macaddress = String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
macaddress += String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");

для добавления, а не назначения, вы получите строку со всеми MAC-адресами вашей машины.,Также вам придется инициализировать macaddress пустой строкой (поскольку вы не можете добавить к null).

Поскольку вы выполняете итерации по всем интерфейсам, как насчет возврата Collection вместо одногоString?Также может быть уместнее использовать StringBuilder.

public List<String> getMacAddress() { // Change return type from String to List<String>
    Enumeration<NetworkInterface> networks = null;
    try {
        networks = NetworkInterface.getNetworkInterfaces();
    } catch (SocketException e) {
        e.printStackTrace();
    }
    NetworkInterface inter;
    List<String> addresses = new ArrayList<>(); // Create list to store all MAC addresses
    while (networks.hasMoreElements()) {
        inter = networks.nextElement();
        byte[] mac = null;
        try {
            mac = inter.getHardwareAddress();
        } catch (SocketException e) {
            e.printStackTrace();
        }
        if (mac != null) {
            StringBuilder sb = new StringBuilder(); // Rather than appending with += use a String builder
            for (int i = 0; i < mac.length; i++) {
                sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); // Use append on the string builder
            }
            addresses.add(sb.toString()); // Add MAC address to the Collection
        }
    }
    return addresses; // Return collection rather than one String
}
0 голосов
/ 12 октября 2018

Я нашел это:

package com.mkyong;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;

public class App{

public static void main(String[] args){

InetAddress ip;
try {

    ip = InetAddress.getLocalHost();
    System.out.println("Current IP address : " + ip.getHostAddress());

    NetworkInterface network = NetworkInterface.getByInetAddress(ip);

    byte[] mac = network.getHardwareAddress();

    System.out.print("Current MAC address : ");

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < mac.length; i++) {
        sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
    }
    System.out.println(sb.toString());

   } catch (UnknownHostException e) {

    e.printStackTrace();

   }catch (SocketException e){

    e.printStackTrace();

  }

 }
}

Выход:

Текущий IP-адрес: 192.168.1.22 Текущий MAC-адрес: 00-26-B9-9B-61-BF

...