MacAddressTool

来源:互联网 发布:java电脑版安装包多大 编辑:程序博客网 时间:2024/06/16 13:59
package cpcns.gongwen.util;




import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;


/**
 * @ClassName: TestMacAddress
 * @Description: 与系统相关的一些常用工具方法.
 */
public class MacAddressTool {


/**
* 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等.
*/
public 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 = null;
try {
// linux下的命令,一般取eth0作为本地主网卡
process = Runtime.getRuntime().exec("ifconfig eth0");
// 显示信息中包含有mac地址信息
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 >= 0) {// 找到了
// 取出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;
}


/**
* 获取widnows网卡的mac地址.

* @return mac地址
*/
private 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 index1 = -1;//英文的匹配
int index2 = -1;//中文的匹配
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
// 寻找标示字符串[physical
index1 = line.toLowerCase().indexOf("physical address");
index2 = line.toLowerCase().indexOf("物理地址");

if (index1 >= 0 || index2 >= 0) {// 找到了
index1 = line.indexOf(":");// 寻找":"的位置
if (index1 >= 0) {
System.out.println(mac);
// 取出mac地址并去除2边空格
mac = line.substring(index1 + 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;
}


/**
* windows 7 专用 获取MAC地址
* @return String 物理地址
* @throws Exception 异常
*/
private static String getMACAddress() throws Exception {

// 获取本地IP对象
InetAddress ia = InetAddress.getLocalHost();
// 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();


// 下面代码是把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();
}
/**
* @Title: getLocalIp
* @Description: 获取本地ip地址
* @return String ip地址
* @throws UnknownHostException 异常
*/
public static String getLocalIp() throws UnknownHostException{
return InetAddress.getLocalHost().getHostAddress();
}
/**
* @Title: getMac
* @Description: 获取本地mac地址
* @return String mac地址
* @throws Exception
*/
public static String getLocalMac() throws Exception{
String os = getOSName();
String mac = null;
if (os.equals("windows 7")) {
mac = getMACAddress();
} else if (os.startsWith("windows")) {
// 本地是windows
mac = getWindowsMACAddress();
} else {
// 本地是非windows系统 一般就是unix
mac = getUnixMACAddress();
}
return mac;
}


/**
* 测试用的main方法.

* @param argc 运行参数.
* @throws Exception
*/
public static void main(String[] argc) throws Exception {
System.out.println("ip=" + getLocalIp());
String os = getOSName();
System.out.println(os);
if (os.equals("windows 7")) {
String mac = getMACAddress();
System.out.println(mac);
} else if (os.startsWith("windows")) {
// 本地是windows
String mac = getWindowsMACAddress();
System.out.println(mac);
} else {
// 本地是非windows系统 一般就是unix
String mac = getUnixMACAddress();
System.out.println(mac);
}
}
}
原创粉丝点击