Java 如何获取设备的公共IP地址?

Java 如何获取设备的公共IP地址?,java,android,Java,Android,是否可以使用Android中的Java代码获取设备的公共IP地址 我可以使用curl和php到远程服务器了解公共IP吗?但是我不知道如何在Java中使用curl 我需要基于公共IP地址的用户国家/地区代码 我只需要用户的公共ip代码,稍后查看国家/地区 public String getIpAddr() { WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInf

是否可以使用Android中的Java代码获取设备的公共IP地址

我可以使用curl和php到远程服务器了解公共IP吗?但是我不知道如何在Java中使用curl

我需要基于公共IP地址的用户国家/地区代码

我只需要用户的公共ip代码,稍后查看国家/地区

  public String getIpAddr() {
       WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
       WifiInfo wifiInfo = wifiManager.getConnectionInfo();
       nt ip = wifiInfo.getIpAddress();

  String ipString = String.format(
       "%d.%d.%d.%d",
        (ip & 0xff),
        (ip >> 8 & 0xff),
        (ip >> 16 & 0xff),
        (ip >> 24 & 0xff));

        return ipString;
}

请注意:您需要在AndroidManifest.xml中添加android.permission.INTERNET和android.permission.ACCESS\u WIFI\u状态以访问代码

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


通过,用户Tanmay Mandal

设备甚至不知道。您需要一个web服务来向您报告。@323go什么!?它没有说它在NAT后面,它可以是一个直接连接,这样设备就会知道。即使它在NAT后面,通过UPnP它也可以将IP通知给设备。@Diegocnascemento,链接的问题不是重复的。海报询问的是远程地址,而不是本地地址,这很容易得到。请指出UPnP规范的哪一部分提供了远程地址的发现?我想您可能可以通过路由器/网关通过SSDP访问它,但通过外部服务的参与度将大大降低,因为它还可以确认连接。@Diegocnascemento,请不要向我发送负面反馈这不是重复的,我需要远程地址不是本地主机不是路由器DHCPSo的本地Ip我不明白这个问题。Internet中设备的IP地址不是远程地址,而是本地公共地址。这是您正在谈论的还是其他设备IP地址!?如果用户使用的是数据而不是wifi?那么你是在寻找UUID?这将在每次重新连接到数据时发生变化。此外,大多数移动设备使用DHCP获取动态IP地址。nt IP=wifiInfo.getIpAddress();nt是什么类型的@Amealy@Gatiko06,上面的答案对您没有帮助,因为它只会检索设备wifi连接的本地地址,这可能是在NAT之后。@323go,谢谢您的帮助,您非常友好