Android 獲取網(wǎng)關(guān)的ip、mac(wifi、網(wǎng)線都可用)

最近接觸到的新項(xiàng)目需要獲取網(wǎng)關(guān)的mac信息來進(jìn)行上報(bào),遂一如既往面向百度和Google編程。無奈呀,找了好久,基本網(wǎng)上說的都是獲取自身的ip和mac的,以及獲取wifi狀態(tài)下的網(wǎng)關(guān)ip和mac,但是這不夠呀,除了自身的ip和mac,我還需要有線狀態(tài)下的ip和mac。

功夫不負(fù)有心人,最終還是被我找到了??梢允褂胊db shell命令和讀取設(shè)備保存的相關(guān)文件信息來獲取到我所需要的

/**
 * 使用adb shell命令來獲取網(wǎng)關(guān)IP
 * @return
 */
fun getGatewayIp(): String {
    var result = ""
    val order = "ip route list table 0"

    try {
        val exec = Runtime.getRuntime().exec(order)
        val buff = BufferedReader(InputStreamReader(exec.inputStream))

        val str = buff.readLine()
        if (str != null) {
            result = str.trim().split("\\s+".toRegex()).toTypedArray()[2]
        }

        buff.close()
        exec.waitFor()
    } catch (e: Exception) {
        e.printStackTrace()
    }

    return result
}

/**
 * 從保存相關(guān)信息的 /proc/net/arp 文件里根據(jù)ip獲取對(duì)應(yīng)的網(wǎng)關(guān)mac
 * @return
 */
fun getGatewayMac(): String {
    var mac = ""
    try {
        val filePath = "/proc/net/arp"
        val buff = BufferedReader(FileReader(filePath))
        while (true) {
            val str = buff.readLine() ?: break
            if (str.contains(getGatewayIp())) {
                mac = str.trim().split("\\s+".toRegex()).toTypedArray()[3]
                break
            }
        }
        buff.close()
    } catch (e: Exception) {
        e.printStackTrace()
    }

    return mac
}

就是如何簡(jiǎn)單了,至少在我這是可行的,最后再放上原方法的鏈接https://blog.csdn.net/shaoenxiao/article/details/81285090

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容