首页 > 解决方案 > Android:以编程方式获取路线信息

问题描述

我正在向远程发送 UDP 数据包,我想知道将用于此的本地接口的 IP。在外壳中我会运行:

ip route get 192.168.1.54

它会回答类似:

192.168.1.12 dev wlan0  table local_network  src 192.168.1.1

我有兴趣在哪里获得src: 192.168.1.1

我可以通过这样调用来做到这exec一点:

Runtime.getRuntime().exec("ip route get 192.168.1.54")

但这似乎不是很优雅,我不知道哪些设备支持它(它适用于其中一些设备,而其他设备则返回错误代码“1”,尽管该命令适用于adb shell)。

有没有办法用 Android SDK 做到这一点?我看了看,ConnectivityManager但找不到方法...

标签: androidroutetable

解决方案


使用 Android 的DatagramSocket应该直接为你提供源地址:

val socket = DatagramSocket()
val targetAddress = InetAddress.getByName(destHostOrIp)
socket.connect(targetAddress, port)
val local = socket.getLocalAddress()

推荐阅读