0
点赞
收藏
分享

微信扫一扫

android获取公网ip

JakietYu 2023-07-21 阅读 77

Android获取公网IP

在Android应用程序中,有时需要获取设备连接到互联网时的公网IP地址。公网IP地址是设备在全球互联网上的唯一标识,通过公网IP地址,可以实现设备与其他设备之间的通信。

本文将介绍如何在Android应用程序中获取设备的公网IP地址,并提供相应的代码示例。

方法一:使用第三方API

有一些在线的第三方服务提供了获取公网IP地址的API。我们可以通过向这些API发送请求,获取到设备的公网IP地址。下面是使用Java代码的示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class PublicIpFetcher {
    public static String getPublicIp() {
        try {
            URL url = new URL("
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            return reader.readLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

上述代码使用了ipify.org提供的API。它返回一个包含设备公网IP地址的简单文本响应。注意,这种方法需要设备能够访问互联网。

方法二:使用Socket连接

我们还可以使用Socket连接来获取公网IP地址。该方法通过建立一个Socket连接到特定的服务器,并从服务器的响应中提取设备的公网IP地址。下面是使用Java代码的示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;

public class PublicIpFetcher {
    public static String getPublicIp() {
        try {
            Socket socket = new Socket("checkip.amazonaws.com", 80);
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            return reader.readLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

上述代码建立了一个Socket连接到checkip.amazonaws.com服务器的80端口,并从服务器的响应中获取设备的公网IP地址。

方法三:使用网络接口获取

Android系统提供了一种获取设备网络接口信息的方式,我们可以通过获取网络接口信息再进一步提取公网IP地址。下面是使用Java代码的示例:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

public class PublicIpFetcher {
    public static String getPublicIp() {
        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface networkInterface = interfaces.nextElement();
                Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                    if (!address.isLoopbackAddress() && !address.isLinkLocalAddress() && address.isSiteLocalAddress()) {
                        return address.getHostAddress();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

上述代码使用了NetworkInterface和InetAddress类,遍历设备上的网络接口,通过判断地址类型和范围,找到设备的公网IP地址。

总结

本文介绍了三种获取Android设备公网IP地址的方法,并提供了相应的代码示例。使用这些方法,我们可以在Android应用程序中获取设备连接到互联网时的公网IP地址。请根据具体需求选择合适的方法来实现。

举报

相关推荐

0 条评论