Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Rainmaker93
4 / 4 / 2
Регистрация: 12.09.2013
Сообщений: 69
#1

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

09.01.2016, 10:32. Просмотров 392. Ответов 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?
Спасибо
http://www.cyberforum.ru/android-dev/thread1540235.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2016, 10:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программное получение белого IP адреса (Программирование Android):

Как достать из телефонной книги адреса чатов, адреса проживания и сайты
Здравствуйте, как достать из телефонной книги адреса чатов, адреса проживания и...

Камера, настройка баланса белого
Всем привет! Подскажите пожалуйста, как в андройде приложение с камерой...

программное получение Mac-адреса машины
Как можно получить MAC-адрес машины, например, при открытии базы. Может ли...

Получение чёрно-белого изображения
Помогите пожалуйста!!!! Как получить черно-белое изображение. 30% красного 59...

Получение MAC адреса из IP адреса
Доброго времени суток, форумчане! Скажите, пожалуйста, как получить MAC...

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

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

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

(круглый)
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
09.01.2016, 11:34 #5
Лучший ответ Сообщение было отмечено Rainmaker93 как решение

Решение

Всё украдено до нас

http://stackoverflow.com/a/6218852
http://stackoverflow.com/a/12854981
1
Rainmaker93
4 / 4 / 2
Регистрация: 12.09.2013
Сообщений: 69
09.01.2016, 11:45  [ТС] #6
kolobok0,
У меня логика такая, что на клиенте в отдельном потокекрутится сервак) и собственно сам клиент к нему цепляется по localhost, а удаленному юзеру нужен белый ip этого сервера)
Armagedo,
Спасибо за инфу) обязательно попробую)
0
Rainmaker93
4 / 4 / 2
Регистрация: 12.09.2013
Сообщений: 69
10.01.2016, 12:12  [ТС] #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;
    }
 
}
0
10.01.2016, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2016, 12:12
Привет! Вот еще темы с решениями:

Программное определение АйПи-адреса
Доброе время суток всем... Вопрос в следующем: довольно часто приходится...

Программное получение краткой информации
Подскажите как программно получить краткую информацию из свойств конфигурации

Программное получение параметров процедуры
Есть ли какой-то способ программно получить список параметров конкретной...

Получение адреса
Есть следующая строка: long int array; Что означает, если мы напишем...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru