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 en_netInterface = NetworkInterface.getNetworkInterfaces(); while (en_netInterface.hasMoreElements()) {// 是否还有元素 NetworkInterface ni = en_netInterface.nextElement();// 得到下一个元素 Enumeration 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 en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); for (Enumeration 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 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; } }