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

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

【问题讨论】:

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

标签: android ip-address


【解决方案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
猜你喜欢
  • 2020-05-06
  • 2018-05-28
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
相关资源
最近更新 更多