利用Java获取本机网卡的MAC地址

来源:互联网 发布:归来。知乎 编辑:程序博客网 时间:2024/04/28 23:39


  软件项目或者产品有时候会用到本机网卡的物理MAC地址,例如结合MAC地址进行登录验证等等,当然这种项目一般在局域网内运行,能相对提高系统的安全性。

  下面列出了java读取MAC地址的工具方法,可以读取windows和非windows操作系统(linux,unix)下的MAC地址。如果你的操作系统很特殊的话,可以对方法进行扩充,原理类似的。

/*  * Created on 2005-6-5  * Author stephen  * Email zhoujianqiang AT gmail DOT com  * CopyRight(C)2005-2008 , All rights reserved.  */  import java.io.BufferedReader;   import java.io.IOException;   import java.io.InputStreamReader;     /**  * 与系统相关的一些常用工具方法.  *   * @author stephen  * @version 1.0.0  */  public class SystemTool {         /**      * 获取当前操作系统名称.      * return 操作系统名称 例如:windows xp,linux 等.      */      public static String getOSName() {           return System.getProperty("os.name").toLowerCase();       }              /**      * 获取unix网卡的mac地址.      * 非windows的系统默认调用本方法获取.如果有特殊系统请继续扩充新的取mac地址方法.      * @return mac地址      */      public static String getUnixMACAddress() {           String mac = null;           BufferedReader bufferedReader = null;           Process process = null;           try {               process = Runtime.getRuntime().exec("ifconfig eth0");// linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息              bufferedReader = new BufferedReader(new InputStreamReader(process                       .getInputStream()));               String line = null;               int index = -1;               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();               }               bufferedReader = null;               process = null;           }             return mac;       }         /**      * 获取widnows网卡的mac地址.      * @return mac地址      */      public static String getWindowsMACAddress() {           String mac = null;           BufferedReader bufferedReader = null;           Process process = null;           try {               process = Runtime.getRuntime().exec("ipconfig /all");// windows下的命令,显示信息中包含有mac地址信息              bufferedReader = new BufferedReader(new InputStreamReader(process                       .getInputStream()));               String line = null;               int index = -1;               while ((line = bufferedReader.readLine()) != null) {                   index = line.toLowerCase().indexOf("physical address");// 寻找标示字符串[physical address]                  if (index >= 0) {// 找到了                      index = line.indexOf(":");// 寻找":"的位置                      if (index>=0) {                           mac = line.substring(index + 1).trim();//  取出mac地址并去除2边空格                      }                       break;                   }               }           } catch (IOException e) {               e.printStackTrace();           } finally {               try {                   if (bufferedReader != null) {                       bufferedReader.close();                   }               } catch (IOException e1) {                   e1.printStackTrace();               }               bufferedReader = null;               process = null;           }             return mac;       }         /**      * 测试用的main方法.      *       * @param argc      *            运行参数.      */      public static void main(String[] argc) {           String os = getOSName();           System.out.println(os);           if(os.startsWith("windows")){               //本地是windows              String mac = getWindowsMACAddress();               System.out.println(mac);           }else{               //本地是非windows系统 一般就是unix              String mac = getUnixMACAddress();               System.out.println(mac);           }       }   }  

0 0