You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 如何通过SDK编程获取指定目标IP对应的本地路由源IP地址

解决方案

实现思路

无需执行shell命令,利用UDP套接字的特性即可直接拿到对应源IP:

  • UDP属于无连接协议,对指定目标地址执行connect操作时,系统内核只会完成路由表匹配、确定出口网络接口和源IP的逻辑,不会实际发送任何数据包
  • 此时读取套接字的本地地址,和ip route get返回的src字段值完全一致

示例代码

import java.net.DatagramSocket
import java.net.InetAddress

/**
 * 获取发往指定目标IP时使用的本地出口IP
 * @param targetIp 目标远端IP
 * @return 本地出口IP,获取失败返回null
 */
fun getOutboundSourceIp(targetIp: String): String? {
    var socket: DatagramSocket? = null
    return try {
        val targetAddr = InetAddress.getByName(targetIp)
        socket = DatagramSocket()
        // UDP connect仅触发内核路由计算,端口可任意填写
        socket.connect(targetAddr, 10000)
        socket.localAddress.hostAddress
    } catch (e: Exception) {
        e.printStackTrace()
        null
    } finally {
        socket?.close()
    }
}

注意事项

  • 该方法仅需要普通的INTERNET权限,只要你的应用本身需要发送UDP包就已经配置了该权限,无需额外申请
  • 不能在主线程调用该方法,需要放到子线程或协程中执行,避免触发主线程网络操作异常
  • 兼容性覆盖所有Android 4.0及以上版本,不受厂商定制ROM的命令权限限制,比执行shell命令稳定性高很多

内容的提问来源于stack exchange,提问作者JonasVautherin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:48:02