El problema con la dirección MAC es que puede haber muchos adaptadores de red conectados a la computadora. La mayoría de los más nuevos tienen dos por defecto (wi-fi + cable). En tal situación, uno debería saber qué dirección MAC del adaptador debe usarse. Probé la solución MAC en mi sistema, pero tengo 4 adaptadores (cable, WiFi, adaptador TAP para Virtual Box y uno para Bluetooth) y no pude decidir qué MAC debería tomar ... Si uno decidiera usar un adaptador que está actualmente en uso (tiene direcciones asignadas), aparece un nuevo problema ya que alguien puede tomar su computadora portátil y cambiar el adaptador de cable a wi-fi. Con esa condición MAC almacenada cuando la computadora portátil estaba conectada a través de un cable, ahora no será válida.
Por ejemplo esos son los adaptadores que encontré en mi sistema:
lo MS TCP Loopback interface
eth0 Intel(R) Centrino(R) Advanced-N 6205
eth1 Intel(R) 82579LM Gigabit Network Connection
eth2 VirtualBox Host-Only Ethernet Adapter
eth3 Sterownik serwera dostepu do sieci LAN Bluetooth
Código he utilizado para listarlos:
Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements()) {
NetworkInterface ni = nis.nextElement();
System.out.println(ni.getName() + " " + ni.getDisplayName());
}
En las opciones de escuchar en esta página, la más aceptable para yo, y el que he usado en mi solución es el de @Ozhan Duz, el otro, similar a la respuesta @finnw donde usó JACOB, y vale la pena mencionar es com4j - muestra que hace uso de WMI está disponible here:
ISWbemLocator wbemLocator = ClassFactory.createSWbemLocator();
ISWbemServices wbemServices = wbemLocator.connectServer("localhost","Root\\CIMv2","","","","",0,null);
ISWbemObjectSet result = wbemServices.execQuery("Select * from Win32_SystemEnclosure","WQL",16,null);
for(Com4jObject obj : result) {
ISWbemObject wo = obj.queryInterface(ISWbemObject.class);
System.out.println(wo.getObjectText_(0));
}
Esto imprimirá información de la computadora junto con el número de serie de la computadora. Tenga en cuenta que todas las clases requeridas por este ejemplo deben ser generadas por maven-com4j-plugin. Ejemplo de configuración para el experto-com4j-plugin:
<plugin>
<groupId>org.jvnet.com4j</groupId>
<artifactId>maven-com4j-plugin</artifactId>
<version>1.0</version>
<configuration>
<libId>565783C6-CB41-11D1-8B02-00600806D9B6</libId>
<package>win.wmi</package>
<outputDirectory>${project.build.directory}/generated-sources/com4j</outputDirectory>
</configuration>
<executions>
<execution>
<id>generate-wmi-bridge</id>
<goals>
<goal>gen</goal>
</goals>
</execution>
</executions>
</plugin>
configuración de encima le dirá Plugin para generar clases en el directorio de destino/Fuentes generadas/com4j en la carpeta del proyecto.
Para aquellos que les gustaría ver listos para su uso solución, estoy incluyendo enlaces a las tres clases que escribí para obtener SN máquina en Windows, Linux y Mac OS:
¿Es esto para un plan antipiratería? –
probablemente va a ser una llamada JNI, nada Java nativo – curtisk
Sí, es para algo como el esquema antipiratería, para identificar una computadora. – Gohu