Holen Sie sich die mac-Adresse in Java getHardwareAddress nicht-deterministisch
Ich hatte ein problem, um die mac-Adresse einer Maschine, die wurde gelöst in diese Frage mit den Folgen code:
Process p = Runtime.getRuntime().exec("getmac /fo csv /nh");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
String line;
line = in.readLine();
String[] result = line.split(",");
System.out.println(result[0].replace('"', ' ').trim());
Allerdings würde ich gerne wissen, warum dieser code nicht funktioniert. Jedes mal, wenn er liest die MAC Adresse einen anderen Wert zurückgibt. Zuerst dachte ich, es war, weil getHash, vielleicht mit einer timestamp-ich weiß nicht... Aber auch das entfernen, das Ergebnis ändert.
Code
public static byte[] getMacAddress() {
try {
Enumeration<NetworkInterface> nwInterface = NetworkInterface.getNetworkInterfaces();
while (nwInterface.hasMoreElements()) {
NetworkInterface nis = nwInterface.nextElement();
if (nis != null) {
byte[] mac = nis.getHardwareAddress();
if (mac != null) {
/*
* Extract each array of mac address and generate a
* hashCode for it
*/
return mac;//.hashCode();
} else {
Logger.getLogger(Utils.class.getName()).log(Level.WARNING, "Address doesn't exist or is not accessible");
}
} else {
Logger.getLogger(Utils.class.getName()).log(Level.WARNING, "Network Interface for the specified address is not found.");
}
return null;
}
} catch (SocketException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
Ausgabe Beispiel (ich bin drucken direkt vom byte-array, aber seine genug, um zu sehen, die anderen denke ich)
[B@91cee
[B@95c083
[B@99681b
[B@a61164
[B@af8358
[B@b61fd1
[B@bb7465
[B@bfc8e0
[B@c2ff5
[B@c8f6f8
[B@d251a3
[B@d6c16c
[B@e2dae9
[B@ef5502
[B@f7f540
[B@f99ff5
[B@fec107
Vielen Dank im Voraus
- Sie drucken die Standard -
toString
von einem byte-array.
Du musst angemeldet sein, um einen Kommentar abzugeben.
B@91cee
tatsächlich ist das ErgebnistoString()
Methode derbyte[]
arrays.Ich würde dir empfehlen, drucken Sie den Wert mit
new String(mac)
statt.byte[].toString()
ist implementiert als:Da standardmäßig
Object.hashCode()
umgesetzt wird als Adresse im Speicher, so ist es nicht konsequent, wenn Sie sich neueObject
jeder Zeit.Edit:
Da der zurückgegebene byte in hex, so sollten Sie es zu konvertieren in dezimal-String. Der code sieht aus hier
Hier ist ein Beispiel aus Mkyong.com Website auf, wie man die MAC-Adresse in Java:
Lautet die Antwort der Spanier funktioniert nicht, wenn die Maschine nicht angeschlossen und es gibt verschiedene Werte sind abhängig von der Netzwerk Sie verbunden sind.
dieser ist nicht abhängig von irgendeiner ip-Adresse :