Obtenir l'adresse mac de Java à l'aide de getHardwareAddress non-déterministe
J'ai eu un problème pour obtenir l'adresse mac d'une machine, qui a été résolu dans cette question l'aide du code ci-dessous:
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());
Cependant, je voudrais savoir pourquoi ce code ne fonctionne pas. Chaque fois qu'il lit l'adresse MAC, il renvoie une valeur différente. J'ai d'abord pensé que c'était parce getHash, peut-être l'aide d'un timestamp, je ne sais pas... Mais même en le retirant le résultat change.
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;
}
}
Exemple de sortie (je suis d'impression directement à partir du tableau d'octets, mais ses assez pour voir que les différentes je pense)
[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
Merci d'avance
Vous êtes d'impression par défaut
toString
d'un tableau d'octets.OriginalL'auteur Pedro Dusso | 2012-06-09
Vous devez vous connecter pour publier un commentaire.
B@91cee
est en fait le résultattoString()
méthode de labyte[]
tableaux.Je vous suggère d'imprimer la valeur à l'aide de
new String(mac)
à la place.byte[].toString()
est mis en œuvre comme:Depuis par défaut
Object.hashCode()
est mis en œuvre comme adresse en mémoire, il n'est donc pas cohérent que vous êtes la création de nouveauxObject
à chaque fois.Edit:
Depuis le retour de l'octet en hexadécimal, donc vous devez le convertir en une Chaîne décimale. Le code peut le voir à partir de ici
Voir ma réponse mis à jour.
OriginalL'auteur Pau Kiat Wee
Voici un exemple de Mkyong.com site web sur la façon d'obtenir l'adresse MAC en Java:
OriginalL'auteur Eduardo Sanchez-Ros
La réponse de l'espagnol ne fonctionne pas si l'appareil n'est pas connecté et il va donner différentes valeurs dépendent du réseau auquel vous êtes connecté.
cette dernière n'est pas fonction de l'adresse ip :
OriginalL'auteur amghar
OriginalL'auteur s13o