Как стать автором
Обновить

Комментарии 84

Город по IP вычислен правильно (Николаев, Украина), но…

Timezone: Europe/Zaporozhye

Это как? Что-то я не слышал про Запорожский часовой пояс :)
Тем не менее, такой есть, к примеру вот в доках по PHP. Вполне возможно, что когда-то запорожское время не совпадало с киевским временем.
У самого был соблазн поубирать к примеру для Украины все, кроме киевского времени, но потом решил оставить так, как пишут в различных справочниках.
Крымское время как-то не совпадало. А запорожское — никогда :)

Ну это уже больше вопрос к создателям этих самых timezone :)
Это вы просто Ubuntu не ставили в украинскую временную зону.
Нужно хорошо пощелкать мышкой в районе Украины, что бы Запорожье сменилось на Киев.
Город по IP вычислен неправильно. Это, пожалуй, классика жанра, что Сургут (static ip, через Уралсвязьинформ) в 90% баз определяется как Ханты-Мансийск или как Курган, но ни в коем случае не Сургут :) Встречал базы, где это разделение четкое и особенности УСИ предусмотрены.
Если можно IP скиньте в личку поправим.
Скинул, но мой IP такой не один. Проблема намного глобальнее.
Не знаю, реально ли поправить, но Украинский провайдер 3G интернета Intertelecom выдает динамические IP адреса, и все они определяются как в Одессе, хотя физически я нахожусь в Киевской области. Это можно поправить? Любые сервисы определяют так.
Никак это нельзя поправить. Сегодня этот IP в одном городе, а завтра в другом. Пишется место где он зарегистрирован.
да там таких примеров полно — несколько провайдеров работают по всей Сибири. Я думаю что в европейской части тоже должны быть неверные блоки от федералов
Да, у меня проводной Билайн одно время частенько определялся как московский, хотя пользовался я им в Питере.
Пока переходил с 2.0.0 на новую версию, обнаружил, что константа SXGEO_FILE не определена, а в документации написано «Второй параметр — режим работы: SXGEO_FILE (работа с файлом базы, режим по умолчанию)». И метода getCountry($ip) не существует, хотя в док. он есть: "$country = $SxGeo->getCountry($ip); (возвращает двухзначный ISO-код страны)". Кстати, я не нашел в классе ни одной функции, определяющей только страну (get_cc() в пред. версии). Документация тут: sypexgeo.net/ru/docs/
Спасибо за замечание, почему-то API не последней редакции залито было, сейчас обновил файл, там SXGEO_FILE вернулось, да и его можно пропускать.
Страну возвращают $SxGeo->getCountry($ip) или просто $SxGeo->get($ip)
Промахнулось, примерно на 2500 км. Туннелей нет, если что.
Если можно IP скиньте в личку поправим.
Сейчас пытаюсь выяснить, похоже что всё таки меня здесь развернули через прозрачный прокси, так что возможно и погорячился.
Зашёл из Томска:

image

Город определился почти верно, к нему претензий нет: в конце концов, такие записи почти во всех базах RIPE. Но почему на карте Украина? :-)
Там тоже Северск есть, тут скорее всего вопрос как ищется место на карте и как определяются координаты.
Да, похоже, Вы правы. Тут явно речь идёт о Северске донецкой области, даже координаты совпадают.

Что, однако, не отменяет моего подозрения об ошибке в базе, а наоборот, усиливает.
Проверим, бывают просто ошибки, код страны один, а в адресе город и страна другие.
Кстати, к городам из США неплохо было бы прилепить двухбуквенный код штата, в котором они находятся. Иначе город Cambridge, например, в штате Massachusetts ничем не будет отличаться от одноименного города в шт. Maryland или Vermont. Поля lon-lat могут помочь только на карте.
Так штат должен в регионе показываться. Код есть, так же как и FIPS коды областей.
Сейчас в проектах использую MaxMind, платно, но зато базы постоянно обновляются и вообще, находятся в достаточно актуальном состоянии.
Как правило, все открытые проекты грешат низкой скоростью обновления и постоянными огрехами. В свое время именно поэтому в свое время отказался от ipgeobase.
Как будет обстоять с этим вопросом в SypexGeo?
Все подобные проекты обречены на огрехи. Причина очень проста — БД строится по информации из RIR (RIPE, ARIN и т.д.). Т.е. по сети определяется владелец, по владельцу определяется местоположение. У самого же объекта network нету поля «город». Вот и получается, что если провайдер предоставляет услуги в нескольких городах/регионах, то все его сети числятся за «домашним городом».

Как-то так в первом приближении. Возможно автор меня поправит.
А бывает такое что в «домашнем городе» провайдер вообще не предоставляет услуги?
Я думаю чисто принципиально такое возможно, но вряд ли часто встречается.
Вопрос не в огрехах (понятно, что без этого обойтись не получится), а в скорости их исправления.
Скорость исправления, в данном случае, зависит не только от доброй воли автора проект (исправления ручные), но и от доброй воли провайдеров (только они знают в каком городе какие их сети). Провайдерам, как вы сами понимаете, глубоко чихать на подобные сервисы.
В планах как раз обновляться с частотой MaxMind, для начала просто нужно подчистим базу. Ну и учитывая открытость самого формата в него можно будет конвертировать самостоятельно.

А сколько кстати размер бинарной базы у платного GeoIP, и как она обновляется полностью файл качается или только разница?
Вообще, если аккумулировать в единое целое информацию из нескольких баз, может получится и интересный вариант.

Насчет размера не знаю, я пользуюсь запросами к базе через API
НЛО прилетело и опубликовало эту надпись здесь
не всегда разрешено, а если разрешено, не всегда отдает. не всегда на том конце современный браузер, да и браузер то не всегда. Да и другого конца может и не быть — просто список адресов, и все
Собственно так и не увидел сравнение с правильно настроенным запросом в базу mysql. В комментах к первой статье несколько раз писали что и сравнение надо делать по одному полю и индекс правильно настроить. Могу лишь добавить что если пошаманить с буферами, то скорость будет в миллионы запросов в секунду

Есть суровое подозрение что самописный поиск при прочих равных не сможет реально дать большую скорость чем поиск по хешированному индексу, весь вопрос в том сколько ему дали памяти
Прежде чем подозревать, проведите тесты сами. Это не так сложно.
Или, в крайнем случае, разберитесь в алгоритмах. Благо они не такие большие.
Во-во, хеш дает O(1) а поиск O(logn(n)) в лучшем случае :)
Я как раз собираюсь написать еще одну статью с подробным тестированием, в том числе разных вариантов MySQL запросов. Можете прислать свой вариант правильного запроса к MySQL, я его протестирую.
Может это уже слишком, и я не знаю есть ли это в других базах, но был бы полезным столбец с основными языками, используемыми в стране.
Это в принципе легко добавить. Сейчас собирается подробная инфа по городам (индексы, телефонные коды, численность населения) можно и языки добавить
Ну не всё сразу, постепенно будем расширяться :)
85.15.175.10 Координаты: 56.8333, 60.6
Город: Екатеринбург,
Регион: Свердловская область,

Из Тюмени зашел через университетский wi-fi (канал предоставлен Екб-м провайдером, правильно)

зы: (через свой инет все правильно определяет)
Видимо wifi в ТюмГУ ;)
У меня ip 85.15.175.253, тоже показывает, что г.Екатеринбург, но я так же зашел из г.Тюмень.
Как уже сказал MechanisM выше, хотелось бы IPv6, чтобы было инновационнее, чем у других. Правда туннельные брокеры «сломают» правильность определения местоположения.
Если верить местным (омским) представителям провайдера Билайн, то пул IP-адресов для домашнего интернета един на всю страну, поэтому сидя в одном и том же городе, разрывая сессию можно добиться местоположения и Смоленск, и Волгоград.
Благодаря туннельным брокерам наконец то будет искоренена проблема ip дискриминации
Город определил правильно — Пенза, но часовой пояс почему-то Самары.
А рабочий IP — 79.133.89.XXX определил в Москве. На самом деле опять же Пенза.
Украинское ОГО! (Укртелеком) похоже определяет как Киев.

Например, 95.135.190.8 — Здолбунов, ровенская область.
И это не удивительно, определяет так же как и все другие подобные сервисы определения города.
Вряд ли это возможно исправить без договорённости с Укртелекомом
(чтобы знать в каком городе из какого диапазона выделяются ip).
Вы хотите чтобы провайдер просто так, по запросу неизвестной частной фирмы, раскрыл адрес своего клиента?
Ну с крупными провайдерами, точности добиться сложно, так как они зачастую тасуют IP как угодно.
2.92.139.74 ростов билайн провод
определяет как москва
С Билайном проблематично, еще ни разу у меня верно ip не был определен. Подозреваю, что у них общий пул на всю Россию, что было подтверждено комментарием выше.
Данные по России более свежие и актуальные у ipgeobase, причем делается на базе RIPN и обновляется ежедневно.
Огромное спасибо за проект (и вообще, пользуясь случаем, за все sypex*), очень пригодится.
Одна маленькая идея, родилась после прочтения комментариев к топику — вы бы добавили кнопочку «Город определен неверно, правильный город ...», тогда бы после публикации имели список диапазонов, по которым определение идет неверно.
Спасибо, обязательно добавим кнопочку.
Кстати под брендом Sypex готовится еще 2 проекта :)
Нахожусь в Смоленске, но сервис утверждает, что в Перми.
Никто еще в комментариях не запостил картинку «Как вычислить по IP… for dummies»? Я удивлен.
Для американского IP показывает русское название штата и города. Мне кажется это неправильный подход.
Если Вы используете базу Sypex Geo City которая должна быть на русском языке, то вполне логично, что названия иностранных городов в ней будут на русском.

Если Вам нужны названия мест на английском, то используте базу GeoLite City.
Я использовал демо страничку. Наверное будет логично иметь версии на двух разных языках.
Это пока в бете идет уточнение базы, нужно чтобы просто параллельно собиралась обратная связь, от потенциальных пользователей. Все данные сейчас собираются на русском и английском, в дальнейшем будут версии Sypex Geo City на двух языках.
Простите, я так и не нашел на сайте кнопочку «Город определен не верно»
> Для системы статистики нашей Sypex CMS…
Нагуглил вот это: sypex.net/ru/cms/, но там нет никакого описания. Не собираетесь ли рассказать об этой системе на хабре или у себя на сайте?
Нахожусь в Нью-Йорке, провайдер Time Warner Cable. Определило с точностью до континента)

Данные по штатам по сути, такие же как в Geo Lite City, сейчас работаем в первую очередь над СНГ и Европой.
Документацию бы чуточку подробнее.
Документации по использованию и о самом формате?
Например, чтобы узнать имена ключей выходного массива, пришлось его сперва целиком выводить)
Недавно зашел на яндекс-карты, так они не просто мой город определили, а даже дом на карте указали. Вот как так они делают?
IP сотовых операторов определяет часто неверно. Для Восточной Сибири у МТС (да и у других операторов наверняка тоже) часто показывает как Хабаровск.
Еще есть отдельная проблема с Opera mini.
Попробовал 2 адреса. Один — Центральный телеграф в Красногорске, определился как Москва, в общем-то ладно, довольно близко. Второй — ТВТ в Набережных Челнах, определился как Казань. Да еще и time zone Europe/Samara. Судя по описанию, Europe/Samara только в Самарской области и Удмуртии, а Казань — Татарстан, там Europe/Moscow.
178.137.20.* пишет Украина \ Киев
я в Украина \ Донецкая обл \ Макеевка
2.92.91.xx — пишет, что Брянск, хотя на самом деле я из Саратова.
Но пользуюсь домашним интернетом от билайн, их IP очень редко правильно распознаются.
НЛО прилетело и опубликовало эту надпись здесь
Будут ли обновления базы по адресам?
Да, как раз вчера обновились.
Супер, спасибо. Проверил адреса, которые раньше не определялись, теперь все ОК.
Внедрен на проекте в 200к+ визитов в сутки. Полет отличный.
а что с модулем для nginx? есть какие-нибудь движения в эту сторону?
В демке json отдается без экранирования апострофов, что приводит к ошибки парсинга.
Увы… но мой город тоже не определился правильно… при том что в самой базе название моего города есть…

image
А какой IP (можно в личку)? Проверим.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории