java获取网卡正真的mac_java获取网卡的mac地址

为了项目的安全,有时候需要得到电脑的唯一码,比如:网卡的mac地址。和大家分享一下,下面是项目中用到的工具类:/**

* 获取Mac地址

* @return

*/

public String getMAC() {

try {

InetAddress ia = InetAddress.getLocalHost();

byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

//System.out.println("mac数组长度:"+mac.length);

StringBuffer sb = new StringBuffer("");

for(int i=0; i 

if(i!=0) {

sb.append("-");

}

//字节转换为整数

int temp = mac[i]&0xff;

String str = Integer.toHexString(temp);

if(str.length()==1) {

sb.append("0"+str);

}else {

sb.append(str);

}

}

String macStr = sb.toString().toUpperCase();

return macStr;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

当然除了上面的简单方法还有如下网友提供的方法可以尝试import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.InetAddress;

import java.net.NetworkInterface;

public class MacAddressAPI {

/**

* 获取当前操作系统名称. 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 {

// 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) {

System.out.println("unix/linux方式未获取到网卡地址");

} 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 {

// 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

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

if (index >= 0) {// 找到了

index = line.indexOf(":");// 寻找":"的位置

if (index >= 0) {

// 取出mac地址并去除2边空格

mac = line.substring(index + 1).trim();

}

break;

}

}

} catch (IOException e) {

System.out.println("widnows方式未获取到网卡地址");

} finally {

try {

if (bufferedReader != null) {

bufferedReader.close();

}

} catch (IOException e1) {

e1.printStackTrace();

}

bufferedReader = null;

process = null;

}

return mac;

}

/**

* windows 7 专用 获取MAC地址

* @return

* @throws Exception

*/

public static String getWindows7MACAddress() {

StringBuffer sb = new StringBuffer();

try {

// 获取本地IP对象

InetAddress ia = InetAddress.getLocalHost();

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

byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

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

for (int i = 0; i 

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

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

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

}

} catch (Exception ex) {

System.out.println("windows 7方式未获取到网卡地址");

}

return sb.toString();

}

/**

* 获取MAC地址

* @param argc 运行参数.

* @throws Exception

*/

public static String getMACAddress() {

// windows

String mac = getWindowsMACAddress();

// windows7

if (isNull(mac)) {

mac = getWindows7MACAddress();

}

// unix

if (isNull(mac)) {

mac = getUnixMACAddress();

}

if (!isNull(mac)) {

mac = mac.replace("-", "");

} else {

mac = "ABCDEFGHIJ";

}

return mac;

}

public static boolean isNull(Object strData) {

if (strData == null || String.valueOf(strData).trim().equals("")) {

return true;

}

return false;

}

public static void main(String[] args) {

System.out.println("当前操作系统:"+getOSName());

System.out.println(getWindows7MACAddress());

System.out.println(getMACAddress());

System.out.println(getWindowsMACAddress());

System.out.println(getUnixMACAddress());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值