美文网首页
Android 获取网关的ip、mac(wifi、网线都可用)

Android 获取网关的ip、mac(wifi、网线都可用)

作者: YIHENGZI | 来源:发表于2021-06-17 20:42 被阅读0次

最近接触到的新项目需要获取网关的mac信息来进行上报,遂一如既往面向百度和Google编程。无奈呀,找了好久,基本网上说的都是获取自身的ip和mac的,以及获取wifi状态下的网关ip和mac,但是这不够呀,除了自身的ip和mac,我还需要有线状态下的ip和mac。

功夫不负有心人,最终还是被我找到了。可以使用adb shell命令和读取设备保存的相关文件信息来获取到我所需要的

/**
 * 使用adb shell命令来获取网关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
}

/**
 * 从保存相关信息的 /proc/net/arp 文件里根据ip获取对应的网关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
}

就是如何简单了,至少在我这是可行的,最后再放上原方法的链接https://blog.csdn.net/shaoenxiao/article/details/81285090

相关文章

网友评论

      本文标题:Android 获取网关的ip、mac(wifi、网线都可用)

      本文链接:https://www.haomeiwen.com/subject/shfhyltx.html