Содержание

Как узнать, на каком хостинге находится сайт

Как узнать, на каком хостинге находится сайт?

В этой статье мы рассмотрим 4 способа узнать хостинг сайта, зная только домен (адрес) сайта.

Для чего может понадобиться информация о хостинге, на котором расположен сайт? Самые частые причины:

  • У Вас возникли претензии к владельцу сайта (размещены ложные отзывы, расположен Ваш текст или фото без Вашего разрешения), на сайте либо нет контактных данных, либо они неверны.
  • Сайт работает быстро и без перебоев, Вам хочется узнать где он хостится, чтобы свои проекты перенести на этот хостинг.
  • Сайтом занимался сторонний человек, сайт пока работает, но кто хостер, где продлевать домен – неизвестно.

Последняя причина кажется надуманной, но мы регулярно сталкиваемся с подобными ситуациями. Сайт делал один сотрудник, уволился, данные о том, где расположен веб-ресурс потеряли. С учетом того, что многие оплачивают домен и хостинг на 2-3 года, найти концы в таких случаях сложно.

Узнаем, где размещен сайт по домену — NS сервера.

В открывшемся окне вводим домен сайта, нажимаем «Search».

хуиз

На странице проверки ищем раздел «Whois Record» строки «nserver:».

хуиз нс

Основной домен в строке NS и будет хостингом, на котором расположен сайт. В примере выше – ipipe.ru, наш хостинг. Этот способ – самый быстрый и простой, подходит для большинства сайтов, размещенных на виртуальном хостинге.

Виртуальный хостинг сайтов для популярных CMS:

Узнаем хостинг провайдера по IP адресу сайта.

Если первый способ не сработал (например, сайт расположен на выделенном сервере), можно попробовать определить хостера по IP адресу сайта.

Чтобы узнать IP адрес, нужно в командной строке ввести команду «ping site.ru» (замените домен на интересующий Вас):

пингуем сайт

Комбинация из четырех цифр в строке «Ответ от» и будет интересующий нас IP. Вводим его после ссылки http://whois.domaintools.com/

хуиз айпи

На странице будут указаны контакты хостера для связи:

хуиз айпи 2

VPS SSD хостинг — выбор профессионалов. Только сертифицированное серверное оборудование!

Как узнать где расположен хостинг сайта с помощью сервиса cy-pr.com.

Переходим на сайт, в окно проверки вводим интересующий нас домен сайта. После ожидания в 5-10 секунд для большинства сайтов Вы получите подробную информацию об интересующем Вас ресурсе – дату регистрации домена, страну расположения сервера, IP адрес сайта и т.д.

сервис определения хостера

Дополнение WIPmania для Firefox.

Если Вам регулярно нужно находить местоположение сервера для сайта, каждый раз делать это с помощью сервиса или командной строки не очень удобно. В таком случае имеет смысл установить расширение для браузера, которое в один клик будет показывать данные сайта.

дополнение для firefox

www.ipipe.ru

7 способов определить хостера сайта / Habr

Периодически перед многими из вебмастеров возникает задача определить хостера, у которого живет тот или иной сайт. Мотивация для этого бывает самая разная, как простое любопытство, так и желание поселиться по соседству на хорошем и стабильном хостинге или наоборот не вляпаться в такое соседство. В этом посте я приведу несколько известных мне методов с их достоинствами и недостатками. Вполне возможно, что он неполон, поэтому дополнения всячески приветствуются.
Так же «на берегу» оговорюсь: все упомянутые ниже сайты и хостеры упомянуты исключительно как наглядные примеры, и ни в коем случае не в качестве рекламы или, упаси господи, антирекламы. Выбор оных был сделан так же практически случайно — где какие методы у меня в свое время срабатывали, то и привожу.

Способы я перечисляю в порядке убывания точности и, к сожалению, в порядке возрастания вероятности срабатывания.

1. NS-сервера


Даже странно, что забыл упомянуть с самого начала. Спасибо variable За напоминание. Очень часто люди пользуются NS-серверами хостера и при помощи whois’a мы моментально узнаем хостера.
Плюсы
  • Очень часто срабатывает на шаред-хостингах
Минусы
  • Зачастую пользователи VPS и дедиков, а так же продвинутые пользватели на шаред-хостингах пользуются своими DNS-серверами, либо используют свои поддомены.

2. Ошибка 403/404


Не могу сказать, что большинство, но немало серьезных хостеров страницы ошибок веб-сервера по умолчанию делают с информацией о себе, а многие их клиенты забывают/ленятся их переопределить. Поэтому в первую очередь стоит попытаться вызвать такую ошибку и посмотреть, что получится. Бывает так, что CMS на сайте при помощи mod_rewrite перехватывает запросы к несуществующим файлам и отдает в ответ свою 404-ю ошибку. Это можно попробовать обойти, вызвав ошибку 403 путем обращения к какталогу без индексного файла. Им может быть папка с картинками/шаблонами, папка для загруженных файлов, кэша движка, системная папка типа includes и т. п. Небольшой хинт — иногда на странице ошибки есть email вебмастера и часто из него можно узнать домен сайта хостера.
Пример

Сайт: sloger.net
Cтраница с 404 ошибкой.
Результат: Хостер Hostgator
Плюсы
  • Высокая точность определения. Как правило, большинство реселлеров имеют возможность установить для своих клиентов по умолчанию собственную страницу ошибки и в этом случае мы сможем узнать даже реселлера.
Минусы
  • Очень часто мелкие хостеры забывают/ленятся устанавливать собственные страницы ошибок
  • Еще чаще CMS сайта перехватывает запросы к несуществующим файлам и прячет стандартную страницу хостера

3. Виртуалхост по умолчанию.


Здесь ситуация во многом аналогична предыдущей — крупные хостеры как правило на виртуалхост по умолчанию ставят свои заглушки, мелкие часто этим пренебрегают и виртуалхостом по умолчанию как правило становится либо первый сайт первого их клиента, либо стандартная заглушка от панели управления (особенно часто это наблюдается в случае с cpanel). Кстати, при первом раскладе есть приятный частный случай, состоящий в том, что иногда первым сайтом первого клиента становится сайт самого хостера и поэтому прием все же дает желаемый результат.
Самый надежный способ попасть на виртуалхост по умолчанию — это обратиться к веб-серверу по IP.
Пример

Сайт: www.tapebackup.ru
IP: 90.156.153.106
Результат: пожалуйста, свяжитесь со службой технической поддержки: (495) 772–97–20, support@masterhost.ru. Из этого делаем вывод, что хостер — Мастерхост.
Плюсы
  • Достаточно высокая точность определения хостера. Всегда можно определить хостера-владельца сервера, а если реселлер работает на выделенном IP, то ингода и реселлера.
  • Срабатывает практически на всех крупных хостерах.
Минусы
  • Для небольших хостеров как правило не работает.
  • Особенно часто не срабатывает на серверах с cPanel — выдается стандартная заглушка панели

4. Reverse DNS Lookup


Не вдаваясь в подробности скажу, что для любого IP адреса можно с помощью PTR записи в DNS-зоне можно задать «домен по умолчанию“ (не совсем точный термин, но не в этом суть). При этом подавляющее большинство хостеров присваивают своим серверам домены по умолчанию, содержащие в себе имя домена хостера, т. е. что-то вроде server-name.hoster-name.com.
Самый простой вариант узнать это доменное имя по умолчанию — при помощи всем родного ping’a (альтернативно — команды host, dig и nslookup под Linux’ом, аналоги под виндой должны быть, но я про них ничего не знаю).
Пример

Сайт: cisnet.ru
Ping:
PING cisnet.ru (78.108.81.180) 56 (84) bytes of data.
64 bytes from timur.majordomo.ru (78.108.81.180): icmp_seq=1 ttl=55 time=102 ms

Результат: Хостер — majordomo.ru
Плюсы
  • Срабатывает в подавляющем большинстве случаев. Если полученный домен не указывает как-то на сайт хостера, то скорее всего это частный выделенный сервер или VPS.
  • Очень легко применяется. Даже если под руками нет ping’a (вдруг с телефона/КПК), то есть масса бесплатных сервисов для проделывания Reverse DNS Lookup запросов.
Минусы
  • Иногда для инфраструктуры используются отдельные домены, которые не имеют очевидной связи с хостером.

5. Traceroute


Этот способ тесно связан с предыдущим, поскольку тоже подразумевает использование Reverse DNS Lookup, только на этот раз мы будем смотреть домены и для узлов на пути к интересующему нас узлу. Смысл в этом прост — по доменам последних узлов в трейсе мы с большой вероятностью угадаем хостера или датацентр, в котором размещен интересующий нас сайт. Очевидно, что этот способ поможет нам в случае если испытуемый сидит на VPS или выделенном сервере.
Пример

Сайт: phpbbguru.net
Traceroute:
traceroute to phpbbguru.net (88.198.45.197), 30 hops max, 60 byte packets
/* Пропущен неинтересный нам кусок */
6 87.226.228.149 (87.226.228.149) 126.004 ms 103.010 ms 103.147 ms
7 xe-2–2–0.frkt-ar2.intl.ip.rostelecom.ru (87.226.133.150) 115.394 ms 115.575 ms xe-1–0–0.frkt-ar2.intl.ip.rostelecom.ru (87.226.133.110) 137.887 ms
8 decix-gw.hetzner.de (80.81.192.164) 120.920 ms 137.137 ms 137.343 ms
9 hos-bb1.juniper1.rz6.hetzner.de (213.239.240.238) 115.458 ms hos-bb1.juniper2.rz6.hetzner.de (213.239.240.239) 118.008 ms 118.280 ms
10 hos-tr4.ex3k41.rz6.hetzner.de (213.239.252.180) 118.562 ms hos-tr2.ex3k41.rz6.hetzner.de (213.239.229.180) 137.399 ms hos-tr3.ex3k41.rz6.hetzner.de (213.239.252.52) 115.269 ms
11 static.88–198–45–197.clients.your-server.de (88.198.45.197) 136.016 ms 137.170 ms 132.209 ms
Плюсы
  • Практически 100% вероятность на успех в определении датацентра и немного меньшая — непосредственно хостера
  • Легко проделывается под любой ОС или с помощью веб-сервиса.
Минусы
  • Поскольку DNS-запросов приходится выполнять довольно много, то этот способ становится самым долгим в списке.

6. Whois


Вот и добрались до Whois’a, великого и ужасного. В базе данных Whois хранятся не только данные о доменах, но и данные о владельцах диапазонов и отдельных IP-адресов. Соответственно, на основе информации мы можем попытаться установить компанию-владельца хостинга или датацентра.
Пример

Сайт: searchengines.ru
IP: 83.222.4.124
Вывод whois:
whois 83.222.4.124% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See www.ripe.net/db/support/db-terms-conditions.pdf

% Note: This output has been filtered.
% To receive output for a database update, use the «-B» flag.

% Information related to ‘83.222.4.0 — 83.222.5.255’

inetnum: 83.222.4.0 — 83.222.5.255
netname: MASTERHOST-COLOCATION
descr: Masterhost is a hosting and technical support organization.
country: RU
admin-c: MHST-RIPE
tech-c: MHST-RIPE
status: ASSIGNED PA
mnt-by: MASTERHOST-MNT
source: RIPE # Filtered

role: MASTERHOST NOC
address: .masterhost
address: Lyalin lane 3, bld 3
address: 105062 Moscow
address: Russia
phone: +7 495 7729720
fax-no: +7 495 7729723
remarks: — remarks: MASTERHOST is available 24×7
remarks: — remarks: Points of contact for MASTERHOST Network Operations
remarks: — remarks: Routing and peering issues: [email protected]
remarks: SPAM and Network security issues: [email protected]
remarks: Mail and News issues: [email protected]
remarks: Customer support: [email protected]
remarks: General information: [email protected]
remarks: — admin-c: AAS-RIPE
tech-c: AAS-RIPE
tech-c: UNK-RIPE
nic-hdl: MHST-RIPE
abuse-mailbox: [email protected]
mnt-by: MASTERHOST-MNT
source: RIPE # Filtered

% Information related to ‘83.222.0.0/19AS25532’

route: 83.222.0.0/19
descr: .masterhost
origin: AS25532
mnt-by: MASTERHOST-MNT
source: RIPE # Filtered


Вывод: сайт живет на собственном сервере, размещенном у Мастерхоста.
Плюсы
  • Работает безотказно. При любом раскладе можно определить хотя бы примерно, в каком ДЦ расположен сайт и в ДЦ ли вообще (бывает, сайты на домашнем компе крутятся;-))
Минусы
  • Низкая точность определения. Случаев, когда вы сможете определить точнее, чем ДЦ — по пальцам перечесть.
  • Часто whois выдает очень много подробностей и навскидку не так-то просто вычленить нужную из всего массива.

7. Сигнатура SMTP сервера


Вариант, предложенный хабраюзером Crashus.
небольшой хак — телнет на 25 порт, в большинстве случаев на нём висит почтовый сервис который сразу выдаст хостнейм сервера.

На примере ваших сайтов:

# telnet sloger.net 25
Trying 70.87.244.247…
Connected to sloger.net.
Escape character is ‘^]’.
220-gator217.hostgator.com ESMTP Exim 4.69 #1 Sat, 17 Apr 2010 13:19:55 -0500

# telnet cisnet.ru 25
Trying 78.108.81.180…
Connected to cisnet.ru.
Escape character is ‘^]’.
220 timur.majordomo.ru ESMTP Exim 4.69 Sat, 17 Apr 2010 22:20:47 +0400

# telnet phpbbguru.net 25
Trying 88.198.45.197…
Connected to phpbbguru.net.
Escape character is ‘^]’.
220 sds.fastvps.ru ESMTP Exim 4.69 Sat, 17 Apr 2010 22:23:25 +0400


Дополнение от alexkbs:
Вместо telnet можно использовать netcat:
$ netcat cisnet.ru 25
220 timur.majordomo.ru ESMTP Exim 4.69 Sun, 18 Apr 2010 12:21:21 +0400
^C

Дополнительные сервисы, предложенные хабраобщественностью


Мораль


Практически в любом случае свое любопытство мы сумеем удовлетворить, вопрос лишь в том, насколько точно. А мораль для хостеров — не ленитесь обеспечить себе дополнительный канал притока клиентов, но в то же время не перегните палку, чтобы не распугать клиентов нынешних.

UDP. Перенес в Хостинг.
UPD2. Добавил еще два сервиса, предложенных в комментах.
UPD3, 30 мая. Неожиданно обнаружил этот топик в черновиках. Вернул на место.

PS. Если вы знаете еще способы — пишите, а я добавлю в список.

habr.com

Что такое сайт? | 2IP.ua

Сайт (от англ. website: web — «паутина, сеть» и site — «место», буквально «место, сегмент, часть в сети») — совокупность электронных документов (файлов) частного лица или организации в компьютерной сети, объединённых под одним адресом (доменным именем или IP-адресом).

Все сайты в совокупности составляют Всемирную паутину, где коммуникация (паутина) объединяет сегменты информации мирового сообщества в единое целое — базу данных и коммуникации планетарного масштаба. Для прямого доступа клиентов к сайтам на серверах был специально разработан протокол HTTP.

Страницы сайтов — это набор текстовых файлов, размеченных на языке HTML. Эти файлы, будучи загруженными посетителем на его компьютер, понимаются и обрабатываются браузером и выводятся на средство отображения пользователя (монитор, экран КПК, принтер или синтезатор речи). Язык HTML позволяет форматировать текст, различать в нём функциональные элементы, создавать гипертекстовые ссылки (гиперссылки) и вставлять в отображаемую страницу изображения, звукозаписи и другие мультимедийные элементы. Отображение страницы можно изменить добавлением в неё таблицы стилей на языке CSS, что позволяет централизовать в определенном файле все элементы форматирования (размер и цвет заглавных букв 2-го уровня, размер и вид блока вставки и другое) или сценариев на языке JavaScript, с помощью которого имеется возможность просматривать страницы с событиями или действиями.

Страницы сайтов могут быть простым статичным набором файлов или создаваться специальной компьютерной программой на сервере. Она может быть либо сделана на заказ для отдельного сайта, либо быть готовым продуктом, рассчитанным на некоторый класс сайтов. Некоторые из них могут обеспечить владельцу сайта возможность гибкой настройки структурирования и вывода информации на веб-сайте. Такие управляющие программы называются системами управления содержимым (CMS).

Классификация сайтов:

По доступности сервисов:

  • Открытые — все сервисы полностью доступны для любых посетителей и пользователей.
  • Полуоткрытые — для доступа необходимо зарегистрироваться (обычно бесплатно).
  • Закрытые — полностью закрытые служебные сайты организаций (в том числе корпоративные сайты), личные сайты частных лиц. Такие сайты доступны для узкого круга пользователей. Доступ новым пользователям обычно даётся через т. н. инвайты (приглашения).

По физическому расположению:

  • Общедоступные сайты сети Интернет.
  • Локальные сайты — доступны только в пределах локальной сети. Это могут быть как корпоративные сайты организаций, так и сайты частных лиц в локальной сети провайдера.

По схеме представления информации, её объёму и категории решаемых задач можно выделить следующие типы веб-ресурсов:

  • Интернет-портал.
  • Информационные ресурсы.
  • Интернет-представительства владельцев бизнеса (торговля и услуги, не всегда связанные напрямую с Интернетом).
  • Веб-сервис — сайт, созданный для выполнения каких либо задач либо предоставленя услуг в рамках сети WWW.
  • Комбинированные веб-сервисы (Социальные сети) — например, Facebook, Twitter.
  • Комбинированные веб-сервисы (Специализированные социальные сети) — например, MySpace, Flickr.

2ip.ua

Географическое местоположение Доменного имени


Добро пожаловать Гость из , Russia

Ваш IP адрес: 185.58.204.55

Город:

Регион:

Страна: Russia

Код Страны: RU

Долгота: 37.6068

Широта: 55.7386

Курс обмена (RUB/USD):
62.8431


Прогноз погоды для



Географическое местоположение Доменного имени

Наш сео сервис поможет вам найти географическое положение любого реально-существующего IP адреса или домена (город, страна, регион) используя нашу базу данных IP адресов. Так как все IP адреса уникальны, а их владельцы и провайдеры зарегистрированы, становиться возможным найти географическое положение любого компьютера или сервера (а некоторые до сих пор думают, что интернет анонимен 🙂 по их IP адресу.

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

 
Пример: google.com или 81.177.24.29



Сообщить об Ошибке


Что такое IP адрес?

IP адрес (Адрес Интернет Протокола) это число для идентификации и сообщения между компьютерами используя Стандарт Интернет Протокола (Ай Пи). У каждого участника сети должен быть свой уникальный IP адрес. Ай Пи адрес идентифицирует каждый компьютер или сервер в сети. IP адрес может быть личным и публичным (изв. за каламбур 🙂 а также динамическим и статичным. Вы можете узнать у своего Интернет-провайдера статичный или динамический IP адрес у вашей машины.

Динамический Ай Пи адрес вероятнее всего будет отличаться при каждом подключении к интернет или при перезагрузке. IP адрес обычно состоит из четырех чисел от 0 до 255 разделенных точками. Например: 81.177.24.29. Доменное имя это уникальное имя, у которого может быть один или несколько IP адресов. Географические системы пытаются использовать карты IP адресов извлекаемые из огромных компютерных баз данных. Некоторые из них бесплатны, другие доступны только за большие денежки.

IP адрес и его географическое местоположение
Эта статья поможет вам понять, что такое IP адрес а так же как его можно географически определить.


Вы можете обсудить работу этого сервиса на нашем SEO Форуме в теме Географическое местоположение доменного имени.
Ваши замечания и предложения обязательно будут учтены.



www.sbup.com

Методы определения местоположения пользователя / Habr

Предисловие

Всем, кто когда-либо занимался написанием систем авторизации/регистрации пользователей, наверняка приходилось задаваться вопросом: «А как узнать о пользователе больше информации?». Для чего это нужно? В большинстве случаев, для идентификации именно этого пользователя. Иногда — для предоставления каких-либо дополнительных возможностей и информации, в зависимости от различных социальных параметров, или, быть может, местополжения пользователя или региона проживания. Иногда, например, для проведения какого-либо скоринга. В этой статье речь пойдёт об определении географического положения пользователя.
Эффективные методы определения

Можно придумать массу методов получения георгафического положения пользователя интернета. И все эти методы будут обладать своим набором плюсов и минусов, будут более или менее эффективны, в зависимости от применения. Сейчас я опишу только те методы, которыми на данный момент пользуется проект, в котором я учавствую, т.е. те, которые я непосредственно использую. За время существования проекта по ним уже собралось достаточно статистики, из которой можно сделать некоторые выводы.
1. Данные из соц. сетей

На сегодняшний день крайне популярным стало использовать для авторизации (или в качестве дополнительной информации) аккаунты всевозможных социальных сетей и блогов, что позволяет использовать данные из них. Авторизовав пользователя таким образом, можно получить достаточно много информации о нём. Правда вот о достоверности её говорить не приходится, ведь многие указывают в соц. сетях не «действительное», а «желаемое», либо вообще первое, что пришло в голову. Отсеять подобные вещи обычно и есть основная задача для разработчика. Для этого необходимо получить информацию обо всех друзьях пользователя и сверить общие данные. Можно, например, найти наиболее часто встречаемое место проживания у коллег/однокурсников/одноклассников/друзей пользователя (в синей соц. сети, например, это делать очень удобно), и, на основе этих данных, выяснить настоящий регион, область, город и даже район города, где живёт/работает/учится пользователь.
Также, в некоторых соц. сетях, доступно получение непосредственных координат пользователя, если он онлайн. Точность этих данных, в некоторых случаях, оставляет желать лучшего, но, как минимум, район города, где находится пользователь, определить можно достаточно достоверно.

Плюсы:

  • Относительно высокая точность, при использовании моделей скоринга на основе данных друзей
  • У большинства пользователей есть аккаунты в соц. сетях
  • Можно проверить полученные данные на достоверность, используя данные друзей

Минусы:

  • Сложность реализации, т.к. необходимо изучать API нескольких соц. сетей, составлять и реализовывать модели для анализа полученных данных
  • Необходимость в наличии действующего аккаунта в соц. сети у пользователя (я считаю, что, несмотря на распространённость, требовать подобные данные от пользователя, всё же, нельзя)
  • Низкая скорость работы, если учитывать анализ с использованием данных друзей

Реализацию, к сожалению, предоставить не могу ибо «секрет фирмы».

2. Данные GeoIP

Наверное, самый простой и доступный каждому способ, однако, для РФ на сегодня, зачастую неточный.
Почему?Дело в том, что на данный момент большинство существоваших ранее провайдеров регионального уровня было раскуплено и поглощено операторами федерального уровня. И чем же это плохо? А вот чем. Представьте себе ситуацию — в городе «Н» существовало 5 мелких провайдеров. Каждый работал в своём районе города, и соответственно, имел свой пул IPv4 адресов. И даже динамически выданный «белый» IP можно было примерно привязать к определённому району города. Теперь приходит провайдер федерального уровня и покупает все 5 мелких провайдеров с их пулами адресов. Затем он приводит их сеть к некоему общему виду всех сетей этого федерального провайдера. Что мы имеем в итоге? У этого федерального провайдера есть огромное количество клиентов и огромное количество пулов IP, используемых, в зависимости от потребностей, в том или ином регионе. Тоесть теперь адрес, принадлежавший ранее пулу мелкого местного провайдера, может быть выдан клиенту из совершенно другого города, просто потому, что этот пул адресов теперь используется для всех клиентов этого провайдера. А вот сообщать кому и из какой области выдан этот IP никто, естественно, не будет. Тем более, что завтра он может быть выдан ещё кому-то.

Также, никто не помешает пользователю использовать, например, прокси или VPN для выхода в интернет от имени другого IP. В этом случае GeoIP становится абсолютно бесполезным, ибо получит информацию именно об этом прокси или VPN-сервере. То же самое происходит, если провайдер предоставляет своим клиентам доступ в интернет через NAT (а в свете проблем с количством свободных IPv4 адресов это встречается всё чаще и чаще), правда в этом случае, обычно, хотябы можно получить район, область или город.

Такчто полагаться полностью на данные GeoIP всё-таки можно не всегда, хотя этот способ очень удобен — ведь мы получаем информацию практически мгновенно. Для этого, обычно, используется заранее скачанная локальная база данных.

Плюсы:

  • Легко использовать, есть множество реализаций на различных языках
  • Высокая точность (за некоторым исключением, см. выше)
  • Быстрота работы (практически мгновенное получение результата — ведь это всего 1 запрос к базе)

Минусы:

  • Необходимость поддерживать базу IP в актуальном состоянии
  • Отсутствие возможности проверить достоверность полученных данных (только запросами к нескольким базам)
  • Достаточно большой процент ошибочных данных для РФ на данный момент (см. выше)

Описывать «как это сделать» смыла особого не вижу, ибо в сети, и, в т.ч. на хабре, полно подробных описаний. Для получения данных GeoIP существует множество бесплатных библиотек и инструментов. Например, для PHP можно использовать расширение geoip.

3. Использование JavaScript Geolocation API

Достаточно полезный и эффективный метод, но только для мобильных устройств. В случае же со стационарным компьютером — полезен не более чем GeoIP. Дело в том, что в случае мобильного устройства (современный смартфон, планшет и т.д.) будут использоваться все доступные для этого устройства и разрешённые пользователем средства определения местоположения, включая позиционирование по GPS, Wi-Fi и данным от вышек сотовой связи. А вот в случае с домашним ПК, у которого, в большинстве случаев, нет ни мобильной сети (в случае наличия GSM/3G модема данные от него не используются), ни GPS, мы сможем узнать только данные GeoIP, которые нам радостно и сообщит JS. А по поводу их точности я уже писал выше. Хотя, пренебрегать данным способом я бы не стал — ведь всё большее количество людей используют планшеты и телефоны для выхода в интернет.

В итоге данный способ имеет достаточно узкий спектр применения — мобильные устройства. Или если достаточно примерных данных по GeoIP.

Плюсы:

  • Легко реализовать, множество документации и примеров в интернете
  • Точный, т.к. может использоваться как позиционирование по сотовым вышкам, Wi-Fi, GPS
  • Быстрый, т.к. для определения положения используется ПО со стороны клиента

Минусы:
  • На домашних ПК поддерживается не во всех браузерах
  • Требует разрешений пользователя
  • Фактически, применим только к мобильным устройствам
  • Относительно легко подделать данные

Примеры реализации можно посмотреть здесь или здесь.

4. Определение через услуги типа «локатор» от мобильных операторов

Я думаю, некоторые из читающих слышали про эти услуги, кто-то даже пользуется ими, а кому-то приходится их использовать в корпоративной среде. Я говорю об услугах, подобных «Локатор»’у от «яичной» компании и «Координатам» от жёлто-полосатой. Да, эти услуги изначально предназначены для конечных пользователей, но… Что мешает использовать их нам? Положительных моментов при использовании этого способа немного, зато каких — это высокая точность и почти 100% достоверность данных. Зато есть неприятные моменты. Во-первых — эти услуги платные. Во-вторых — необходимость использования номера мобильного телефона при регистрации и требование отправить бесплатную смс на короткий номер… Такое поведение может отпугнуть многих. Да и время получения информации по смс немалое (в рамках веб-приложения). Но, в некоторых случаях, информация подобного рода, да ещё и достоверная, просто необходима. Тем более что этот метод можно использовать как замену подтверждения кодом из смс какого-либо действия. Да и подделать информацию, получаемую таким способом, практически невозможно.

Пример рабочей реализации приводить не буду по тем же соображениям, что и в первом случае, но вкратце опишу как это делается чуть ниже.

Плюсы:

  • Высокая достоверность данных, почти 100%
  • Высокая точность, вне зависимости от испоьзуемого устройства и способа выхода в интернет
  • Автоматически подтверждает номер мобильного телефона

Минусы:
  • Сложность в реализации и поддержке
  • Низкая скорость, т.к. требуется время на отправку/приём смс и ответ от пользователя
  • Не бесплатен (тарифы у операторов на эту услугу весьма «прожорливые»)
  • Необходимо согласие пользователя
Как сделать

Нам понадобятся:
  1. Старый моб. телефон с кабелем, либо 3G/GSM модем, по одному на каждого оператора
  2. Сим карты этих операторов
  3. Некий ПК, желательно с *nix на борту (можно и Windows с cygwin), который будет выполнять функцию эдакого «гео-шлюза»
  4. Немного терпения и времени
  5. smstools3
1) В зависимости от ОС, инструкции могут отличаться, но общий смысл неизменен — необходимо скачать и установить из репозитория ПО пакет SMSTools

На Gentoo это выглядит так:



Если вам нужна статистика отправленных/полученных смс, то:
nogood-work ~ # echo "app-mobilephone/smstools stats" > /etc/portage/package.use/smstools.use

либо (если у вас все USE-флаги в одном файле):
nogood-work ~ # echo "app-mobilephone/smstools stats" >> /etc/portage/package.use

Затем ставим из портажа сам smstools:

nogood-work ~ # emerge -v smstools

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ~] app-mobilephone/smstools-3.1.15  USE="-stats" 0 kB

...

nogood-work ~ #


На FreeBSD так:


root@kenny:/usr/ports # cd /usr/ports/comms/smstools3
root@kenny:/usr/ports/comms/smstools3 # make install clean

Для статистики в опциях просто выбрать «STATS»


Можно собрать и из исходников, если для вашей системы нет готового пакета:


nogood-work ~ # wget http://smstools3.kekekasvi.com/packages/smstools3-3.1.15.tar.gz
nogood-work ~ # tar -zxvf smstools3-3.1.15.tar.gz -C /usr/local/src
nogood-work ~ # cd /usr/local/src/smstools3
nogood-work ~ # make
nogood-work ~ # make install


2) Подключаем модем(ы) и проверяем появились ли устройства последовательного порта в /dev

Для Gentoo:


nogood-work ~ # ls /dev |grep ttyUSB
ttyUSB0
ttyUSB1
ttyUSB2
nogood-work ~ #

Может появиться несколько портов. Обычно нас интересует ttyUSB0, если модем 1. Если больше — то подключаем по очереди. И вот перый из появившихся портов наш.


Для FreeBSD:


root@kenny:~ # ls /dev |grep cuau
cuau0
cuau0.init
cuau0.lock
cuau1
cuau1.init
cuau1.lock
root@kenny:~ #

Смысл тот же — первый из нескольких появившихся — наш.


3) Настраиваем SMSTools

smsd.conf может находится как в /etc/ так и в /usr/local/etc/ в зависимости от вашего дистрибутива. Приводим его к подобному виду:
#Список активных "модемов". Если вы планируете использовать
#несколько операторов, то, соответственно, перечисляем здесь
#модемы для каждого оператора, у меня только для одного
devices = GSM1
#Куда писать логи. Если закомментировать то по-умолчанию
#пишет в syslog. Но в этом случае не получится использовать
#такую классную вещь, как smart_logging.
logfile = /var/log/smsd/smsd.log
#Уровень ошибок.
loglevel = notice
#Хранить входящие в UTF-8. Работает не со всеми модемами, но лучше включить
incoming_utf8 = yes
#Записывать историю перекодировок в логах. На всякий случай включаем.
log_charconv = yes
#Наличие даты в имени файла. Вообще кому как удобно,
#но с этой опцией файлы легче находить по времени
date_filename = 1
#Приоритет получения смс перед отправкой
receive_before_send = yes
#Очень полезная, на мой взгляд, функция. Суть в том, что в лог
#по-умолчанию пишутся сообщения с уровнем, указанным выше.
#А вот в случае ошибки создаётся файлик с изменённым именем
#из logfile вида <name>_trouble.log в который пишется всё с уровнем debug
smart_logging = yes
#Ну и настройка каталогов спулера
failed = /var/spool/sms/failed
sent = /var/spool/sms/sent
phonecalls = /var/spool/sms/calls
stats = /var/spool/sms/stats

#А вот настройка для модема. Лучше искать под конкретную модель.
[GSM1]
#Имя COM-порта
device = /dev/ttyUSB0
#Использовать ли для приёма СМС
incoming = yes
#Способ проверки памяти СМС. Подробности лучше глянуть на оф. сайте.
check_memory_method = 2
#Обязательно закомментить, т.к. иначе не видать нам русского языка
#decode_unicode_text = yes
#Могут понадобится для вашего модема. Вот это лучше погуглить.
#init = AT+CSCS="UCS2"
#init2 = AT+CSCS="UCS2"
#Автоматически собирать смс из нескольких частей. Крайне рекомендую.
internal_combine = yes
#Сбрасывать входящие звонки. А зачем они нам?
hangup_incoming_call = yes
#Скрипт для обработки событий. Содержимое будет ниже.
eventhandler = /etc/smsd/trsms.sh
#Скрипт для обработки USSD команд. Я не использовал, но можно
#использовать для получения остатка на балансе.
#eventhandler_ussd =
#Номер. Если будете использовать несколько модемов указывать надо.
#По нему определяется через какой модем отправлять смс.
number = 79185568942
#Что делать со входящими звонками - определять номер. Необязательно.
phonecalls = clip
#Отчёт о доставке. Нам не нужен.
#report = yes
#Для моего модема нужно было включить, чтобы небыло ошибок в логе.
signal_quality_ber_ignore = yes
4) Создаём файлик trsms.sh (обработчик событий)
#!/bin/bash
status="$1"
file="$2"

case "$1" in
  RECEIVED)

    header=`head -12 $file | grep -e "^From: " -e "^Sent: " -e "^Received: "`
    from=`head -12 $file | grep -e "^From: " | awk '{print $2}'`

    if grep "Alphabet: UCS2" $file > /dev/null > /dev/null; then
        message=`tail -n +14 $file | iconv -f UCS-2BE -t UTF-8`
    else
        message=`tail -n +14 $file`
    fi
    #echo -e "$message" | mail -s "Incoming SMS from +$from" [email protected]
    echo -e "$header\n$message\n" >> /var/log/smsd/sms.log

    if echo $message | grep "Запрос на авторизацию отправлен абоненту" > /dev/null > /dev/null; then
        abon=`echo $message | awk 'BEGIN{ FS = "абоненту " } $2 { print substr($2, 2, 11) }'`
        echo -e "\n> Запрос\t$abon" >> /var/log/smsd/location.log
    fi

    if echo $message | grep " находится по адресу " > /dev/null > /dev/null; then
        abon=`echo $message | awk 'BEGIN{ FS = "Абонент " } $2 { print substr($2, 2, 11) }'`
        adres=`echo $message | awk 'BEGIN{ FS = "адресу " } $2 { print substr($2,0,index($2, " в радиусе")) }'`
        region=`echo $adres | awk 'BEGIN{ FS = ", " } $1 {print $1}'`
        echo -e "\n> Ответ\t$abon\t$adres\tРЕГИОН: $region" >> /var/log/smsd/location.log
    fi
    ;;
esac

Это пример с минимальным функционалом. Пишет в лог запросы и полученные ответы для «яичного» оператора. По-хорошему ещё надо добавить условие по номеру, с которого пришло сообщение, на основе переменной from. В нём же можно будет определять и оператора. Номера у разных операторов, как правило, разные.
Не забываем дать права на запуск пользователю, из под которого будет работать smsd.

5) Запускаем демон smsd и добавляем его в автозагрузку

Для Gentoo:


nogood-work ~ # /etc/init.d/smsd start
nogood-work ~ # rc-update add smsd default


Для FreeBSD:


root@kenny:~ # echo "smsd_enable=\"YES\"" >> rc.conf
root@kenny:~ # service smsd start


Смотрим логи. Если всё хорошо и нет сообщений об ошибках, то переходим к следующему шагу.

6) Пробуем отправить смс на свой телефон
nogood-work ~ # sendsms 79xxxxxxxxx 'текст'

Если смс прошло успешно — можно пробовать отправить смс на заветный номер услуги с соответствующим текстом, а затем проверить логи.
Далее можно будет просто вызывать из вашего скрипта команду sendsms <номер> "<текст>" и проверять, например, по крону наличие ответа по нужному номеру в файле с логами смс.

Заключение

Каждый из этих способов подходит для каких-то определённых целей и условий, и вам решать, что именно использовать. Конечно, здесь рассмотрены далеко не все способы определения местоположения. Я описал только те, что опробовал сам и считаю наиболее эффективными. Также, для достижения большей эффективности, я бы рекомендовал комбинировать их. Так это делается в нашем проекте. На этом всё. Надеюсь кому-нибудь данная информация окажется полезной.

habr.com