Capturar endereço MAC e IP... Alguém?

Aí, comunidade!!!

Como capturar o endereço mac e o endereço IP das interfaces de rede do computador local em aplicações java???

Ajudem-me, quem souber!!!

Obrigado pela força!

[code]public final class NetworkInfo {

public NetworkInfo(){
	
}

private final static String getMacAddress() throws IOException {
    String os = System.getProperty("os.name");
    try {
        if(os.startsWith("Windows")) {
            return windowsParseMacAddress(windowsRunIpConfigCommand());
        } else if(os.startsWith("Linux")) {
            return linuxParseMacAddress(linuxRunIfConfigCommand());
        } else {
            throw new IOException("Sistema operacional desconhecido: " + os);
        }
    } catch(ParseException ex) {
        ex.printStackTrace();
        throw new IOException(ex.getMessage());
    }
}

/*
 * Linux
 */
private final static String linuxParseMacAddress(String ipConfigResponse) throws ParseException {
    String localHost = null;
    try {
        localHost = InetAddress.getLocalHost().getHostAddress();
    } catch(java.net.UnknownHostException ex) {
        ex.printStackTrace();
        throw new ParseException(ex.getMessage(), 0);
    }

    StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
    String lastMacAddress = null;

    while(tokenizer.hasMoreTokens()) {
        String line = tokenizer.nextToken().trim();
        boolean containsLocalHost = line.indexOf(localHost) >= 0;

        //IP 
        if(containsLocalHost && lastMacAddress != null) {
            return lastMacAddress;
        }

        //MAC address
        int macAddressPosition = line.indexOf("HWaddr");
        if(macAddressPosition <= 0) continue;

        String macAddressCandidate = line.substring(macAddressPosition + 6).trim();
        if(linuxIsMacAddress(macAddressCandidate)) {
            lastMacAddress = macAddressCandidate;
            continue;
        }
    }

    ParseException ex = new ParseException
        ("Nao foi possível ler o MAC address para " + localHost + " de [" + ipConfigResponse + "]", 0);
    ex.printStackTrace();
    throw ex;
}

private final static boolean linuxIsMacAddress(String macAddressCandidate) {
    if(macAddressCandidate.length() != 17) return false;
    return true;
}

private final static String linuxRunIfConfigCommand() throws IOException {
    Process p = Runtime.getRuntime().exec("ifconfig");
    InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

    StringBuffer buffer= new StringBuffer();
    for (;;) {
        int c = stdoutStream.read();
        if (c == -1) break;
        buffer.append((char)c);
    }
    String outputText = buffer.toString();

    stdoutStream.close();

    return outputText;
}

/*
 * Windows
 */
private final static String windowsParseMacAddress(String ipConfigResponse) throws ParseException {
    String localHost = null;
    try {
        localHost = InetAddress.getLocalHost().getHostAddress();
    } catch(java.net.UnknownHostException ex) {
        ex.printStackTrace();
        throw new ParseException(ex.getMessage(), 0);
    }

    StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
    String lastMacAddress = null;

    while(tokenizer.hasMoreTokens()) {
        String line = tokenizer.nextToken().trim();

        //IP 
        if(line.endsWith(localHost) && lastMacAddress != null) {
            return lastMacAddress;
        }

        //MAC address
        int macAddressPosition = line.indexOf(":");
        if(macAddressPosition <= 0) continue;

        String macAddressCandidate = line.substring(macAddressPosition + 1).trim();
        if(windowsIsMacAddress(macAddressCandidate)) {
            lastMacAddress = macAddressCandidate;
            continue;
        }
    }

    ParseException ex = new ParseException("Nao foi possível ler o MAC address de [" + ipConfigResponse + "]", 0);
    ex.printStackTrace();
    throw ex;
}

private final static boolean windowsIsMacAddress(String macAddressCandidate) {
    if(macAddressCandidate.length() != 17) return false;

    return true;
}

private final static String windowsRunIpConfigCommand() throws IOException {
    Process p = Runtime.getRuntime().exec("ipconfig /all");
    InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

    StringBuffer buffer= new StringBuffer();
    for (;;) {
        int c = stdoutStream.read();
        if (c == -1) break;
        buffer.append((char)c);
    }
    String outputText = buffer.toString();

    stdoutStream.close();

    return outputText;
}

public final static void main(String[] args) {
try {
System.out.println(“Informacoes”);
System.out.println("Sistema operacional: " + System.getProperty(“os.name”));
System.out.println("IP/Localhost: " + InetAddress.getLocalHost().getHostAddress());
System.out.println("MAC Address: " + getMacAddress());
System.out.println("Nome da maquina: " + InetAddress.getLocalHost().getHostName());
System.out.println("Nome completo da maquina: " + InetAddress.getLocalHost().getCanonicalHostName());
} catch(Throwable t) {
t.printStackTrace();
}
}

}
[/code]

A busca do fórum é seu guia, e nada te faltará

Valeu, brother!!!
Mandou muito bem, avsouza!!!
Valeu mesmo!

[color=red][b]IiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiI!!!

Olha erro que deu!!![/b][/color]

[color=black]run:
Informações da Máquina
Sistema operacional: Linux
IP/Localhost: 127.0.1.1[/color]
[color=darkred]java.text.ParseException: Nao foi possível ler o MAC address para 127.0.1.1 de [eth0 Encapsulamento do Link: Ethernet Endereço de HW 00:17:31:9B:86:A8
inet end.: 192.168.0.1 Bcast:192.168.0.255 Masc:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Métrica:1
pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
IRQ:20 Endereço de E/S:0xc000

lo Encapsulamento do Link: Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACK RUNNING MTU:16436 Métrica:1
pacotes RX:18745 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:18745 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:0
RX bytes:10138836 (9.6 MB) TX bytes:10138836 (9.6 MB)

wlan0 Encapsulamento do Link: Ethernet Endereço de HW 00:40:F4:E2:00:18
inet end.: 192.168.10.44 Bcast:192.168.10.255 Masc:255.255.255.0
endereço inet6: fe80::240:f4ff:fee2:18/64 Escopo:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1
pacotes RX:13835 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:9032 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:7163133 (6.8 MB) TX bytes:1776078 (1.6 MB)
IRQ:23 Memória:fbfe0000-fbff0000

][/color]
[color=blue]at javaapplication7.infoNetwork.linuxParseMacAddress(infoNetwork.java:70)
at javaapplication7.infoNetwork.getMacAddress(infoNetwork.java:29)
at javaapplication7.infoNetwork.main(infoNetwork.java:154)[/color]
[color=darkred]java.text.ParseException: Nao foi possível ler o MAC address para 127.0.1.1 de [eth0 Encapsulamento do Link: Ethernet Endereço de HW 00:17:31:9B:86:A8
inet end.: 192.168.0.1 Bcast:192.168.0.255 Masc:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Métrica:1
pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
IRQ:20 Endereço de E/S:0xc000

lo Encapsulamento do Link: Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACK RUNNING MTU:16436 Métrica:1
pacotes RX:18745 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:18745 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:0
RX bytes:10138836 (9.6 MB) TX bytes:10138836 (9.6 MB)

wlan0 Encapsulamento do Link: Ethernet Endereço de HW 00:40:F4:E2:00:18
inet end.: 192.168.10.44 Bcast:192.168.10.255 Masc:255.255.255.0
endereço inet6: fe80::240:f4ff:fee2:18/64 Escopo:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1
pacotes RX:13835 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:9032 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:7163133 (6.8 MB) TX bytes:1776078 (1.6 MB)
IRQ:23 Memória:fbfe0000-fbff0000

][/color]
[color=blue]at javaapplication7.infoNetwork.linuxParseMacAddress(infoNetwork.java:70)
at javaapplication7.infoNetwork.getMacAddress(infoNetwork.java:29)
at javaapplication7.infoNetwork.main(infoNetwork.java:154)[/color]
[color=darkred]java.io.IOException: Nao foi possível ler o MAC address para 127.0.1.1 de [eth0 Encapsulamento do Link: Ethernet Endereço de HW 00:17:31:9B:86:A8
inet end.: 192.168.0.1 Bcast:192.168.0.255 Masc:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Métrica:1
pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
IRQ:20 Endereço de E/S:0xc000

lo Encapsulamento do Link: Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACK RUNNING MTU:16436 Métrica:1
pacotes RX:18745 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:18745 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:0
RX bytes:10138836 (9.6 MB) TX bytes:10138836 (9.6 MB)

wlan0 Encapsulamento do Link: Ethernet Endereço de HW 00:40:F4:E2:00:18
inet end.: 192.168.10.44 Bcast:192.168.10.255 Masc:255.255.255.0
endereço inet6: fe80::240:f4ff:fee2:18/64 Escopo:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1
pacotes RX:13835 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:9032 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:7163133 (6.8 MB) TX bytes:1776078 (1.6 MB)
IRQ:23 Memória:fbfe0000-fbff0000

][/color]
[color=blue]at javaapplication7.infoNetwork.getMacAddress(infoNetwork.java:35)
at javaapplication7.infoNetwork.main(infoNetwork.java:154)[/color]
[color=black]EXECUTADO COM SUCESSO (tempo total: 0 segundos)[/color]
[color=red][color=orange]
[b]Tipo, eu queria armazenas numa variável o endereço MAC e em outra o IP da interface…
Ou então, se tiver como eu passar o IP da interface e ele me retornar o MAC da mesma e vice-versa…

Alguém me ajudeeeeeeeee!!![/b][/color][/color]

ixi, pior que nunca testei isso no linux

Não tem nem ideia do que possa estar errado???

como eu faria pra enviar estes dados coletador para uma outra máquina ( via web) ?

[color=darkred][/color]Olá Caros amigos,

Eu estou a algum tempo procurando por um capturador de MacAddress, pois estou fazendo uma aplicação em php, onde meu cliente deseja que somente faça login na aplicação as maquinas que estão em sua empresa. Minha dificuldade até agora´foi de achar um script que capturasse o MacAddress da maquina que está acessando o aplicativo, para compará-lo com o cadastrado no banco, então cheguei até aqui, e gostaria de saber como eu faço para poder ver o MacAddress, colocálo em uma variavel de preferencia php para usá-lo na validacao da aplicação? O código abaixo é javascript? Roda em um servidor? Alguém pode me ajudar?

Obrigado a todos.
Moacir


[quote=avsouza][code]public final class NetworkInfo {

public NetworkInfo(){
	
}

private final static String getMacAddress() throws IOException {
    String os = System.getProperty("os.name");
    try {
        if(os.startsWith("Windows")) {
            return windowsParseMacAddress(windowsRunIpConfigCommand());
        } else if(os.startsWith("Linux")) {
            return linuxParseMacAddress(linuxRunIfConfigCommand());
        } else {
            throw new IOException("Sistema operacional desconhecido: " + os);
        }
    } catch(ParseException ex) {
        ex.printStackTrace();
        throw new IOException(ex.getMessage());
    }
}

/*
 * Linux
 */
private final static String linuxParseMacAddress(String ipConfigResponse) throws ParseException {
    String localHost = null;
    try {
        localHost = InetAddress.getLocalHost().getHostAddress();
    } catch(java.net.UnknownHostException ex) {
        ex.printStackTrace();
        throw new ParseException(ex.getMessage(), 0);
    }

    StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
    String lastMacAddress = null;

    while(tokenizer.hasMoreTokens()) {
        String line = tokenizer.nextToken().trim();
        boolean containsLocalHost = line.indexOf(localHost) >= 0;

        //IP 
        if(containsLocalHost && lastMacAddress != null) {
            return lastMacAddress;
        }

        //MAC address
        int macAddressPosition = line.indexOf("HWaddr");
        if(macAddressPosition <= 0) continue;

        String macAddressCandidate = line.substring(macAddressPosition + 6).trim();
        if(linuxIsMacAddress(macAddressCandidate)) {
            lastMacAddress = macAddressCandidate;
            continue;
        }
    }

    ParseException ex = new ParseException
        ("Nao foi possível ler o MAC address para " + localHost + " de [" + ipConfigResponse + "]", 0);
    ex.printStackTrace();
    throw ex;
}

private final static boolean linuxIsMacAddress(String macAddressCandidate) {
    if(macAddressCandidate.length() != 17) return false;
    return true;
}

private final static String linuxRunIfConfigCommand() throws IOException {
    Process p = Runtime.getRuntime().exec("ifconfig");
    InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

    StringBuffer buffer= new StringBuffer();
    for (;;) {
        int c = stdoutStream.read();
        if (c == -1) break;
        buffer.append((char)c);
    }
    String outputText = buffer.toString();

    stdoutStream.close();

    return outputText;
}

/*
 * Windows
 */
private final static String windowsParseMacAddress(String ipConfigResponse) throws ParseException {
    String localHost = null;
    try {
        localHost = InetAddress.getLocalHost().getHostAddress();
    } catch(java.net.UnknownHostException ex) {
        ex.printStackTrace();
        throw new ParseException(ex.getMessage(), 0);
    }

    StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
    String lastMacAddress = null;

    while(tokenizer.hasMoreTokens()) {
        String line = tokenizer.nextToken().trim();

        //IP 
        if(line.endsWith(localHost) && lastMacAddress != null) {
            return lastMacAddress;
        }

        //MAC address
        int macAddressPosition = line.indexOf(":");
        if(macAddressPosition <= 0) continue;

        String macAddressCandidate = line.substring(macAddressPosition + 1).trim();
        if(windowsIsMacAddress(macAddressCandidate)) {
            lastMacAddress = macAddressCandidate;
            continue;
        }
    }

    ParseException ex = new ParseException("Nao foi possível ler o MAC address de [" + ipConfigResponse + "]", 0);
    ex.printStackTrace();
    throw ex;
}

private final static boolean windowsIsMacAddress(String macAddressCandidate) {
    if(macAddressCandidate.length() != 17) return false;

    return true;
}

private final static String windowsRunIpConfigCommand() throws IOException {
    Process p = Runtime.getRuntime().exec("ipconfig /all");
    InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

    StringBuffer buffer= new StringBuffer();
    for (;;) {
        int c = stdoutStream.read();
        if (c == -1) break;
        buffer.append((char)c);
    }
    String outputText = buffer.toString();

    stdoutStream.close();

    return outputText;
}

public final static void main(String[] args) {
try {
System.out.println(“Informacoes”);
System.out.println("Sistema operacional: " + System.getProperty(“os.name”));
System.out.println("IP/Localhost: " + InetAddress.getLocalHost().getHostAddress());
System.out.println("MAC Address: " + getMacAddress());
System.out.println("Nome da maquina: " + InetAddress.getLocalHost().getHostName());
System.out.println("Nome completo da maquina: " + InetAddress.getLocalHost().getCanonicalHostName());
} catch(Throwable t) {
t.printStackTrace();
}
}

}
[/code][/quote]

Muito mais simples que isso. O Java já tem suporte para a leitura do MAC

dá uma olhada neste blog