Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Rainmaker93
3 / 3 / 1
Регистрация: 12.09.2013
Сообщений: 69
#1

Программное получение белого IP адреса - Android

09.01.2016, 10:32. Просмотров 261. Ответов 6
Метки нет (Все метки)

Всем добрый день!
Наткнулся на необходимость получения IP адреса устройства в сети. Нагуглил следующую функцию:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    public String getIpAddress() {
        
        String ip = "";
        try {
            Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
                    .getNetworkInterfaces();
            while (enumNetworkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = enumNetworkInterfaces
                        .nextElement();
                Enumeration<InetAddress> enumInetAddress = networkInterface
                        .getInetAddresses();
                while (enumInetAddress.hasMoreElements()) {
                    InetAddress inetAddress = enumInetAddress.nextElement();
 
                    if (!inetAddress.isSiteLocalAddress()) {
                        ip = inetAddress.getHostAddress();
                        this.ipAdress = ip;
                    }
 
                }
 
            }
 
        } catch (SocketException e) {
            e.printStackTrace();
            ip = null;
        }
 
        return ip;
    }
Работать она работает, только вот внутри WiFi сети она достает локальный IP. Если включить могбильные данные, то она достает какой то не такой адрес начинающийся на 10. Сравнивал с IP шником, который мне выдал запрос "Мой ip адрес" в гугле.

Не подскажите пожалуйста, что не так и как мне все таки выковырять нужный IP?
Спасибо
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kolobok0
46 / 46 / 8
Регистрация: 24.01.2010
Сообщений: 225
09.01.2016, 10:50     Программное получение белого IP адреса #2
wifi у вас стоит на роутере или модеме? А тот уже в свою очередь лезет к провайдеру.
Если так - то в зависимости от стратегии работы с провайдером вам выдаётся либо статика либо отрабатывает DHCP. Провайдер в свою очередь может вам назначать либо виртуальный IP либо честный IP который из его инет пула берётся. где то так.

без вспомогательного внешнего софта вы не сможете узнать IP адрес провайдера. Как вариант - парсить ответ от "мой IP адрес в гугле". только маленький вопрос возникает - а нафига его узнавать?

(круглый)
Rainmaker93
3 / 3 / 1
Регистрация: 12.09.2013
Сообщений: 69
09.01.2016, 11:09  [ТС]     Программное получение белого IP адреса #3
kolobok0,
Цитата Сообщение от kolobok0 Посмотреть сообщение
только маленький вопрос возникает - а нафига его узнавать?
У меня есть прога, в которой я реализовал небольшой чатик на сокетах. В нее логинятся пользователи и при логине в базу MySQL пишется IP юзера. Другой пользователь, грубо говоря, хочет открыть с ним чат, и ему необходимо знать IP своего собеседника
Вот такая у меня идея есть. Может быть ее стоит переосмыслить и написать как то по другому...
kolobok0
46 / 46 / 8
Регистрация: 24.01.2010
Сообщений: 225
09.01.2016, 11:15     Программное получение белого IP адреса #4
если чатик у вас болтается в инете, то проблем по узнаванию IP адреса собственно у Вас не должно быть

(круглый)
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
09.01.2016, 11:34     Программное получение белого IP адреса #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Всё украдено до нас

http://stackoverflow.com/a/6218852
http://stackoverflow.com/a/12854981
Rainmaker93
3 / 3 / 1
Регистрация: 12.09.2013
Сообщений: 69
09.01.2016, 11:45  [ТС]     Программное получение белого IP адреса #6
kolobok0,
У меня логика такая, что на клиенте в отдельном потокекрутится сервак) и собственно сам клиент к нему цепляется по localhost, а удаленному юзеру нужен белый ip этого сервера)
Armagedo,
Спасибо за инфу) обязательно попробую)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2016, 12:12     Программное получение белого IP адреса
Еще ссылки по теме:

Получение адреса, по координатам Android
Программное добавление элементов Android
Камера, настройка баланса белого Android
Android Программное добавление View
Как достать из телефонной книги адреса чатов, адреса проживания и сайты Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Rainmaker93
3 / 3 / 1
Регистрация: 12.09.2013
Сообщений: 69
10.01.2016, 12:12  [ТС]     Программное получение белого IP адреса #7
Запихнул все дело в класс отдельный. IP получает нормальный)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.helper.moto.motohelper;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
 
import android.os.AsyncTask;
 
public class GetIP extends AsyncTask<Void, Void, String> {
    String ip;
 
    @Override
    protected String doInBackground(Void... params) {
         try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpGet httpget = new HttpGet("http://ip2country.sourceforge.net/ip2c.php?format=JSON");
                // HttpGet httpget = new HttpGet("http://whatismyip.com.au/");
                // HttpGet httpget = new HttpGet("http://www.whatismyip.org/");
                HttpResponse response;
 
                response = httpclient.execute(httpget);
                //Log.i("externalip",response.getStatusLine().toString());
 
                HttpEntity entity = response.getEntity();
                entity.getContentLength();
                String str = EntityUtils.toString(entity);       
                JSONObject json_data = new JSONObject(str);
                ip = json_data.getString("ip");
                
            }
            catch (Exception e){
                e.printStackTrace();
            }
 
 
        
        return ip;
    }
 
}
Yandex
Объявления
10.01.2016, 12:12     Программное получение белого IP адреса
Ответ Создать тему
Опции темы

Текущее время: 14:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru