¿Cómo obtener el número de serie de la CPU y el número de serie del disco duro en JAVA?

Utilice comandos de tiempo de ejecución para llamar al sistema operativo. Los comandos específicos dependen de diferentes sistemas operativos. Tenga cuidado de no llamar al tiempo de ejecución de la interfaz. obtener tiempo de ejecución(). exec (cadena), pero usando la interfaz en tiempo de ejecución. obtener tiempo de ejecución(). exec (cadena []); de lo contrario, habrá problemas con la ejecución de comandos complejos. El ejemplo es el siguiente (tomando como ejemplo el número de CPU, todo lo demás es similar):

Definir comando:

windows cmd = " cmd . exe/c echo % NÚMERO _ OF _ PROCESSORS % " ; //Funciones especiales de Windows

SolarisCmd = {"/bin/sh ", "-c ", "/usr/sbin/psrinfo WC-l " };

AIXCmd = {"/bin/sh ", "-c ", "/usr/sbin/lsdev -Cc procesador | WC-l " };

HPUXCmd = {"/ bin/sh ", "-c ", " echo \ " map \ " |/usr/sbin/cstm | grep CPU-l " };

LinuxCmd = {"/bin/sh " , "-c " , " cat/proc/CPU info | grep ^process | WC-l " };

Luego determine el sistema:

os = System.getProperty(" os.nombre "). toLowerCase();

Llame a diferentes comandos según los diferentes sistemas operativos.

*/

Importar Java .io .io excepción;

Importar Java io . inputstreamreader;

Importar Java . io . lector de números de línea;

Clase pública GetMACAddress

{

Cadena pública getMACAddress(String ipAddress)

{

Cadena str = " ", strMAC = " ", macAddress =

Probar

{

Proceso pp = Runtime.getRuntime().

exec(" nbtstat-a "+dirección IP);

InputStreamReader IR = nuevo InputStreamReader(PP . getinputstream());

entrada del lector de número de línea = nuevo lector de número de línea(IR );

for(int I = 1;i<100;i++)

{

str = input . if(str!=null)

{

if(str . index of(" Dirección MAC ")& gt; 1)

{

strMAC = str . substring(str . index of(" Dirección MAC ")+14, str . length()

Break

}

}

}

}

Catch (IOException ex)

{

Devuelve " ¡No se puede obtener la dirección MAC!";

}

//

if(strmac . length()<17)

{

Devuelve "¡Error!";

}

macAddress = strMAC.substring(0, 2) +":"

+ strMAC.substring(3,5) +":"

+ strMAC.substring(6,8) +":"

+ strMAC.substring(9,11 ) + ":"

+ strMAC.substring(12,14) +":"

+ strMAC.substring(15,17);

/ /

Devolver dirección mac

}

Public static void main(String[] args)

{

getmac dirección dirección getmac = nueva dirección getmac();

system . println(dirección getmac . dirección getmac(" 172.18 . 8 . 225 ")); p>

{

Java idioma proc = tiempo de ejecución.

exec(" ipconfig/all ");

InputStream istr = proc proc ;

byte[] datos = nuevo byte[1024];

istr.read(data);

String netdata = nueva cadena (datos);

System.out.println("Su dirección Mac = "+procAll(net data));

}

Captura (IOException e)

{

sistema fuera . println(" error = "+e );

}

}

Cadena estática pública procAll(string str)

{

Devuelve proc stringend(procFirstMac (procAddress(str));

}

Cadena estática pública procAddress(string str)

{

int indexof = str. indexOf("dirección física");

if(índice de & gt; 0)

{

Devuelve str.substring (indexof, str . length( ));

}

Cadena de retorno

}

Cadena estática pública procFirstMac(String str)

{

int índice de = str . índice de(":");

if(índice de & gt; 0)

{

Devuelve str.substring(indexof + 1, str.length()). trim();

}

Devuelve cadena de caracteres;

}

Cadena estática pública procStringEnd(String str)

{

int index of = str index of( " \ r ");

if(índice de >0)

{

Devuelve str.substring(0, índice de).

trim();

}

Cadena de retorno;

}

}

Importar Java .util. vector;

Clase GetNetMAC

{

//Longitud de la dirección física de la tarjeta de red

Estática privada final int _ longitud física = 16;

Public static void main(String[] args)

{

//Ingrese la dirección IP de su computadora

system. out .println(" La dirección MAC es:\ t "+getPhysicalAddress());

}

Cadena pública estática getPhysicalAddress()

{< / p>

GetNetMACShell shell = new GetNetMACShell();

cadena cmd = " cmd . exe/c ipconfig/all ";

Resultado vectorial;

resultado = shell . ejecutar(cmd);

Devuelve parse cmd(resultado . tostring());

}

//Analizar de la cadena La cadena requerida.

Cadena privada estática parseCmd(string s)

{

String find = "Dirección física...

:";

int buscar índice = s . índice de(buscar);

if(findIndex == -1)

{

Devuelve "no encontrado";

}

Otros

{

Devuelve s subcadena(buscar índice+buscar . longitud ()+1, buscar índice+buscar longitud()+1+_ longitud física);

}

}

}

Importar Java.io.bufferedreader;

Importar Java.io.data inputstream;

Importar Java.io.inputstreamreader;

Importar Java util. vector;

Clase pública GetNetMACShell

{

Proceso de proceso privado = null

Ejecución de vector público (comando de shell de cadena)

{

Pruebe

{

inicio(comando shell);

Vector vResult = nuevo Vector( );

flujo de entrada de datos en = nuevo flujo de entrada de datos(proceso . getinputstream());

lector en búfer lector = nuevo lector en búfer (nuevo InputStreamReader(in));

cadena;

hacer

{

línea = lector . readline();

if(línea == nulo)

{

Romper;

}

Otro

{

vresult .añadir elemento( línea);

}

}

mientras(verdadero);

lector close();

p>

Devolver vResult

}

Captura (Excepción e)

{

//Error

Devolver nulo

}

}

Inicio de anulación pública (String shellCommand)

{

prueba

{

if (¡proceso! = vacío)

{

kill();

}

runtime sys = runtime . >

proceso = sys . exec(comando shell);

}

Capturar (excepción e)

{

sistema . fuera . println(e . tostring());

}

}

Public void kill()

{

si (¡proceso! = nulo)

{

proceso destruir();

proceso = nulo

. }

}

}

Pruébalo :)