问题描述
我有一个 Android 应用需要设备的真实 IP,而不是虚拟网络 IP。除非 Chromebook 在公共 IP 上,否则我不想要公共 IP,我只需要 LAN 的私有 IP,但现在我得到了一个虚拟 IP,我猜是 Android 的虚拟网络应用。
同时使用 WifiManager
和 NetworkInterface.getNetworkInterfaces()
我得到的只是虚拟 IP。调用外部服务器将不起作用,因为这会为我获取公共 IP。
我知道过去有人问过这个问题,但我只是想看看是否有人找到了方法?
解决方法
在 ChromeOS.dev 中有更详细的回答。
要获取分配给 Chrome 操作系统设备所连接的最高优先级网络的 IPv4 地址,请检查 android 系统属性 arc.net.ipv4.host_address,如果需要,检查 arc.net.ipv4.host_gateway。一种方法是:
fun getChromeOsIpAddress() : String {
val process = ProcessBuilder().command("/system/bin/getprop","arc.net.ipv4.host_address").start()
val ipAddress = readInput(process.inputStream)
return ipAddress
}
fun getChromeOsIpGateway() : String {
val process = ProcessBuilder().command("/system/bin/getprop","arc.net.ipv4.host_gateway").start()
val gatewayAddress = readInput(process.inputStream)
return gatewayAddress
}
本文已获得 Apache 2.0 许可。