Определить устройство публичного ip - PullRequest
14 голосов
/ 10 июня 2011

Кто-нибудь знает, как я могу получить публичный IP-адрес устройства Android?

Я пытаюсь запустить серверный сокет (просто экспериментирую с простым p2p).

Это требует информирования локальных и удаленных пользователей друг о друге по общему IP. Я нашел эту тему Как получить IP-адрес устройства из кода? , который содержит ссылку на статью (http://www.droidnova.com/get-the-ip-address-of-your-device,304.html), в которой показано, как получить IP-адрес. при подключении через маршрутизатор, и я хотел бы получить реальный публичный IP вместо этого.

1011 * ТИА *

Ответы [ 13 ]

1 голос
/ 16 июня 2017

Используя org.springframework.web.client.RestTemplate и Amazon API , вы можете легко получить ваш публичный IP.

public static String getPublicIP() {
    try {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject("http://checkip.amazonaws.com/", String.class).replace("\n","");
    } catch ( Exception e ) {
        return "";
    }
}
1 голос
/ 20 октября 2016

Это продолжение ответа Eng.Fouad , то есть путем анализа публичного IP-адреса с checkip.org (используя JSoup ) ::

Метод (Incase, если вы получили ошибку исключения из предыдущего метода):

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
**********
public static String getPublicIp()
    {
        String myip="";

        try{
            Document doc = Jsoup.connect("http://www.checkip.org").get();
            myip = doc.getElementById("yourip").select("h1").first().select("span").text();
            }
        catch(IOException e){
            e.printStackTrace();
            }
        return myip;
        }

Пример метода вызова:

<your class name> wifiInfo = new <your class name>();
String myIP = wifiInfo.getPublicIp();

Скомпилируйте следующую библиотеку в ваших зависимостях build.gradle

compile 'org.jsoup:jsoup:1.9.2'

JSoup скомпилирован с использованием Java API версии 8, поэтому добавьте следующее в build.gradle defaultConfig {}

jackOptions{
        enabled true
        }

и измените опцию компиляции на:

    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }

И последнее, но не менее важное: поместите следующий код в метод onCreate (), поскольку по умолчанию вы не должны запускать сетевую операцию с помощью пользовательского интерфейса (рекомендуется через службы или AsyncTask), а затем пересобирать код.

StrictMode.enableDefaults();

Протестировано и работает на Lolipop и Kitkat.

0 голосов
/ 20 ноября 2016

Я использую FreeGeoIP, и тоже получаю IP-> GEO.

http://freegeoip.net/json

Еще одно решение по сравнению с whatismyip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...