Java获得CPU序列号和网卡Mac地址
2009-07-15 10:16
435 查看
package cn.com.MAC; /** * 利用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"));//00-50-56-C0-00-08 System.out.println("MAC地址:"+getMACAddress.getMACAddress("192.168.0.101")); 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; } }
按照这个方法可以获取本地MAC地址,不管你是否安装虚拟机都可以获取“真正的”MAC地址,方法:
System.out.println("MAC地址:"+getMACAddress.getMACAddress("192.168.0.101"));
还有如下一种方法:
package cn.com.e52.util; import java.io.*; import java.util.*; import java.util.regex.*; public class HardwareID { String IPCONFIG_COMMAND_WIN = "ipconfig /all"; boolean realMac = true; String unique = ""; public static String getMacAddress() { HardwareID hwid = new HardwareID(); String aa[]=hwid.getUnique().trim().split("#"); return aa[2]; //return hwid.getUnique().trim(); } private String getUnique() { String os = System.getProperty("os.name"); if (os.startsWith("Windows")) { return getUniqueWindows(); } else { return ""; } } private String getUniqueWindows() { // 运行控制台命令,返回结果字符串 String ipConfigResponse = null; try { ipConfigResponse = runConsoleCommand(IPCONFIG_COMMAND_WIN); } catch (IOException e) { e.printStackTrace(); } // 按行分割结果字符串,并循环判断每个字符串直道找出 Mac 地址 StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "/n"); while (tokenizer.hasMoreTokens()) { String line = tokenizer.nextToken().trim(); // 获取每行 ":" 后的字符串 int macAddressPosition = line.indexOf(":"); if (macAddressPosition <= 0) { continue; } String macAddressCandidate = line.substring(macAddressPosition + 1) .trim(); // 检查 macAddressCandidate 中内容是否为真实网卡 Mac 地址,根据 Mac 地址计算出唯一标识。 if (isMacAddWin(macAddressCandidate)) { if (realMac == true) { generateUnique(macAddressCandidate); } else { realMac = true; } } } return unique; } /** * 运行控制台命令,返回结果字符串 * * @param command * String * @return String * @throws IOException */ private String runConsoleCommand(String command) throws IOException { Process p = Runtime.getRuntime().exec(command); InputStream stdoutStream = new BufferedInputStream(p.getInputStream()); StringBuffer buffer = new StringBuffer(); while (true) { int c = stdoutStream.read(); if (c == -1) { break; } buffer.append((char) c); } String outputText = buffer.toString(); stdoutStream.close(); return outputText; } /** * 对输入参数进行检查,符合正则表达式的为 windows 平台下有效 Mac 地址 * * @param macAddressCandidate * String * @return boolean */ private boolean isMacAddWin(String macAddressCandidate) { Pattern macPattern = Pattern .compile("[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}"); Matcher m = macPattern.matcher(macAddressCandidate); return m.matches(); } // /** // * 对输入参数进行检查,符合长度的为 MAC OS X 下有效网卡 Mac 地址 // * // * @param macAddressCandidate // * String // * @return boolean // */ // private boolean isMacAddOSX(String macAddressCandidate) { // if (macAddressCandidate.length() != 17) { // return false; // } else { // return true; // } // } /** * 产生 Unique * * @param macAddress * String */ private void generateUnique(String macAddress) { if (unique == "") { unique += macAddress; } else { unique += "#"; unique += macAddress; } } public static void main(String[] args) { System.out.println(HardwareID.getMacAddress()); //这里做了一次处理,主要是我这里安装了虚拟机,有多个MAC地址。 } }
相关文章推荐
- Java获得CPU序列号和网卡Mac地址
- Java获取CPU序列号和网卡Mac地址
- 获取cpu序列号,硬盘ID,网卡MAC地址
- Java/JSP获得客户端网卡MAC地址的三种方法解析(附:获得真实IP)
- 获取CPU序列号,硬盘序列号,网卡mac地址
- C#应用:获取cpu序列号,硬盘ID,网卡MAC地址
- Java/JSP获得客户端网卡MAC地址的三种方法解析
- java 获得网卡MAC地址
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- C#获取硬盘序列号,CPU序列号,网卡MAC地址
- JAVA获得网卡MAC地址
- 获取CPU序列号,硬盘ID,网卡MAC地址
- C#获取cpu序列号,硬盘ID,网卡MAC地址
- 获取cpu序列号,硬盘ID,网卡MAC地址
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- C#应用:获取cpu序列号,硬盘ID,网卡MAC地址
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址的源码
- Java获得CPU序列号和网卡Mac地址
- Java/JSP获得客户端网卡MAC地址的三种方法解析