android - 如何以编程方式获取 Android 设备的公共(public) IP 地址?

标签 android ip-address

我想检索 publick IP 地址,例如我们从 whatismyipaddress.com 获得的地址,我不想使用任何第三方服务 https://www.ipify.org .有没有办法从 Android 的内置类或库中获取这个 IP 地址。

如果无法从 Android 库中获取所需的数据,请建议任何逻辑以在服务器级别获取相同的数据,而不是在客户端级别获取。注意:负载均衡器在路由到实际 Web 应用程序之前存在

最佳答案

我在我的项目中使用这种方法..所以你可以使用它..它会返回你的设备 IP

private String getIpAddress() {
    String ip = "";
    try {
        Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
                .getNetworkInterfaces();
        while (enumNetworkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = enumNetworkInterfaces
                    .nextElement();
            Enumeration<InetAddress> enumInetAddress = networkInterface
                    .getInetAddresses();
            while (enumInetAddress.hasMoreElements()) {
                InetAddress inetAddress = enumInetAddress.nextElement();

                if (inetAddress.isSiteLocalAddress()) {
                    ip += inetAddress.getHostAddress();
                }

            }

        }

    } catch (SocketException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        ip += "Something Wrong! " + e.toString() + "\n";
    }

    return ip;
}

如果您想获得与您的设备连接的网络的公共(public) IP,请使用此代码...
public class GetPublicIP extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... strings) {
        String publicIP = "";
        try  {
            java.util.Scanner s = new java.util.Scanner(
                    new java.net.URL(
                            "https://api.ipify.org")
                            .openStream(), "UTF-8")
                    .useDelimiter("\\A");
            publicIP = s.next();
            System.out.println("My current IP address is " + publicIP);
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

        return publicIP;
    }

    @Override
    protected void onPostExecute(String publicIp) {
        super.onPostExecute(publicIp);

        Log.e("PublicIP", publicIp+"");
        //Here 'publicIp' is your desire public IP
    }
}

新执行它
new GetPublicIP().execute();

关于android - 如何以编程方式获取 Android 设备的公共(public) IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59818891/

相关文章:

android - 发现泄漏 : AndroidHttpClient created and never closed

Android Azure 通知中心 SDK 无法在 Android Pie 中运行

android - 位图中的解码器错误

java - LibGDX 触摸位置坐标错误

android - 在哪里可以找到 Google Consent SDK 的 consentform.html?

scripting - 如何以编程方式更改工作站的 IP 地址?

iphone - 获取 iPhone 上当前 Wi-Fi 接入点的 IP 地址?

url - 显示域名而不是 IP 地址作为 url

linux - 如何获取本地主机的IP地址

c# - 使用 C# 从 IP 地址中删除前导零