Pegar o mac da placa

4 respostas
J

Como tive muitos problemas para encontrar algo que funcionasse para pegar o mac da placa tanto em windows e linux vou deixar aqui a solução
que me foi útil, aqui está um pouco do que eu achei na net e as alterações que eu fiz para poder funcionar, espero que seja útil para alguém.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package license;

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

/**
 *
 * @author jefersonsc
 */
public class NetworkInfo {
        public static  String getMacAddress() throws SocketException, UnknownHostException{ 
      
        String ip = InetAddress.getLocalHost().getHostAddress();
        String loopBack = ip.substring(0, 3);
        if(loopBack.equals("127")){
            ip = getFirstIP();
        }
        InetAddress localHost = InetAddress.getByName(ip);   
        NetworkInterface netInter = NetworkInterface.getByInetAddress(localHost);   
        byte[] macAddressBytes = netInter.getHardwareAddress();   

        String macAddress =  String.format ( "%1$02x-%2$02x-%3$02x-%4$02x-%5$02x-%6$02x",   
        macAddressBytes[0], macAddressBytes[1],   
        macAddressBytes[2], macAddressBytes[3],   
        macAddressBytes[4], macAddressBytes[5] ).toUpperCase();   

        return macAddress;   
  }
        
     static private String getFirstIP( ) {
        java.util.Enumeration<java.net.NetworkInterface> ifaces = null;
       
        try {
            ifaces = java.net.NetworkInterface.getNetworkInterfaces();
        } catch (java.net.SocketException e) { }
       
        for (; ifaces.hasMoreElements();) {
            java.util.Enumeration<java.net.InetAddress> addrs = ifaces.nextElement().getInetAddresses();
           
            for (; addrs.hasMoreElements(); ) {
                java.net.InetAddress addr = addrs.nextElement();
                if (!addr.isLoopbackAddress() && !(addr instanceof java.net.Inet6Address))
                    return addr.getHostName();
            }
           
        }
        return "127.0.0.1";
    } 
    /*
     * Main
     */
    public final static void main(String[] args) {
        try {
            System.out.println("Network infos");

            System.out.println("  Operating System: " + System.getProperty("os.name"));
            System.out.println("  IP/Localhost: " + InetAddress.getLocalHost().getHostAddress());
            System.out.println("  MAC Address: " + getMacAddress());
        } catch(Throwable t) {
            t.printStackTrace();
        }
    }
}//By Jeferson Chanan

4 Respostas

R

muito bom

R

j_chanan:
Como tive muitos problemas para encontrar algo que funcionasse para pegar o mac da placa tanto em windows e linux vou deixar aqui a solução
que me foi útil, aqui está um pouco do que eu achei na net e as alterações que eu fiz para poder funcionar, espero que seja útil para alguém.

ahmmm ta…
pois eh tem um post parecido…
http://www.guj.com.br/posts/list/83460.java

J

RobsonFagundes
“ahmmm ta…
pois eh tem um post parecido…
http://www.guj.com.br/posts/list/83460.java

Bom se vc testar a classe que esta postada verá que dependendo da configuração do linux ele vai pegar o endereço de loopBack e não vai obter o mac da placa
já tinha visto aquele post e feito os testes

A

O JUG faz isso há alguns anos :))

Criado 9 de setembro de 2008
Ultima resposta 10 de set. de 2008
Respostas 4
Participantes 4