2017-01-13 8 views
2

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

Я изучил API Inet и WifiManager, и все, что они, похоже, вам дадут, это ваш IP-адрес локальной сети. Код, который я пробовал ниже, просто дает мне мой местный адрес.

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); 
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); 
TextView ipaddr = (TextView)findViewById(R.id.address); 
ipaddr.setText("Your IP Address is: " + ip); 

ответ

1

Попробуйте это:

try { 
     URL ip = new URL("http://checkip.amazonaws.com/"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(ip.openStream())); 

     System.out.println(in.readLine()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

AsyncTask необходимо –

+0

Конечно. Мой код показывает, как получить IP-адрес. И он должен быть правильно использован в Android – Uata

+0

Спасибо @Uata это работает отлично, для того, чтобы заставить его работать, нужно немного поиграть с ASyncTask, но вы правильно не добавили туда этот код. Это мешает мне быть ленивым – Crouch

3

Вы делаете HTTP-вызов службе, которая сообщает вам, что ваш внешний IP-адрес. Примером такой услуги является ipify.

https://api.ipify.org/

Документация: https://www.ipify.org

Выдержки:

try (java.util.Scanner s = new java.util.Scanner(new java.net.URL("https://api.ipify.org").openStream(), "UTF-8").useDelimiter("\\A")) { 
    System.out.println("My current IP address is " + s.next()); 
} catch (java.io.IOException e) { 
    e.printStackTrace(); 
} 
+0

Почему downvote? – Dev

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259) включить здесь основные части ответа и предоставить ссылку для справки. –