如何以编程方式查找设备的公共 IP 地址? [复制]

Posted

技术标签:

【中文标题】如何以编程方式查找设备的公共 IP 地址? [复制]【英文标题】:How to programmatically find the public IP address of a Device? [duplicate] 【发布时间】:2018-11-06 15:53:22 【问题描述】:

我们可以通过 WifiManager 或 InetAddress 获取本地 IP 地址。但我们需要在 android 中以编程方式获取当前公共 IP 地址。

【问题讨论】:

你需要公共网站看到的IP地址吗? (例如,如果您在 NAT 路由器后面,您不需要设备的 IP,而是需要路由器的公共 IP)。在这种情况下,我只需要一个外部 Web 服务,例如 whatismyip.com 【参考方案1】:

在清单文件中添加权限

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

创建移动数据和Wifi状态的方法。

public String GetDeviceipMobileData()
    try 
        for (java.util.Enumeration<java.net.NetworkInterface> en = java.net.NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) 
            java.net.NetworkInterface networkinterface = en.nextElement();
            for (java.util.Enumeration<java.net.InetAddress> enumIpAddr = networkinterface.getInetAddresses(); enumIpAddr.hasMoreElements();) 
                java.net.InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) 
                    return inetAddress.getHostAddress().toString();
                
            
        
     catch (Exception ex) 
        Log.e("Current IP", ex.toString());
    
    return null;



public String GetDeviceipWiFiData()
    android.net.wifi.WifiManager wm = (android.net.wifi.WifiManager) getSystemService(WIFI_SERVICE);
    @SuppressWarnings("deprecation")
    String ip = android.text.format.Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
    return ip;             

检查网络状态并调用此方法。

【讨论】:

你刚才提供的代码只给出了IPV4 IP地址 IE: 192.168.0.100 192.168.0.101 主发布者需要公共IP地址 是的,这是私有 IP

以上是关于如何以编程方式查找设备的公共 IP 地址? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式获取android手机的IP地址......? [复制]

如何以编程方式获取公共 IP 地址?

获取公共/外部 IP 地址?

Android 设备如何以编程方式推断它所连接的 Linux 设备的 IP 地址?

如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?

如何以编程方式通过 Wifi 获取连接在同一网络上的其他设备的 IP 地址?