首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

紅米手機獲取 MAC 地址:BusyBox ifconfig 解析 HWaddr 完整代碼

     編輯:程式設計疑難解答

核心代碼

public static String getLocalMacAddressFromBusybox() {
    String result = callCmd("busybox ifconfig", "HWaddr");
    if (result == null) return "網絡錯誤";
    if (result.contains("HWaddr")) {
        String mac = result.substring(result.indexOf("HWaddr") + 6).trim();
        return mac.replaceAll("\\s+", ""); // 去除空格
    }
    return "獲取失敗";
}

private static String callCmd(String cmd, String filter) {
    try {
        Process proc = Runtime.getRuntime().exec(cmd);
        BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            if (line.contains(filter)) return line;
        }
    } catch (Exception e) { e.printStackTrace(); }
    return null;
}

前置條件

  • 設備已 **Root** 並安裝 **BusyBox**。
  • App 需申請 android.permission.INTERNET (執行命令需)。

非 Root 替代方案

// Android 6.0+ 需定位權限
WifiManager wifi = (WifiManager) getSystemService(WIFI_SERVICE);
String mac = wifi.getConnectionInfo().getMacAddress(); // Android 6.0+ 返回固定 02:00:00:00:00:00

// 正確方式:掃描掃描結果
List results = wifi.getScanResults();
for (ScanResult r : results) if (r.BSSID != null) return r.BSSID; // 非本機 MAC

// 唯一可靠:讀取 /sys/class/net/wlan0/address (需 Root)
String mac = FileUtils.readFile("/sys/class/net/wlan0/address").trim();

注意

Android 10+ **完全禁止** 非系統應用獲取真實 MAC,返回隨機化地址。唯有系統簽名應用或 Root 讀取系統節點可獲真實 MAC。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved