连接通过代理,本地有多个IP时,Java怎么获取连接中的本机IP

55 阅读1分钟

我们在日常的工作中,本机经常会使用VPN等软件,通过VPN去连接特定的服务器,但这时本机有多个IP,我们怎么确定本机是通过哪个IP与服务器连接的呢?

可以通过NetworkInterface来使用特定的网卡去连接目标IP,如果该网卡能够连接目标IP,再获取该网卡绑定的IP地址即可

public static String getLocalIp(String targetIp) {
    try {
        // 获取所有网卡
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        while (networkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = networkInterfaces.nextElement();
            // 判断网卡是否能够连接目标IP
            boolean reachable = InetAddress.getByName(targetIp).isReachable(networkInterface, 0, 200);
            if (reachable) {
                // 获取该网卡对应的IP地址
                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                while (inetAddresses.hasMoreElements()) {
                    InetAddress inetAddress = inetAddresses.nextElement();
                    if (inetAddress.getHostAddress() != null) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        }
    } catch (IOException e) {
        log.error("get local ip error", e);
    }
    retrun "";
}