Определение города по IP-адресу

    Такая потребность может возникнуть при геотаргетинге информации, работе картографических сервисов, анализе статистики посещений сайта.

    Задача решается следующим образом.

    1. Выкачиваем и правильно складываем базы whois.
    2. Для каждой подсети определяем город.
    3. Пакуем базу в бинарный файл.

    Но зачем это все делать самим, когда уже есть готовые решения. Одно из них (полную версию) я выкладываю сюда для теста и получения фидбэка.

    А теперь немного более подробно по задачам.

    1. Выкачиваем и правильно складываем базы whois — для этого пишем многопоточную качалку-парсер, которая выбирает всю значимую информацию в диапазонах 0.0.0.0-255.255.255.255.
    Сложности — правильно вычислять значимые диапазоны подсетей и договориться с сервисами whois чтобы не забанили и разрешили делать соответствующую нагрузку.
    Результат — примерно 20 Гб записей.

    2. Для каждой подсети определяем город — для этого пишем параллельно работающую распознавалку, которая с помощью словаря вариантов написаний городов, телефонных кодов и прочих признаков определяет город.
    Сложности — создание и поддержка словарей вариантов, большие объемы информации.
    Результат — несколько миллионов выделенных и распознанных подсетей.

    3. Пакуем базу в бинарный файл — для этого паковщик пробегает все диапазоны и собирает данные в бинарное дерево возвращающее по IP-адресу запись о городе, координатах, регионе, стране, в том числе национальные написания.
    Сложности — составление словарей с национальными написаниями названий городов, оптимизация алгоритмов паковщика.
    Результат — бинарная база примерно 11 Мб.

    Что получаем в итоге:
    — геобаза по всему миру;
    — доступная цена;
    — честная, не ворованная база соответствий IP-адрес -> город;
    — названия городов, стран, регионов на русском;
    — возможность локализации базы (технология позволяет использовать национальные алфавиты, особенности в названиях);
    — улучшенная поддержка exUSSR (никаких тебе городов — ul.Lenina и т.д.);
    — интерфейсы для работы с бинарной базой на c, php, perl;
    — отработана технология построения различных вариантов/версий базы.

    А вот и сама ссылка на полную версию CNGeoip для тестирования — www.cn-software.com/datastore.php?7ae24a71bad7583b551289f0b03062c9
    Ссылка действует до 20 июня 2008 года.

    В качестве фидбэка хочется получить предложения по улучшению, репорты об ошибках (их лучше слать сюда www.cn-software.com/ru/contacts), предложения по стартапированию продукта (реально ли это? или только веб 2.0 нынче в почете).

    добавлено.
    Да, коллеги, нам не жалко если до 20 июня (пока действует ссылка), кто-то кроме хабровчан скачает модуль и отпишет пожелания — поделитесь инфой с коллегами, вдруг кому полезно будет.
    Share post

    Similar posts

    Comments 84

      0
      http://ipgeobase.ru/
      Не проще готовое использовать?
        +1
        Проще, но мне нужна не только РФ.
        И мне нужен бинарный формат для быстрой обработки запросов.
          0
          гм, а где можно почитать о бинарных базах?
            0
            начать можно здесь
            http://www.codenet.ru/search/search.php?…
              0
              а будет ли своего рода онлайн версия с API для работы с базой?
                0
                если я правильно понял, то да.
          0
          А для FF есть плагин выводящий подобную инфу?
            0
            Нет. А для чего такой плагин может понадобится? Как быстрый поиск города по ИП? Будут ли от этого больше покупать?
              0
              Для ФФ есть ВСЕ. ;) Есть Плагин FlagFox тянуший из похожей базы информацию о стране где находятся сервера того сайта вкладка с которым открыта.
              +1
              Этому сервису сложно доверять.

              Совсем недавно писал сервис для одной конторы, разбросанной по Сибири. В каждом городе представительства, северные коэффициенты, все дела - цены разные. А нужно выдавать юзеру местные. И местные адреса представительств ставить на первые места в общем списке.

              Взял базу ipgeobase, отбросил не интересующие регионы, начали тестить.
              В регионах не работает. Берем IP представительств.

              Ага, Москва. За Уралом.
                0
                Спасибо за информацию!
              +5
              Человече, чем тебя geoip не устроил?
                0
                не по русски говорит он.
                дорогой.
                плохо определяет города по exUSSR.
                • UFO just landed and posted this here
                    0
                    если можно поподробнее. кому ему и какую базу. и как это связано с русскими городами.
                    • UFO just landed and posted this here
                        0
                        Причем здесь сишный интерфейс к базе? Мы говорим про технологию получения самой базы. С теми отличиями от геоиплайт, что я писал в топике.
                0
                Может Maxmind GeoIP сгодится?
                Есть разные варианты, в т.ч. бесплатные но с ограничениями
                  0
                  В дополнение к вышесказанному при испльзовании бесплатностей от макмайнда надо учитывать еще этот момент:
                  Under the license agreement, all advertising materials and documentation mentioning features or use of this database must display the following acknowledgment: "This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/."
                    0
                    Это критично?
                    Мелким шрифтом на отдельной странице.
                      0
                      ну кому как. я бы сказал - это скорее негатив, чем позитив. ну и еще одна из причин задуматься какой продукт юзать в проектах.
                  +2
                  Попробовал тестировать по Украине:

                  195.114.120.71 - не определил, только страна (правильный ответ Тернополь)
                  193.239.143.145 - не определил, только страна (правильный ответ Хмельницкий)
                  213.179.232.166 - не правильно определил, только страна (правильный ответ Житомир)
                  193.243.158.4 - правильно определил Винницу
                  62.149.2.1 - правильно определил Киев

                  http://www.maxmind.com/app/lookup_city с этим справился.
                  Конечно удобно, что есть все на русском.
                    0
                    Спасибо!
                    +1
                    база whois это конечно здорово, но вообще whois + дополнительные источники ( например от провайдеров, какие то другие источники где можно сопоставить ip и регион ) - всё это во первых на 100% корректно автоматически не обрабатывается - некая ручная работа нужна, во вторых точность определения региона даже в случае ручного премодера и избавления от упячки, и подключения баз ip от дружественных провайдеров не превышает 80% случаев. У баз основанных только на whois точность еще меньше.
                      0
                      "дополнительные источники" - их никто и никогда не даст. Остается хуис, ручная обработка и фидбэк от пользователей. Необходима максимальная автоматизация процессов (уж очень большие объемы), поэтому сам парсер представляет собой полуинтеллектуальный автомат. Конечно ошибки будут всегда - надо стараться уменьшать их количество. А на данном этапе наша задача не сделать идеальную базу, а заявить о том, что мы можем ее сделать. Что мы реально можем сделать конкурентный продукт в рамках всего мира, а не только отдельно взятой страны.
                        +1
                        Кстати есть и открытые дополнительные источники :-)
                        Сделать продукт и заявить что можем сделать это здорово само по себе, но блин сделать геотаргетинг в рамках всего мира на основе whois это ни разу не открытие америки - таких продуктов много, хотя все они и далеки до совершенства ( как раз потому что на 95% процентов основаны на whois ). Многие крупные порталы ( те самые которым и нужен этот геотаргетинг ) обладают возможностью доступа к дополнительным источникам данных которые значительно улучшают геотаргетинг. Основная мысль - что даже хорошо обработанный whois с подключением разных доп источников данных не дает достаточно хорошего качества определения региона ( не говоря уже об городе ). Ценность же самого по себе хорошо обработанного whois имхо совсем невысокая, поэтому насчет конкурентного продукта в этом плане есть немало подводных камней.))))
                          0
                          Открытые мы стараемся использовать. За критику спасибо! Но позволю себе не согласится - "хорошо обработанный whois" даст процентов 95 верных ответов. Для большинства проектов этого достаточно вполне.

                          Насчет аналогичных продуктов много - не более десятка и то если поискать. А так есть три явных лидера.
                            0
                            Удачи конечно в проекте - дело то полезное, но вот в одном проекте были люди которые занимались правильной обработкой whois, там еще и данные от оочень крупного провайдера были - по их оценкам ( и я с ними согласен ) точность определения региона была не более 80%, причем ресурс был популярный только в рунете и в основном как раз среди пользователей того самого провайдера. Мы пробовали ставить вместо своего таргетинга платные продукты - получалось сильно хуже, да и не может быть иначе - блин как узнать что человек зашел dialup-ом в таджикистане через mtu например, и что, он из москвы? у провайдера есть пул адресов он их по всей рф ( а то и за пределами ) распределяет как хочет и никому об этом не говорит ( сорм решает конечно ). и таких пользователей которые приходят от крупных провайдеров - вагон и маленькая тележка, с заграницей там отдельная песня.
                              0
                              спасибо, удача нам потребуется.

                              проблема больших провайдеров есть (ниже в комментах она поднимается). единственно что повторюсь - ситуация с этим улучшается, провайдеры начинают наводить порядок в своих сетях.
                            0
                            и еще момент. мы уверены что конкуренты используют только whois, feedback, и немного ручной работы. нам не надо быть сильно точнее конкурентов - у нас есть другие преимущества.
                              0
                              то что конкуренты используют whois и немного ручной работы это факт. небольшой hint - полезно пройтись по данным icq - в профилях ipрегион очень даже встречается :-)
                        0
                        Выкачиваем и правильно складываем базы whois - для этого пишем многопоточную качалку-парсер, которая выбирает всю значимую информацию в диапазонах 0.0.0.0-255.255.255.255.
                        Сложности - правильно вычислять значимые диапазоны подсетей и договориться с сервисами whois чтобы не забанили и разрешили делать соответствующую нагрузку.

                        есть способ немного проще - без необходимости договариваться
                        http://www.ripe.net/db/support/mirroring…:
                        The single data file is a merged data set of all the individual data files in a single text file.
                        There are two versions of this single file. One contains the personal and private dummy
                        objects. This can be accessed here:
                        ftp.ripe.net/ripe/dbase/ripe.db.dummy.gz
                        The second version does not include the dummy data objects. It can be accessed here:
                        ftp.ripe.net/ripe/dbase/ripe.db.gz
                          0
                          злобный хабр не любит одинарные кавычки в ссылках :\
                          1. ftp.ripe.net/ripe/dbase/ripe.db.dummy.gz
                          2. ftp.ripe.net/ripe/dbase/ripe.db.gz
                            0
                            напомню что использование этой базы для таргетинга рекламы прямо запрещено:
                            http://ripe.net/db/copyright.html
                            "Except for agreed Internet operational purposes, no part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, recording, or otherwise, without prior permission of the RIPE NCC on behalf of the copyright holders. Any use of this material to target advertising or similar activities is explicitly forbidden and may be prosecuted."
                              0
                              Кстати да. Мы придаем (и всем советуем) большое значение лицензионной чистоте продукта. Это сейчас приобретает и в РФ все больший смысл (ну будет приобретать еще лет 5), не говоря уже о наших западных амбициях - все должно чисто.
                                0
                                Уважаемый, а в чем это, простите, выражается ?
                                В статье вы прямо признаетесь что база целиком взята из указанного источника посредством сервиса whois.
                                  0
                                  База то взята целиком, но в ней есть не все. Проведя консультации с Райпом, мы выяснили, что это касается данных о персонах (там есть телефоны и электронная почта). Чтобы персонам не досаждали спамеры разного рода.
                                    0
                                    я правильно понимаю что в ходе двухсторонних консультаций они вам явно разрешили хранить копию базы и делать target advertising по географическому признаку ?
                                      0
                                      не совсем понимаю ваш интерес. надеюсь, что это здоровое любопытство :-)
                                      они нам разрешили нам определенных условиях (их я не скажу) выкачивать хуис, и делать аналог максмайндовской базы (при условии, что урезанную версию, по странам например, мы будем распространять бесплатно). target advertising - это не то что вы думаете. это вообще не имеет отношение к геотаргетингу. target advertising это именно целевая рассылка по спискам персон. надеюсь разъяснил?
                                        0
                                        Да спасибо вопрос снят хотя трактовка термина мне все еще кажется неочевидной. Любопытство здоровое - интересно на каких условиях разрешают использовать эту базу.
                            0
                            К сожалению, по этим файлам не построить нормально базу, например, там нет данных о персонах. Мы через это прошли, хотя может когда-нить и вернемся. Но сейчас нам проще все выкачивать.
                              0
                              данных о персонах?
                              вроде этого:
                              person: Lord Nagios
                              address: NowhereLand
                              phone: +31111111111
                              nic-hdl: RIPE124-RIPE
                              e-mail: bit-bucket@ripe.net
                              mnt-by: NAGIOS-MNT
                              remarks: Thu Mar 6 13:22:38 2008
                              changed: bit-bucket@ripe.net 20070124
                              source: RIPE
                              ?
                                0
                                точно. раньше они выдавали файл с персонами. сейчас нет.
                            +3
                            Ваш подход не учитывает следующую серьезную проблему - часто в whois базе фигурирует юридический адрес провайдера, при этом физически сеть находится в другом регионе. Возможно, для ex-СССР это нехарактерно. Но, например, многие французские сети Вы ошибочно приписываете к Парижу только из-за того, что во whois базе для них указан юридический адрес провайдера в Париже, хотя сами сети расположены по всей стране.
                            Думаю, что эту проблему Вы будете иметь со всеми странами, где существуют провайдеры национального или регионального масштаба, обслуживающие большие площади и регистрирующие все свои подсети на свой один общий юридический адрес. То есть, видимо, проблемы будут со многими крупными сетями в USA и в Европе, хотя и не со всеми.
                              0
                              Да. Эта проблема действительно есть. Однако есть тенденция к уточнению данных. Постепенно большие сети в хуисе разбиваются на более мелкие. И я думаю, что в перспективе, в том числе и при внедрении IPv6, точность будет только улучшаться.
                                0
                                Все равно точности никогда не добьешься. Плюс следует учитывать тот факт, что в порой в whois вообще полный бред встречается. Тут уж никакой IPv6 не поможет.
                                  0
                                  Может быть, но сейчас Ваша база для Франции неработоспособная, при этом другие сервисы (например MaxMind, GeoIPTool) дают правильную информацию. То же мне говорят друзья и о сетях в USA (попросил попробовать Ваше demo на сайте).
                                    0
                                    Спасибо за инфу. Не спорю. Продукт несовершенен, он развивается. Зато технология отработана и для улучшения качества нужны мероприятия (читай деньги) по улучшению. Потому здесь и пишу. Надо просто сажать кучу людей и улучшать словари.
                                    Кстати, все не так уж плохо (наши клиенты не жалуются), не могли бы Вы прислать IP, которые не определяются сюда http://www.cn-software.com/ru/contacts/ Для нас фидбэк очень важен, мы ж не можем сами проверять все. Рынок западный для нас также очень важен, но пока мы туда не сильно пытаемся влезть (качество еще не то).
                                      0
                                      Для статистики проверьте выборочно сети крупных провайдеров типа Free, Wanadoo (во Франции), Verizon, Earthlink (в Америке) через Вашу базу и через сервисы типа MaxMind & etc.
                                  +1
                                  Всё верно. У самого есть проблема с корбиной. Все её адреса определяются как Москва, хотя сеть во многих городах России.
                                • UFO just landed and posted this here
                                    0
                                    Ну что вы такое говорите :). Наша задача номер один отработать свою лицензионно чистую технологию. За ссылку кстати спасибо!!!
                                      +1
                                      modaz, жаль что на хабре нет кнопки "расцеловать".
                                      как раз надо было на днях думать как максмайнд локализировать - а тут такой подарочек.
                                      огромное пасибо
                                      0
                                      Клевая штука.
                                      Идея по продвижению - вы можете сделать API или просто какой то javascript, который полчает IP и отображает инфу. При нажатиее можно получить более подробную информацию но уже на вашем сайте. Что, то схожее с плагином FlagFox.
                                        0
                                        Спасибо. Такая вещь в планах есть. Сейчас ждем красивой идеи по воплощению. Пока придумываются только какие-то "счетчики географии", микрокарты и т.д. Но чо-нить придумаем, с креативом у нас порядок, только времени внедрять мало :)
                                          0
                                          Со временем у всех проблемы ) идей много, а времени всего 24 часа в сутках. Могу пожелать только реализации именно нужных и удачных идей.
                                            0
                                            и денег еще пожелайте! или грамотного инвестора
                                            :)
                                        0
                                        Определил неправильно местоположение
                                        IP: 144.206.175.238
                                        Россия, Курская область, Курчатов
                                        хотя сижу из Курчатовского института, Москва :)
                                          0
                                          Ндааа. Даже не знаю что сказать, сплошные Курчатовы :-)
                                          descr: Main network of Kurchatov Institute
                                          descr: Russian Research Centre "Kurchatov Institute"
                                          descr: ( Kurchatov Institute of Atomic Energy )
                                          descr: 1, Kurchatov Sq.

                                          Вот в развесовке и прошел сбой. Спасибо за пример. Подумаем как решить.
                                          0
                                          А что, GeoIP чем-то проклят?
                                            0
                                            не чем-то, а кем-то — нижегородцами и новгородцами
                                            http://bappoy.pp.ru/2007/10/26/geolocati…

                                            имел удовольствие поразбираться в их базе, это какой-то нереальный сюр, альтернативный земной шарик. Большинство русских названий переврано и находятся не там, где положено; часть IP-адресов вообще находятся в городах типа Olga, Smirnov, Nogina и т.д. — на основании данных whois. Поэтому из их продуктов можно без опасения только GeoLiteCountry использовать.
                                            0
                                            Спасибо, вещь хорошая, быстрая, очень пригодится.
                                            Для определения страны - особенно.
                                              0
                                              Ваш родной город пишется в Вашей системе как:
                                              Novgorod Oblast
                                              Velikyy Novgorod

                                              Это какой-то страный, вымышленный язык.
                                                0
                                                Да у нас вообще странный город. Написания стандартного нет. Предлагаю смотреть на русском. Проблему решим, спасибо!
                                                0
                                                Архангельск неправильно на карте кажет.
                                                  0
                                                  спасибо поправим.
                                                • UFO just landed and posted this here
                                                    0
                                                    Помню сайт у меня был, который читала знакомая из Мск и другая знакомая из Нск - и одна не должна была видеть одни посты, другая другие :) Конечно не очень надежно, но на GeoIP сделал разделение по городам :)
                                                      0
                                                      Обнуражил, что сайт той компании, что CnStats сделал - честь и хвала :)
                                                        0
                                                        Из списка нижегородских адресов (которые maxmind стабильно определяет как новгородские и помещает в Приморский край) со страницы местного провайдера http://sandy.ru/support/?d=96 неправильно определились IP-адреса:
                                                        194.190.176.0: Москва вместо Нижнего Новгорода
                                                        89.109.0.0: Первомайск Нижегородской обл., логичнее всё же НН, тем более что других районов области, кроме Первомайска, в блоке 89.109.0.0/18 не встречается
                                                        217.25.80.0: Москва вместо Нижнего Новгорода
                                                        85.91.192.0: Москва вместо Нижнего Новгорода

                                                        А в целом очень приятное впечатление от Вашей базы, большое спасибо за проделанную работу.

                                                        Что касается монетизации, то можно попробовать пойти по пути того же MaxMind'а: раздавать БД для некоммерческого использования, за коммерческое — собирать отчисления.
                                                          0
                                                          А Вы на саппорт им напишите об этом, не стесьняйтесь, дайте корректные адреса, они исправят. Я сам из Великого, на прошлой неделе написал им об этом косяке — сейчас моя подсеть определяеся корректно — можете проверить: 88.151.187.0.

                                                          Они, конечно, накосячили по-новой с кодом региона, ну да не суть, вчера я им отправил все наши диапазоны, которые смог найти — обещали исправить.
                                                            0
                                                            я про MaxMind, конечно
                                                              0
                                                              А Вы им платите за базу? я пару раз пробовал им написать, так до сих пор никакой реакции
                                                                0
                                                                Нет не плачу, я как раз выбирал решение для себя, ну и на ошибку наткнулся. Обычное письмо на саппорт. Они сами же заинтересованы в корректной базе. Пусть я не плачу. зато гуглы платят да много кто ещё.
                                                          0
                                                          А шо, GeoIP уже отменили?
                                                            0
                                                            Упс.
                                                            0
                                                            Спасибо за фидбэки!!! Не ожидал.

                                                            Хоть это и не помогло с поиском инвесторов, но было чертовски полезно для нас.

                                                            В будущем дистрибутив будет включать:

                                                            1. Бинарная база как есть щас.
                                                            2. Плэйн база (csv) всех используемых записей о городах (регион,
                                                            национальные написания, координаты, страна).
                                                            3. Реверсная база - на входе город, в результате все диапазоны.

                                                            О результатах буду информировать пока хватит кармы "и что у них есть еще там" :)
                                                              +1
                                                              Влад, а почему Вы не сделаете Remote API на сайте? Так наверное многим проще бы было пользоваться базой?
                                                              К примеру, выдачу сделать в XML и JSON, а деньги брать по примеру Yandex XML. N запросов в сутки бесплатно, N+ запросов _ за денежку.
                                                                0
                                                                Это правильная мысль. Мы обязательно так будем делать.
                                                              0
                                                              IP 92.113.143.2
                                                              Определило как Киев, сижу в Харькове.
                                                              Возможно все та же проблемма "крупных сетей" (укртелеком).
                                                                0
                                                                подскажите плз, формат файла cngeoip.dat совместим с geoip.dat (maxmind.com)?
                                                                хотелось бы использовать в апачевском модуле (maxmind) эту базу.

                                                                офф.
                                                                если не совместим - не подскажете, есть ли более полный api для формата от maxmind? имеется ввиду возможность дополнять файл geoip.dat файл.
                                                                  0
                                                                  > имеется ввиду возможность дополнять файл geoip.dat файл
                                                                  это нереально - дат файл это дерево, которое надо перестраивать полностью после практически любого изменения.

                                                                  Как вариант сотрудничать с нами или кем-то более активно на предмет оперативного внесения изменений.
                                                                  0
                                                                  При платной подписке на эту БД, как обновления происходят?
                                                                  Как на данный момент проект развивается?
                                                                    0
                                                                    примерно раз в месяц в мемберке появляется новая версия, откуда ее надо скачивать.
                                                                    проект развивается нормально, но не так бурно как хотелось бы.

                                                                  Only users with full accounts can post comments. Log in, please.