MAC地址工具

代码地址:https://code.csdn.net/snippets/2444253

/**
 * MAC地址工具
 * 
 * @author zhou
 * @version 2013-12-21
 */
public class MacUtils {

   /**
    * 获取当前操作系统名称. return 操作系统名称 例如:windows,Linux,Unix.
    */
   public static String getOSName() {
      return System.getProperty("os.name").toLowerCase();
   }

   /**
    * 获取Unix网卡的mac地址.
    * 
    * @return mac地址
    */
   public static String getUnixMACAddress() {
      String mac = null;
      BufferedReader bufferedReader = null;
      Process process = null;
      try {
         /**
          * Unix下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
          */
         process = Runtime.getRuntime().exec("ifconfig eth0");
         bufferedReader = new BufferedReader(new InputStreamReader(
               process.getInputStream()));
         String line = null;
         int index = -1;
         while ((line = bufferedReader.readLine()) != null) {
            /**
             * 寻找标示字符串[hwaddr]
             */
            index = line.toLowerCase().indexOf("hwaddr");
            /**
             * 找到了
             */
            if (index != -1) {
               /**
                * 取出mac地址并去除2边空格
                */
               mac = line.substring(index + "hwaddr".length() + 1).trim();
               break;
            }
         }
      } catch (IOException e) {
         e.printStackTrace();
      } finally {
         try {
            if (bufferedReader != null) {
               bufferedReader.close();
            }
         } catch (IOException e1) {
            e1.printStackTrace();
         }
         bufferedReader = null;
         process = null;
      }

      return mac;
   }

   /**
    * 获取Linux网卡的mac地址.
    * 
    * @return mac地址
    */
   public static String getLinuxMACAddress() {
      String mac = null;
      BufferedReader bufferedReader = null;
      Process process = null;
      try {
         /**
          * linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
          */
         process = Runtime.getRuntime().exec("ifconfig eth0");
         bufferedReader = new BufferedReader(new InputStreamReader(
               process.getInputStream()));
         String line = null;
         int index = -1;
         while ((line = bufferedReader.readLine()) != null) {
            index = line.toLowerCase().indexOf("硬件地址");
            /**
             * 找到了
             */
            if (index != -1) {
               /**
                * 取出mac地址并去除2边空格
                */
               mac = line.substring(index + 4).trim();
               break;
            }
         }
      } catch (IOException e) {
         e.printStackTrace();
      } finally {
         try {
            if (bufferedReader != null) {
               bufferedReader.close();
            }
         } catch (IOException e1) {
            e1.printStackTrace();
         }
         bufferedReader = null;
         process = null;
      }
      
      // 取不到,试下Unix取发
      if (mac == null){
         return getUnixMACAddress();
      }

      return mac;
   }

   /**
    * 获取widnows网卡的mac地址.
    * 
    * @return mac地址
    */
   public static String getWindowsMACAddress() {
      String mac = null;
      BufferedReader bufferedReader = null;
      Process process = null;
      try {
         /**
          * windows下的命令,显示信息中包含有mac地址信息
          */
         process = Runtime.getRuntime().exec("ipconfig /all");
         bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
         String line = null;
         int index = -1;
         while ((line = bufferedReader.readLine()) != null) {
            /**
             * 寻找标示字符串[physical address]
             */
//          index = line.toLowerCase().indexOf("physical address");
//          if (index != -1) {
            if (line.split("-").length == 6){
               index = line.indexOf(":");
               if (index != -1) {
                  /**
                   * 取出mac地址并去除2边空格
                   */
                  mac = line.substring(index + 1).trim();
               }
               break;
            }
            index = line.toLowerCase().indexOf("物理地址");
            if (index != -1) {
               index = line.indexOf(":");
               if (index != -1) {
                  /**
                   * 取出mac地址并去除2边空格
                   */
                  mac = line.substring(index + 1).trim();
               }
               break;
            }
         }
      } catch (IOException e) {
         e.printStackTrace();
      } finally {
         try {
            if (bufferedReader != null) {
               bufferedReader.close();
            }
         } catch (IOException e1) {
            e1.printStackTrace();
         }
         bufferedReader = null;
         process = null;
      }

      return mac;
   }

   public static String getMac(){
      String os = getOSName();
      String mac;
      if (os.startsWith("windows")) {
         mac = getWindowsMACAddress();
      } else if (os.startsWith("linux")) {
         mac = getLinuxMACAddress();
      } else {
         mac = getUnixMACAddress();
      }
      return mac == null ? "" : mac;
   }
   
   /**
    * 测试用的main方法.
    * 
    * @param argc 运行参数.
    */
   public static void main(String[] argc) {
      String os = getOSName();
      System.out.println("os: " + os);
      if (os.startsWith("windows")) {
         String mac = getWindowsMACAddress();
         System.out.println("mac: " + mac);
      } else if (os.startsWith("linux")) {
         String mac = getLinuxMACAddress();
         System.out.println("mac: " + mac);
      } else {
         String mac = getUnixMACAddress();
         System.out.println("mac: " + mac);
      }
   }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值