Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Попадание ip адреса в диапазон / 12 сообщений из 12, страница 1 из 1
28.06.2016, 17:57
    #39264085
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
Всем привет. Может быть вопрос не в тот форум, но вдруг кто-то сталкивался с подобным.
В mysql хранятся диапазоны айпишников, например:
Код: plaintext
1.
2.
3.
id         ip_from                  ip_to              city
2	159.224.2.11	159.224.165.255    Город Х
3	77.1.1.0	        160.224.185.255    Город Y
Беру какой-нибудь айпи из города Город Х: 159.224.165.242 (сервис 2ip показывает принадлежность именно этому городу)
делаю запрос:
Код: sql
1.
SELECT * FROM test.ip_range where inet_aton('159.224.165.242') between inet_aton(ip_from) and inet_aton(ip_to);


при помощи inet_aton адреса переводятся в числа и в результате на выходе получаю две записи, т.е., что искомый айпи входит и в первый и во второй диапазоны. А по факту он принадлежит только "Город Х". Как правильно решать подобные штуки? Спасибо!
...
Рейтинг: 0 / 0
28.06.2016, 18:20
    #39264112
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
JulTА по факту он принадлежит только "Город Х".
По-русски объясните по какому факту так вообще получилось? Второй диапазон ошибочен или что с ним? Нужно брать кратчайший диапазон или что?
...
Рейтинг: 0 / 0
28.06.2016, 18:26
    #39264117
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
Ну в общем то, первый диапазон полностью попадает во второй.

Т.ч. судя по Вашим исходным данным, ВСЕ ПРОСТО !!!!

Первый город маленький, а второй - большой мегаполис. Понятно, что IP из Мтищи, одновременно входят и в Московскую область )))
...
Рейтинг: 0 / 0
28.06.2016, 18:31
    #39264122
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
Интересно, какому городу принадлежат IP 192.168.*.* )))

Правильный подход - обратиться к поставщику исходных данных и спросить, по каким принципам они построены, как с ними работать.

Лично я бы:
1) просто присвоил приоритет записям. Соответственно подсети с небольшой маской - имеют преимущество перед подсетями с большой маской.

IMHO
...
Рейтинг: 0 / 0
28.06.2016, 18:57
    #39264137
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
BlazkowiczJulTА по факту он принадлежит только "Город Х".
По-русски объясните по какому факту так вообще получилось? Второй диапазон ошибочен или что с ним? Нужно брать кратчайший диапазон или что?
да, нужно брать кратчайший диапазон, но как?
...
Рейтинг: 0 / 0
28.06.2016, 18:59
    #39264139
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
Leonid KudryavtsevИнтересно, какому городу принадлежат IP 192.168.*.* )))

Правильный подход - обратиться к поставщику исходных данных и спросить, по каким принципам они построены, как с ними работать.

Лично я бы:
1) просто присвоил приоритет записям. Соответственно подсети с небольшой маской - имеют преимущество перед подсетями с большой маской.

IMHO
можно ли автоматически при занесении в базу как-то рассчитывать эти приоритеты?
вот что в соседнем форуме посоветовали: http://www.sql.ru/forum/1220255-a/popadanie-ip-adresa-v-diapazon
не вариант
...
Рейтинг: 0 / 0
28.06.2016, 19:03
    #39264142
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
"Длину" диапазона посчитать же можете. Вот и берите наиболее короткие. IMHO

Хотя от ошибок, если диапазоны пересекаются - это все равно Вас не спасет

Да и вообще, не факт, что IP с каким-то конкретным городом связан. Вхожу через Мегафон из Ростова-на-дону, все сервера определяют как Краснодар (> 300 км) Просто потому, что скорее всего, там у Мегафона какой-то региональный центр.

BlazkowiczНужно брать кратчайший диапазон или что?
+1
...
Рейтинг: 0 / 0
28.06.2016, 20:13
    #39264204
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
JulT,

ip определяются по провайдеру, а он может иметь регистрацию в одной области , а работать в нескольких других, поэтому не факт, что по ip можно узнать город.
...
Рейтинг: 0 / 0
28.06.2016, 21:14
    #39264244
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
Ясно. Всем спасибо за помощь
...
Рейтинг: 0 / 0
28.06.2016, 23:15
    #39264298
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
JulTБеру какой-нибудь айпи из города Город Х: 159.224.165.242 (сервис 2ip показывает принадлежность именно этому городу)
делаю запрос:
Код: sql
1.
SELECT * FROM test.ip_range where inet_aton('159.224.165.242') between inet_aton(ip_from) and inet_aton(ip_to);


при помощи inet_aton адреса переводятся в числа и в результате на выходе получаю две записи, т.е., что искомый айпи входит и в первый и во второй диапазоны. А по факту он принадлежит только "Город Х". Как правильно решать подобные штуки? Спасибо!
Тут ничего поделать нельзя. В базе действительно диапазоны перекрываются.
Но если предположить что сетка X входит в Y тогда можно искать в порядке нарастающих
длин диапазонов и брать первый сверху.

Код: sql
1.
2.
3.
SQL> SELECT * FROM test.ip_range where inet_aton('159.224.165.242') 
between inet_aton(ip_from) and inet_aton(ip_to) 
order by (inet_aton(ip_to) - inet_aton(ip_from)) asc;
...
Рейтинг: 0 / 0
29.06.2016, 08:13
    #39264389
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
maytonJulTБеру какой-нибудь айпи из города Город Х: 159.224.165.242 (сервис 2ip показывает принадлежность именно этому городу)
делаю запрос:
Код: sql
1.
SELECT * FROM test.ip_range where inet_aton('159.224.165.242') between inet_aton(ip_from) and inet_aton(ip_to);


при помощи inet_aton адреса переводятся в числа и в результате на выходе получаю две записи, т.е., что искомый айпи входит и в первый и во второй диапазоны. А по факту он принадлежит только "Город Х". Как правильно решать подобные штуки? Спасибо!
Тут ничего поделать нельзя. В базе действительно диапазоны перекрываются.
Но если предположить что сетка X входит в Y тогда можно искать в порядке нарастающих
длин диапазонов и брать первый сверху.

Код: sql
1.
2.
3.
SQL> SELECT * FROM test.ip_range where inet_aton('159.224.165.242') 
between inet_aton(ip_from) and inet_aton(ip_to) 
order by (inet_aton(ip_to) - inet_aton(ip_from)) asc;


Да, спасибо большое, так и сделала
...
Рейтинг: 0 / 0
29.06.2016, 15:37
    #39264780
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попадание ip адреса в диапазон
Думаю оптимальнее будет так.
Код: sql
1.
2.
3.
4.
5.
            SELECT *
            FROM ip_range 
            WHERE inet_aton(:ip_addr) >= ip_start
            ORDER BY ip_start DESC
            LIMIT 1



Выход за предел диапазона можно на клиенте уже проверить.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Попадание ip адреса в диапазон / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]