1. 程式人生 > >java工具類,在Windows,Linux系統獲取電腦的MAC地址、本地IP、電腦名

java工具類,在Windows,Linux系統獲取電腦的MAC地址、本地IP、電腦名

copy iter 去掉m [] equals linu stat cli catch

package com.cloudssaas.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/********************************************************************************* * //* Copyright (C) 2014 ××××××××××. All Rights Reserved. //* //* Filename: * ComputerInfo.java //* Revision: 1.0 //* Author: <yao xiucai> //* Created On: * 2014年5月21日 //* Modified by: //* Modified On: //* //* Description: * * <取網卡物理地址-- * 1.在Windows,Linux系統下均可用; * 2.通過ipconifg,ifconfig獲得計算機信息; * 3.再用模式匹配方式查找MAC地址,與操作系統的語言無關> * * //* Description: <取計算機名--從環境變量中取> * abstract 限制繼承/創建實例
*/ /********************************************************************************/ public abstract class ComputerInfo { private static String macAddressStr = null; private static String computerName = System.getenv().get("COMPUTERNAME"); private static final String[] windowsCommand = { "ipconfig", "/all" };
private static final String[] linuxCommand = { "/sbin/ifconfig", "-a" }; private static final Pattern macPattern = Pattern.compile(".*((:?[0-9a-f]{2}[-:]){5}[0-9a-f]{2}).*", Pattern.CASE_INSENSITIVE); /** * 獲取多個網卡地址 * * @return * @throws IOException */ private final static List<String> getMacAddressList() throws IOException { final ArrayList<String> macAddressList = new ArrayList<String>(); final String os = System.getProperty("os.name"); final String command[]; if (os.startsWith("Windows")) { command = windowsCommand; } else if (os.startsWith("Linux")) { command = linuxCommand; } else { throw new IOException("Unknow operating system:" + os); } // 執行命令 final Process process = Runtime.getRuntime().exec(command); BufferedReader bufReader = new BufferedReader(new InputStreamReader(process.getInputStream())); for (String line = null; (line = bufReader.readLine()) != null;) { Matcher matcher = macPattern.matcher(line); if (matcher.matches()) { macAddressList.add(matcher.group(1)); // macAddressList.add(matcher.group(1).replaceAll("[-:]", // ""));//去掉MAC中的“-” } } process.destroy(); bufReader.close(); return macAddressList; } /** * 獲取一個網卡地址(多個網卡時從中獲取一個) * * @return */ public static String getMacAddress() { if (macAddressStr == null || macAddressStr.equals("")) { StringBuffer sb = new StringBuffer(); // 存放多個網卡地址用,目前只取一個非0000000000E0隧道的值 try { List<String> macList = getMacAddressList(); for (Iterator<String> iter = macList.iterator(); iter.hasNext();) { String amac = iter.next(); if (!amac.equals("0000000000E0")) { sb.append(amac); break; } } } catch (IOException e) { e.printStackTrace(); } macAddressStr = sb.toString(); } return macAddressStr; } /** * 獲取電腦名 * * @return */ public static String getComputerName() { if (computerName == null || computerName.equals("")) { computerName = System.getenv().get("COMPUTERNAME"); } return computerName; } /** * 獲取客戶端IP地址 * * @return */ public static String getIpAddrAndName() throws IOException { return InetAddress.getLocalHost().toString(); } /** * 獲取客戶端IP地址 * * @return */ public static String getIpAddr() throws IOException { return InetAddress.getLocalHost().getHostAddress().toString(); } /** * 獲取電腦唯一標識 * * @return */ public static String getComputerID() { String id = getMacAddress(); if (id == null || id.equals("")) { try { id = getIpAddrAndName(); } catch (IOException e) { e.printStackTrace(); } } return computerName; } /** * 限制創建實例 */ private ComputerInfo() { } public static void main(String[] args) throws IOException { System.out.println(ComputerInfo.getMacAddress()); System.out.println(ComputerInfo.getComputerName()); System.out.println(ComputerInfo.getIpAddr()); System.out.println(ComputerInfo.getIpAddrAndName()); } }

相關:

java中得到計算機MAC網卡標識,IP,計算機名稱等唯一標識問題

java工具類,在Windows,Linux系統獲取電腦的MAC地址、本地IP、電腦名