En s'appuyant sur les couches réseau du système d'exploitation, JAVA offre de nombreuses possibilités. Quelque soit l'OS, un poste peut être identifié sur un LAN à partir des données suivantes:
- identifiant du poste sur le réseau,
- adresse IP,
- Mac Address.
La fonction
getMacAddress() retourne la Mac Address du poste aussi bien sous Windows que sous Linux.
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
* Identifier un poste sur un LAN avec sa Mac Address
* @author fobec 2011
*/
public class NetworkHardware {
public static String getMacAddress() {
try {
InetAddress ia = InetAddress.getLocalHost();
System.out.println("nom sur le reseau : " + ia.getCanonicalHostName());
System.out.println("adresse ip : " + ia.getHostAddress());
System.out.println("reseau local : " + ia.isSiteLocalAddress());
NetworkInterface ni = NetworkInterface.getByInetAddress(ia);
System.out.println("interface reseau : "+ni.getDisplayName());
byte[] mac = ni.getHardwareAddress();
StringBuilder macaddress = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
macaddress.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
return macaddress.toString();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
}
return "";
}
public static void main(String args[]) {
System.out.println("la Mac adresse du poste : " +NetworkHardware.getMacAddress());
}
}
Exemple de consolenom sur le reseau : AXEL
adresse ip :192.168.2.114
reseau local :true
interface reseau :Miniport de pont MAC - Miniport d'ordonnancement de paquets
la Mac adresse du poste : 02-B1-43-DC-75-A1