您的位置:首页 > 编程语言 > Java开发

java 获取MAC地址

2015-12-07 22:10 381 查看
import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.InetAddress;

import java.net.NetworkInterface;

import java.net.SocketException;

import java.net.UnknownHostException;

/**

* @title: MacAddressUtil

* @description:获取MAC地址

* @author:liming

* @date: 2013-5-5 下午04:42:50

*/

public class MacAddressUtil{

/**

* @MethodName: getOSName

* @description : 获取当前操作系统名称. return 操作系统名称 例如:windows,Linux,Unix等

* @author:liming

* @date: 2013-5-5 下午04:43:36

* @return String

*/

public static String getOSName() {

return System.getProperty("os.name").toLowerCase();

}

/**

* @MethodName: getWindowXPMACAddress

* @description : 获取widnowXp网卡的mac地址

* @author:liming

* @date: 2013-5-5 下午04:45:12

* @param execStr

* @return String

*/

public static String getWindowXPMACAddress(String execStr) {

String mac = null;

BufferedReader bufferedReader = null;

Process process = null;

try {

// windows下的命令,显示信息中包含有mac地址信息

process = Runtime.getRuntime().exec(execStr);

bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

String line = null;

int index = -1;

while ((line = bufferedReader.readLine()) != null) {

if(line.indexOf("本地连接") != -1) //排除有虚拟网卡的情况

continue;

// 寻找标示字符串[physical address]

index = line.toLowerCase().indexOf("physical address");

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;

}

/**

* @MethodName: getWindow7MACAddress

* @description : 获取widnow7网卡的mac地址

* @author:liming

* @date: 2013-5-5 下午04:46:56

* @param execStr

* @return String

*/

public static String getWindow7MACAddress() {

//获取本地IP对象

InetAddress ia = null;

try {

ia = InetAddress.getLocalHost();

} catch (UnknownHostException e) {

e.printStackTrace();

}

//获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。

byte[] mac = null;

try {

mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

} catch (SocketException e) {

e.printStackTrace();

}

//下面代码是把mac地址拼装成String

StringBuffer sb = new StringBuffer();

for(int i=0;i<mac.length;i++){

if(i!=0){

sb.append("-");

}

//mac[i] & 0xFF 是为了把byte转化为正整数

String s = Integer.toHexString(mac[i] & 0xFF);

sb.append(s.length()==1?0+s:s);

}

//把字符串所有小写字母改为大写成为正规的mac地址并返回

return sb.toString().toUpperCase();

}

/**

* @MethodName: getLinuxMACAddress

* @description : 获取Linux网卡的mac地址

* @author:liming

* @date: 2013-5-5 下午04:49:13

* @return String

*/

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;

}

return mac;

}

/**

* @MethodName: getUnixMACAddress

* @description : 获取Unix网卡的mac地址

* @author:liming

* @date: 2013-5-5 下午04:49:59

* @return String

*/

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;

}

/**

* @MethodName: getMacAddress

* @description :获取MAC地址

* @author:liming

* @date: 2013-5-5 下午04:53:25

* @return String

*/

public static String getMacAddress(){

String os = getOSName();

String execStr = getSystemRoot()+"/system32/ipconfig /all";

String mac = null;

if(os.startsWith("windows")){

if(os.equals("windows xp")){//xp

mac = getWindowXPMACAddress(execStr);

}else if(os.equals("windows 2003")){//2003

mac = getWindowXPMACAddress(execStr);

}else{//win7

mac = getWindow7MACAddress();

}

}else if (os.startsWith("linux")) {

mac = getLinuxMACAddress();

}else{

mac = getUnixMACAddress();

}

return mac;

}

/**

* @MethodName: getSystemRoot

* @description :jdk1.4获取系统命令路径 :SystemRoot=C:\WINDOWS

* @author:liming

* @date: 2013-5-5 下午04:56:27

* @return String

*/

public static String getSystemRoot(){

String cmd = null;

String os = null;

String result = null;

String envName = "windir";

os = System.getProperty("os.name").toLowerCase();

if(os.startsWith("windows")) {

cmd = "cmd /c SET";

}else {

cmd = "env";

}

try {

Process p = Runtime.getRuntime().exec(cmd);

InputStreamReader isr = new InputStreamReader(p.getInputStream());

BufferedReader commandResult = new BufferedReader(isr);

String line = null;

while ((line = commandResult.readLine()) != null) {

line=line.toLowerCase();//重要(同一操作系统不同电脑有些返回的是小写,有些是大写.因此需要统一转换成小写)

if (line.indexOf(envName) > -1) {

result = line.substring(line.indexOf(envName)

+ envName.length() + 1);

return result;

}

}

} catch (Exception e) {

System.out.println("获取系统命令路径 error: " + cmd + ":" + e);

}

return null;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: