【问题标题】:How to get Public IP address of the device?如何获取设备的公共 IP 地址?
【发布时间】:2014-01-29 18:40:54
【问题描述】:

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

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

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

我只需要用户的公共ip的代码以后看国家

【问题讨论】:

  • 设备甚至都不知道。您需要一个网络服务将其报告给您。
  • @323go 什么!?它没有说它在NAT后面,它可以是直接连接,所以设备会知道。即使它在 NAT 之后,通过 UPnP 它也可以将 IP 通知给设备。
  • @DiegoCNascimento,链接的问题不是重复的。发帖人问的是remote地址,不是本地地址,很容易搞定。您能否指出 UPnP 规范的哪一部分提供了远程地址的发现?我想您也许可以通过 SSDP 针对路由器/网关访问它,但通过外部服务的参与会大大减少,因为它还确认连接。
  • @DiegoCNascimento,请不要向我发送负面反馈这不是重复的,我需要远程地址而不是 localhost 不是路由器 DHCP 的本地 IP
  • 所以我不明白这个问题。 Internet 中设备的 IP 地址不是远程地址,而是 本地 公共地址。这是你说的还是你说的是其他设备的IP地址!?

标签: java android


【解决方案1】:
  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_WIFI_STATE 以访问代码。

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

来自Detect wifi IP address on Android?,用户 Tanmay Mandal

【讨论】:

  • 如果用户使用的是 DATA 而不是 wifi?
  • 所以您正在寻找 UUID?每次重新连接到 DATA 时,情况都会发生变化。此外,大多数移动设备使用 DHCP 来获取动态 IP 地址。
  • nt ip = wifiInfo.getIpAddress(); nt是什么类型的?? @Amealy
  • @Gatiko06,上面的答案对你没有帮助,因为它只会检索设备 wifi 连接的本地地址,这可能在 NAT 之后。
  • @323go,谢谢你的帮助,你很友好
猜你喜欢
  • 2015-02-26
  • 2020-05-06
  • 2019-03-16
  • 2011-03-16
  • 2016-01-09
  • 2017-09-23
  • 1970-01-01
  • 2018-10-22
  • 2013-06-29
相关资源
最近更新 更多