跪求在JAVA里如何获得CPU的序列号,和硬盘的序列号。

2024年11月20日 04:50
有1个网友回答
网友(1):

  利用Runtime call操作系统的命令,具体的命令取决于不同的操作系统,注意不要调用Runtime.getRuntime().exec(String)接口,要用Runtime.getRuntime().exec(String[])这个接口,不然复杂命令的执行会有问题。例子如下(拿cpu个数,其他类似):
  定义命令:
  WindowsCmd ="cmd.exe /c echo %NUMBER_OF_PROCESSORS%";//windows的特殊
  SolarisCmd = {"/bin/sh", "-c", "/usr/sbin/psrinfo | wc -l"};
  AIXCmd = {"/bin/sh", "-c", "/usr/sbin/lsdev -Cc processor | wc -l"};
  HPUXCmd = {"/bin/sh", "-c", "echo \"map\" | /usr/sbin/cstm | grep CPU | wc -l "};
  LinuxCmd = {"/bin/sh", "-c", "cat /proc/cpuinfo | grep ^process | wc -l"};

  然后判断系统:
  os = System.getProperty("os.name").toLowerCase();

  根据不同的操作系统call不同的命令。
  */
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.LineNumberReader;

  public class GetMACAddress
  {
  public String getMACAddress(String ipAddress)
  {
  String str = "",strMAC = "",macAddress = "";
  try
  {
  Process pp = Runtime.getRuntime().exec("nbtstat -a " + ipAddress);
  InputStreamReader ir = new InputStreamReader(pp.getInputStream());
  LineNumberReader input = new LineNumberReader(ir);
  for(int i = 1;i < 100;i++)
  {
  str = input.readLine();
  if(str != null)
  {
  if(str.indexOf("MAC Address") > 1)
  {
  strMAC = str.substring(str.indexOf("MAC Address") + 14,str.length());
  break;
  }
  }
  }
  }
  catch(IOException ex)
  {
  return "Can't Get MAC Address!";
  }
  //
  if(strMAC.length() < 17)
  {
  return "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);
  //
  return macAddress;
  }

  public static void main(String[] args)
  {
  GetMACAddress getMACAddress = new GetMACAddress();
  System.out.println(getMACAddress.getMACAddress("172.18.8.225"));

  try
  {
  java.lang.Process proc = Runtime.getRuntime().exec("ipconfig /all");
  InputStream istr = proc.getInputStream();
  byte[] data = new byte[1024];
  istr.read(data);
  String netdata = new String(data);
  System.out.println("Your Mac Address=" + procAll(netdata));
  }
  catch(IOException e)
  {
  System.out.println("error=" + e);
  }
  }

  public static String procAll(String str)
  {
  return procStringEnd(procFirstMac(procAddress(str)));
  }

  public static String procAddress(String str)
  {
  int indexof = str.indexOf("Physical Address");
  if(indexof > 0)
  {
  return str.substring(indexof,str.length());
  }
  return str;
  }

  public static String procFirstMac(String str)
  {
  int indexof = str.indexOf(":");
  if(indexof > 0)
  {
  return str.substring(indexof + 1,str.length()).trim();
  }
  return str;
  }

  public static String procStringEnd(String str)
  {
  int indexof = str.indexOf("\r");
  if(indexof > 0)
  {
  return str.substring(0,indexof).trim();
  }
  return str;
  }
  }

  import java.util.Vector;

  class GetNetMAC
  {
  //网卡物理地址长度
  static private final int _physicalLength = 16;

  public static void main(String[] args)
  {
  //output you computer phycail ip address
  System.out.println("The MAC Addressis:\t" + getPhysicalAddress());
  }

  static public String getPhysicalAddress()
  {
  GetNetMACShell shell = new GetNetMACShell();
  String cmd = "cmd.exe /c ipconfig/all";
  Vector result;
  result = shell.execute(cmd);
  return parseCmd(result.toString());
  }

  //从字符串中解析出所需要获得的字符串
  static private String parseCmd(String s)
  {
  String find = "Physical Address. . . . . . . . . :";
  int findIndex = s.indexOf(find);
  if(findIndex == -1)
  {
  return "not find";
  }
  else
  {
  return s.substring(findIndex + find.length() + 1,findIndex + find.length() + 1 + _physicalLength);
  }
  }
  }

  import java.io.BufferedReader;
  import java.io.DataInputStream;
  import java.io.InputStreamReader;
  import java.util.Vector;

  public class GetNetMACShell
  {
  private Process process = null;

  public Vector execute(String shellCommand)
  {
  try
  {
  Start(shellCommand);
  Vector vResult = new Vector();
  DataInputStream in = new DataInputStream(process.getInputStream());
  BufferedReader reader = new BufferedReader(new InputStreamReader(in));

  String line;
  do
  {
  line = reader.readLine();
  if(line == null)
  {
  break;
  }
  else
  {
  vResult.addElement(line);
  }
  }
  while(true);
  reader.close();
  return vResult;

  }
  catch(Exception e)
  {
  //error
  return null;
  }
  }

  public void Start(String shellCommand)
  {
  try
  {
  if(process != null)
  {
  kill();
  }
  Runtime sys = Runtime.getRuntime();
  process = sys.exec(shellCommand);
  }
  catch(Exception e)
  {
  System.out.println(e.toString());
  }
  }

  public void kill()
  {
  if(process != null)
  {
  process.destroy();
  process = null;
  }
  }
  }

  试试是否可以:)