package com.basic.security.utils;
|
|
import java.io.BufferedReader;
|
import java.io.InputStreamReader;
|
import java.net.InetAddress;
|
import java.net.NetworkInterface;
|
import java.net.SocketException;
|
import java.util.Enumeration;
|
|
public class MacAddressUtils {
|
|
// 根据IP地址获取MAC地址
|
public static String getMacAddress() {
|
String strMacAddress = null;
|
try {
|
// 获得IpD地址
|
InetAddress ip = getLocalIntentAddress();
|
byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress();
|
StringBuilder buffer = new StringBuilder();
|
for (int i = 0; i < b.length; i++) {
|
if (i != 0) {
|
buffer.append(':');
|
}
|
String str = Integer.toHexString(b[i] & 0xFF);
|
buffer.append(str.length() == 1 ? 0 + str : str);
|
}
|
strMacAddress = buffer.toString().toUpperCase();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return strMacAddress;
|
}
|
|
// 获取移动设备本地IP
|
private static InetAddress getLocalIntentAddress() {
|
InetAddress ip = null;
|
try {
|
// 列举
|
Enumeration<NetworkInterface> en_netInterface = NetworkInterface.getNetworkInterfaces();
|
while (en_netInterface.hasMoreElements()) {// 是否还有元素
|
NetworkInterface ni = en_netInterface.nextElement();// 得到下一个元素
|
Enumeration<InetAddress> en_ip = ni.getInetAddresses();// 得到一个ip地址的列举
|
while (en_ip.hasMoreElements()) {
|
ip = en_ip.nextElement();
|
if (!ip.isLoopbackAddress() && !ip.getHostAddress().contains(":"))
|
break;
|
else
|
ip = null;
|
}
|
|
if (ip != null) {
|
break;
|
}
|
}
|
} catch (SocketException e) {
|
e.printStackTrace();
|
}
|
return ip;
|
}
|
|
|
private static String getLocalIpAddress() {
|
try {
|
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
|
|
NetworkInterface intf = en.nextElement();
|
|
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
|
|
InetAddress inetAddress = enumIpAddr.nextElement();
|
|
if (!inetAddress.isLoopbackAddress()) {
|
return inetAddress.getHostAddress();
|
}
|
|
}
|
}
|
} catch (SocketException ex) {
|
ex.printStackTrace();
|
}
|
return null;
|
}
|
|
|
// android 7.0及以上 (2)扫描各个网络接口获取mac地址
|
public static String getMachineHardwareAddress() {
|
Enumeration<NetworkInterface> interfaces = null;
|
try {
|
interfaces = NetworkInterface.getNetworkInterfaces();
|
} catch (SocketException e) {
|
e.printStackTrace();
|
}
|
String hardWareAddress = null;
|
NetworkInterface iF = null;
|
if (interfaces == null) {
|
return null;
|
}
|
while (interfaces.hasMoreElements()) {
|
iF = interfaces.nextElement();
|
try {
|
hardWareAddress = bytesToString(iF.getHardwareAddress());
|
if (hardWareAddress != null)
|
break;
|
} catch (SocketException e) {
|
e.printStackTrace();
|
}
|
}
|
return hardWareAddress;
|
}
|
|
// byte转为String
|
private static String bytesToString(byte[] bytes) {
|
if (bytes == null || bytes.length == 0) {
|
return null;
|
}
|
StringBuilder buf = new StringBuilder();
|
for (byte b : bytes) {
|
buf.append(String.format("%02X:", b));
|
}
|
if (buf.length() > 0) {
|
buf.deleteCharAt(buf.length() - 1);
|
}
|
return buf.toString();
|
}
|
|
|
// 根据busy_box获取本地Mac
|
public static String getLocalMacAddressFromBusyBox() {
|
String result = "";
|
String Mac = "";
|
result = callCmd("busybox ifconfig", "HWaddr");
|
// 如果返回的result == null,则说明网络不可取
|
if (result == null) {
|
return "网络异常";
|
}
|
// 对该行数据进行解析
|
// 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
|
if (result.length() > 0 && result.contains("HWaddr") == true) {
|
Mac = result.substring(result.indexOf("HWaddr") + 6, result.length() - 1);
|
result = Mac;
|
}
|
return result.trim();
|
}
|
|
private static String callCmd(String cmd, String filter) {
|
String result = "";
|
String line = "";
|
try {
|
Process proc = Runtime.getRuntime().exec(cmd);
|
InputStreamReader is = new InputStreamReader(proc.getInputStream());
|
BufferedReader br = new BufferedReader(is);
|
|
while ((line = br.readLine()) != null && !line.contains(filter)) {
|
result += line;
|
}
|
|
result = line;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
|
}
|