最近接触到的新项目需要获取网关的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