主要参考:Java获取本机MAC地址/IP地址/主机名

做的更改:

1.我的windows是中文版,程序中获取mac时是按照physical address 获取的,添加上"物理地址";

2.获取到第一个mac之后继续循环buffer,获取其他网卡的mac(无线网卡、以太网卡、虚拟网卡...),但我的机器获取到5个mac地址,不知道为什么,我知道的有一个虚拟网卡,一个以太,一个无限,另外两个不知道哪里来的。

3.中文系统获取bufferedReader 后的编码不正确,添加编码“GBK"

 package cn.com.sinosoft.monitor.vo;
 
         import java.io.BufferedReader;
         import java.io.IOException;
         import java.io.InputStreamReader;
         import java.net.InetAddress;
         import java.net.NetworkInterface;
         import java.net.UnknownHostException;
         import java.util.ArrayList;
         import java.util.List;
         import java.util.Map;
 
 /**
  * @className: SystemTool
  * @description: 与系统相关的一些常用工具方法. 目前实现的有:获取MAC地址、IP地址、主机名
  * @author: 笑遍世界
  * @createTime: 2010-11-13 下午08:03:44
  */
 public class Tool {
 
     /**
      * 获取当前操作系统名称.
      * return 操作系统名称 例如:windows xp,linux 等.
      */
     private static String getOSName() {
         return System.getProperty("os.name").toLowerCase();
     }
 
     /**
      * 获取unix网卡的mac地址.
      * 非windows的系统默认调用本方法获取.如果有特殊系统请继续扩充新的取mac地址方法.
      *
      * @return mac地址
      */
     private static String getUnixMACAddress() {
         String mac = null;
         BufferedReader bufferedReader = null;
         Process process;
         try {
             process = Runtime.getRuntime().exec("ifconfig eth0");// linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
             bufferedReader = new BufferedReader(new InputStreamReader(process
                     .getInputStream()));
             String line;
             int index;
             while ((line = bufferedReader.readLine()) != null) {
                 index = line.toLowerCase().indexOf("hwaddr");// 寻找标示字符串[hwaddr]
                 if (index >= 0) {// 找到了
                     mac = line.substring(index + "hwaddr".length() + 1).trim();//  取出mac地址并去除2边空格
                     break;
                 }
             }
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
             try {
                 if (bufferedReader != null) {
                     bufferedReader.close();
                 }
             } catch (IOException e1) {
                 e1.printStackTrace();
             }
         }
 
         return mac;
     }
 
     /**
      * 获取widnows网卡的mac地址.
      *
      * @return mac地址
      */
     private static List<String> getWindowsMACAddress() {
         List<String> macList = new ArrayList<String>();
         String mac = null;
         BufferedReader bufferedReader = null;
         Process process;
         try {
             // windows下的命令,显示信息中包含有mac地址信息
             process = Runtime.getRuntime().exec("ipconfig /all");
             bufferedReader = new BufferedReader(new InputStreamReader(process
                     .getInputStream(),"GBK"));
             String line;
             int index;
             while ((line = bufferedReader.readLine()) != null) {
                 index = line.toLowerCase().indexOf("physical address");// 寻找标示字符串[physical address]
 
                 if (index == -1) {
                     index = line.indexOf("物理地址");
                 }
                 if (index >= 0) {// 找到了
                     index = line.indexOf(":");// 寻找":"的位置
                     if (index >= 0) {
                         mac = line.substring(index + 1).trim();//  取出mac地址并去除2边空格
                     }
                     macList.add(mac);
                 }
             }
 
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
             try {
                 if (bufferedReader != null) {
                     bufferedReader.close();
                 }
             } catch (IOException e1) {
                 e1.printStackTrace();
             }
         }
 
         return macList;
     }
 
     /**
      * @return 本机主机名
      */
     private static String getHostName() {
         InetAddress ia = null;
         try {
             ia = InetAddress.getLocalHost();
         } catch (UnknownHostException e) {
             e.printStackTrace();
         }
         if (ia == null) {
             return "some error..";
         } else
             return ia.getHostName();
     }
 
     /**
      * @return 本机IP 地址
      */
     private static String getIPAddress() {
         InetAddress ia = null;
         try {
             ia = InetAddress.getLocalHost();
         } catch (UnknownHostException e) {
             e.printStackTrace();
         }
         if (ia == null) {
             return "some error..";
         } else
             return ia.getHostAddress();
     }
 
     /**
      * 测试用的main方法.
      *
      * @param argc 运行参数.
      */
     public static void main(String[] argc) {
         String os = getOSName();
         System.out.println("OS Type:" + os);
         if (os.contains("windows")) {
             //本地是windows
             List<String> mac = getWindowsMACAddress();
             System.out.println("MAC Address:" + mac);
         } else {
             //本地是非windows系统 一般就是unix
             String mac = getUnixMACAddress();
             System.out.println(mac);
         }
         System.out.println("HostName:" + getHostName());
         System.out.println("IPAddress:" + getIPAddress());
 
 
         //这个更简单
         Map<String, String> map = System.getenv();
         String userName = map.get("USERNAME");// 获取用户名
         String computerName = map.get("COMPUTERNAME");// 获取计算机名
         String userDomain = map.get("USERDOMAIN");// 获取计算机域名
 
 
         System.out.println(userName);
         System.out.println(computerName);
         System.out.println(userDomain);
 
         System.out.println(GetMac());
     }
 
     static String GetMac(String... ip)
     {
         List<String> macList = new ArrayList<String>();
         InetAddress ia;
         byte[] mac = null;
         try {
             //获取本地IP对象
             ia = InetAddress.getLocalHost();
             //获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
             mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
         } catch (Exception e) {
             e.printStackTrace();
         }
         //下面代码是把mac地址拼装成String
         StringBuffer sb = new StringBuffer();
         for(int i=0;i<mac.length;i++){
             if(i!=0){
                 sb.append("-");
             }
             //mac[i] &amp; 0xFF 是为了把byte转化为正整数
             String s = Integer.toHexString(mac[i] &amp; 0xFF);
             sb.append(s.length()==1?0+s:s);
         }
 
         //把字符串所有小写字母改为大写成为正规的mac地址并返回
         return sb.toString().toUpperCase();
     }
 
 }

ps:最后的GetMac参考java获取Mac地址