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


  软件项目或者产品有时候会用到本机网卡的物理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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值