`
dreamoftch
  • 浏览: 495357 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 获取 电脑 主板和硬盘序列号

阅读更多
When you need to know hardware details, Java is not the best tool unless you call a JNI routine or an external utility. The JNI solution is always the best because it is designed to interact closely with Java but it may be more complex to develop. If your need is simple (no interaction) and the need to be cross plateform is not present then calling an external utility is maybe "a good enough" choice.
如上所述,要想获取硬件信息,java不是最好的方式。。。
In these 2 examples, we create the appropriate VBS script file on-the-fly and capture its output. They are very Windows oriented since they rely on the "Windows Script Host" to execute the generated scripts.

The vbscript queries a WMI class to get a specific hardware information. Here we are using the Win32_BaseBoard but they are many others, see http://msdn2.microsoft.com/en-us/library/aa389273.aspx for complete list.
Motherboard serial number
//通过vbscript的方式获取主板序列号
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class MiscUtils {
  private MiscUtils() {  }

  public static String getMotherboardSN() {
  String result = "";
    try {
      File file = File.createTempFile("realhowto",".vbs");
      file.deleteOnExit();
      FileWriter fw = new java.io.FileWriter(file);

      String vbs =
         "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
        + "Set colItems = objWMIService.ExecQuery _ \n"
        + "   (\"Select * from Win32_BaseBoard\") \n"
        + "For Each objItem in colItems \n"
        + "    Wscript.Echo objItem.SerialNumber \n"
        + "    exit for  ' do the first cpu only! \n"
        + "Next \n";

      fw.write(vbs);
      fw.close();
      Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
      BufferedReader input =
        new BufferedReader
          (new InputStreamReader(p.getInputStream()));
      String line;
      while ((line = input.readLine()) != null) {
         result += line;
      }
      input.close();
    }
    catch(Exception e){
        e.printStackTrace();
    }
    return result.trim();
  }

  public static void main(String[] args){
    String cpuId = MiscUtils.getMotherboardSN();
    javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
         null, cpuId, "Motherboard serial number",
         javax.swing.JOptionPane.DEFAULT_OPTION);
  }
}

Hard disk serial number
//获取硬盘序列号
This serial number is created by the OS where formatting the drive and it's not the manufacturer serial number. It's unique, because it is created on the fly based on the current time information. AFAIK, there is no API that return that the manufacturer SN. At best, the SN of the HD firmware can be read but this will involve some very low-level API calls. Keep in mind that even if you get that number, there is no warranty that it will be unique since each manufacturer can assign the SN as they wish.

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class DiskUtils {
  private DiskUtils() {  }

  public static String getSerialNumber(String drive) {
  String result = "";
    try {
      File file = File.createTempFile("realhowto",".vbs");
      file.deleteOnExit();
      FileWriter fw = new java.io.FileWriter(file);

      String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"
                  +"Set colDrives = objFSO.Drives\n"
                  +"Set objDrive = colDrives.item(\"" + drive + "\")\n"
                  +"Wscript.Echo objDrive.SerialNumber";  // see note
      fw.write(vbs);
      fw.close();
      Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
      BufferedReader input =
        new BufferedReader
          (new InputStreamReader(p.getInputStream()));
      String line;
      while ((line = input.readLine()) != null) {
         result += line;
      }
      input.close();
    }
    catch(Exception e){
        e.printStackTrace();
    }
    return result.trim();
  }

  public static void main(String[] args){
    String sn = DiskUtils.getSerialNumber("C");
    javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
         null, sn, "Serial Number of C:",
         javax.swing.JOptionPane.DEFAULT_OPTION);
  }
}

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UserInfoUtil {

	/**
	 * 获取IP
	 */
	public static String getIp() {
		String ip = "";
		try {
			InetAddress in = InetAddress.getLocalHost();
			ip = in.getHostAddress();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		return ip;
	}
	/**
	 * 获取mac地址
	 */
	public static String getMacAddr() {
		String macAddr = "";
		InetAddress addr;
		try {
			addr = InetAddress.getLocalHost();
			NetworkInterface dir = NetworkInterface.getByInetAddress(addr);
			byte[] dirMac = dir.getHardwareAddress();

			int count = 0;
			for (int b : dirMac) {
				if (b < 0)
					b = 256 + b;
				if (b == 0) {
					macAddr = macAddr.concat("00");
				}
				if (b > 0) {

					int a = b / 16;
					if (a == 10)
						macAddr = macAddr.concat("A");
					else if (a == 11)
						macAddr = macAddr.concat("B");
					else if (a == 12)
						macAddr = macAddr.concat("C");
					else if (a == 13)
						macAddr = macAddr.concat("D");
					else if (a == 14)
						macAddr = macAddr.concat("E");
					else if (a == 15)
						macAddr = macAddr.concat("F");
					else
						macAddr = macAddr.concat(String.valueOf(a));
					a = (b % 16);
					if (a == 10)
						macAddr = macAddr.concat("A");
					else if (a == 11)
						macAddr = macAddr.concat("B");
					else if (a == 12)
						macAddr = macAddr.concat("C");
					else if (a == 13)
						macAddr = macAddr.concat("D");
					else if (a == 14)
						macAddr = macAddr.concat("E");
					else if (a == 15)
						macAddr = macAddr.concat("F");
					else
						macAddr = macAddr.concat(String.valueOf(a));
				}
				if (count < dirMac.length - 1)
					macAddr = macAddr.concat("-");
				count++;
			}

		} catch (UnknownHostException e) {
			macAddr = e.getMessage();
		} catch (SocketException e) {
			macAddr = e.getMessage();
		}
		return macAddr;
	}
	/**
	 * 获取主板序列号
	 */
	public static String getMotherboardSN() {
		String result = "";
		try {
			File file = File.createTempFile("realhowto", ".vbs");
			file.deleteOnExit();
			FileWriter fw = new java.io.FileWriter(file);

			String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n" + "Set colItems = objWMIService.ExecQuery _ \n"
					+ "   (\"Select * from Win32_BaseBoard\") \n" + "For Each objItem in colItems \n" + "    Wscript.Echo objItem.SerialNumber \n"
					+ "    exit for  ' do the first cpu only! \n" + "Next \n";

			fw.write(vbs);
			fw.close();
			Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
			BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line;
			while ((line = input.readLine()) != null) {
				result += line;
			}
			input.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result.trim();
	}
	
}

 

 

 www.rgagnon.com/javadetails/java-0580.html

分享到:
评论

相关推荐

    Java获取CPU主板硬盘序列号.doc

    该方法通过使用 Java 的 Runtime 类和 Process 类来执行 Windows 脚本(VBScript),从而获取 CPU 主板和硬盘的序列号。 一、获取主板序列号 在获取主板序列号时,需要使用 Windows 的 WMI 服务(Windows ...

    用JAVA读取硬盘序列号

    因此,如果你需要在较新版本的Java中获取硬盘序列号,可能需要寻找其他的解决方案,如JNI或使用第三方库。 JNI允许Java代码直接调用操作系统级别的函数,例如C语言编写的系统库,这些库通常提供了获取硬件信息的...

    linux系统java通过jni方式获取硬盘序列号

    linux系统java通过jni方式获取硬盘序列号。包括makefile代码可以直接编译运行,代码解释请参考我的博客文章 http://blog.csdn.net/starter110/article/details/8186788

    java获取硬盘序列号,型号,修订号,缓存大小,柱面数,磁头数,扇区数

    总结一下,获取硬盘的序列号、型号、修订号、缓存大小以及物理参数如柱面数、磁头数和扇区数,需要利用操作系统特定的API或者第三方库,如`JDiskSerial`。在Java中,这样的操作往往涉及到JNI,因为标准库并不提供...

    java 通过jni技术实现获取linux的硬盘序列号.pdf

    综上所述,通过JNI技术实现Java获取Linux硬盘序列号的流程包括编写Java接口,生成头文件,编写和编译C代码,生成共享对象文件,并最终将文件放置到指定目录。这个过程涉及到跨语言编程、操作系统底层调用和动态链接...

    JAVA中获取硬盘序列号源码

    总结来说,Java获取硬盘序列号并非易事,因为它涉及到与操作系统的底层交互。通过JNA库,我们可以方便地调用C语言的API来实现这一功能,但需要注意的是,这可能会导致代码的可移植性降低。在实际开发中,根据项目...

    JSP利用JNI获取硬盘序列号等信息

    然而,由于Java的安全模型限制,直接在JSP中获取系统级别的硬件信息,如硬盘序列号,是不被允许的。为了克服这一限制,我们可以利用Java Native Interface(JNI)来调用本地操作系统API。本文将详细讲解如何通过JNI...

    java-getDisk.rar_Java 获取主板ID_java获取电脑ID

    在Java编程语言中,获取计算机硬件信息,如主板ID(也称为系统UUID)和硬盘分区编号,是一项常见的任务,尤其在系统管理和软件授权等领域。以下将详细解释如何使用Java实现这些功能。 首先,主板ID是计算机主板上的...

    硬盘序列号修改工具 任意修改

    在IT领域,硬盘序列号(硬盘ID)是由硬盘制造商分配给每个硬盘的独特标识符,通常用于追踪和验证硬件的合法性。这种修改行为通常与数据隐私、安全性和合法性问题相关。 描述中提到“用于修改逻辑序列号”,这可能是...

    java调用dll获取硬盘序列号

    在Java编程中,有时我们需要获取计算机硬件的相关信息,比如硬盘序列号。这通常是通过与操作系统进行交互来实现的,因为Java本身并不直接提供这样的功能。本文将深入探讨如何使用Java调用DLL(动态链接库)来获取...

    java获取硬盘序列号,CPU.zip

    在Java编程语言中,获取计算机硬件信息,如硬盘序列号和CPU信息,是常见的系统级操作,这在软件安装、设备识别或者系统监控等场景中非常有用。下面将详细讲解如何利用Java实现这两个功能。 首先,获取硬盘序列号。...

    JAVA获取计算机硬盘序列号、分区卷标号、MAC地址、IP地址、计算机名称

    该jar工具包是通过DiskID.dll获取计算机硬盘序列号、分区卷标号、MAC地址、IP地址、计算机名称等的信息,获取内容如下: 计算机名称:201709071714 硬盘序列号:183534442995 C分区卷标号:29F513CB MAC地址:F0-A9-59-...

    硬盘序列号读取diskid

    硬盘序列号通常用于跟踪和支持目的,也是防止非法复制和盗版的重要手段。本文将深入探讨如何使用`diskid`工具来读取硬盘的序列号。 `diskid`是一个命令行实用程序,广泛应用于Linux系统中,用于获取硬盘的详细信息...

    获取硬盘唯一序列号和机器唯一id

    在IT领域,获取硬盘唯一序列号和机器唯一ID是常见的需求,这主要涉及到系统管理和软件激活等方面。硬盘序列号和机器唯一ID(Machine ID或Machine Unique Identifier)是计算机硬件的重要标识,它们为软件开发者提供...

    MAC地址cpu硬盘序列号一键查看器

    总的来说,这款“MAC地址cpu硬盘序列号一键查看器”提供了便利的方式来获取计算机的关键硬件信息,而Java环境的依赖则意味着它具有跨平台的能力,可以在支持Java的任何操作系统上运行。对于不熟悉如何获取这些信息的...

    获取CPUID MAC编号,硬盘序列号的代码

    前段时间,公司让写一个授权文件,要求软件只能在某台及其上运行,只要脱离该机器,就不能运行,因此,我参考了获取CPUID、MACID和硬盘序列号的获取信息代码,将软件和这些进行加密绑定。感觉这些还是挺有用的,大家...

    硬盘序列号获取

    了解了这些方法后,我们可以创建自定义脚本或工具,根据特定需求来获取和处理硬盘序列号。例如,在企业环境中,这可以用于自动化设备注册、软件分发或故障排查。在处理时,需要注意保护用户隐私,因为硬盘序列号可能...

    获取硬盘物理序列号及型号

    在IT领域,硬件信息的获取是系统管理和故障排查的重要环节,特别是硬盘的物理序列号和型号,它们是硬盘独一无二的标识符,对于诊断硬盘问题、防止数据盗取以及跟踪设备等有着重要作用。本文将深入探讨如何获取硬盘的...

Global site tag (gtag.js) - Google Analytics