Как определить IP-адрес компьютера
От автора: Идею для этого урока я взял из комментариев пользователей ресурса //webformyself.com/. В частности, интересовал такой вопрос: «Как определить IP-адрес компьютера?». Попробуем разобраться, как это можно сделать, и заодно узнаем еще несколько вещей, которые, безусловно, могут пригодиться Вам в создании веб-приложений.
Время ролика: 19:50
Ссылка для скачивания исходников: Скачать одним архивом
Ссылка для скачивания всего архива (видео+исходники): Скачать одним архивом. Размер: 33.1 mb.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Итак сразу скажу, для того чтобы понять как определить IP-адрес, много кода писать не придется ибо все уже написано до нас. Нам же остается просто знать, как это использовать. Под «этим» в данном случае понимается суперглобальный массив $_SERVER, в который интерпретатор PHP помещает переменные, полученные от сервера. О том, что такое массив, я подробно рассказываю и показываю в уроке по созданию галереи. Вкратце можно сказать, что массив — это своеобразная большая переменная, в которой можно хранить обычные переменные. Переменных в глобальном массиве $_SERVER довольно много. Мы же сегодня поговорим лишь о некоторых из них. Эти переменные, кстати, еще называются также элементами массива. И первые два элемента, о которых мы поговорим — это элементы, благодаря которым можно получить имя сервера, на котором выполняется скрипт.
1. Имя сервера
Создадим страницу (у меня это index.php) и напишем в нее следующий код:
Здесь мы выводим на экран элемент массива $_SERVER по имени SERVER_NAME, в котором как раз и содержится информация о сервере. Если Вы тестируете скрипт на локальном сервере, то в качестве имени сервера получим — "localhost".
Аналогичный результат можно получить при обращении к элементу HTTP_HOST:
Где может пригодиться использование этих элементов массива $_SERVER?. Допустим, у нас есть сайт на домене //mydomen.ru. Соответственно, если на этом сайте используются абсолютные ссылки, то мы столкнемся с определенными трудностями при переносе сайта на новый домен, к примеру, //newdomen.ru. Нам придется менять все абсолютные ссылки. Вот здесь нам как раз и могут пригодиться эти элементы.
2. Откуда пришел пользователь
Часто нам необходимо узнать с какой именно страницы к нам попал пользователь. В этом нам может помочь элемент по имени HTTP_REFERER. В этом элементе как раз и содержится адрес страницы, с которой пользователь попал на страницу, на которой мы вызываем элемент HTTP_REFERER. Переход, соответственно, должен происходить по ссылке. Создадим еще одну страницу, например test.php, и в ней пропишем ссылку на страницу index.php. На странице index.php пропишем код:
Теперь попробуем перейти по ссылке. В своем случае я получу такой адрес страницы — //localhost/arr_server/test.php (обе страницы у меня в каталоге arr_server, а сам скрипт тестируется на локальном сервере).
3. Информация о клиенте
Если нам необходимо собирать статистическую информация, например, пользователи с какими браузерами посещают наш сайт, то мы можем использовать для этих целей элемент HTTP_USER_AGENT:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
В результате на экран в моем случае будет выведена строка — «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.15) Gecko/20110303 AskTbPTV2/3.9.1.14019 Firefox/3.6.15″. Из нее можно узнать, что я использую браузер Firefox версии 3.6.15. Также можно узнать, что версия моей операционной системы — Windows XP — об этом говорит эта часть строки — Windows NT 5.1.
Определение IP-адреса клиента
А теперь собственно то, для чего мы и затеяли данный урок — определение IP-адреса компьютера пользователя, заполнявшего нашу форму. Информация об этом адресе содержится в элементе REMOTE_ADDR:
Если Вы тестирует скрипт на локальном сервере, то получите такой IP-адрес — 127.0.0.1. Если тестируете в сети — получите IP-адрес, под которым зашли в сеть. Как же нам передать IP-адрес клиента, который заполнял форму? Сам он его, конечно же, вряд ли вводить будет, поэтому нам остается определить этот адрес при помощи элемента REMOTE_ADDR массива $_SERVER и скрытно от клиента отослать его. Сделать это можно несколькими способами. Мы будем использовать скрытое поле формы. Создадим простую форму на странице test.php:
Данные из этой формы будут передаваться методом POST, в качестве обработчика данных мы указали файл index.php (детально обо всем этом я рассказываю в мини-курсе по созданию полноценной формы обратной связи). На странице index.php давайте будем принимать эти данные и выводить их:
Здесь мы проверили, была ли нажата кнопка формы и, если она нажата, мы выводим то, что получили в качестве имени. А ниже мы прописали ссылку на ту страницу, откуда пришли, т.е., на страницу с формой. Об условиях, глобальном массиве $_POST и прочих вещах, которые мы только что использовали, я также детально рассказывал в мини-курсе по созданию формы обратной связи. Мы все делаем максимально упрощенно, без особых проверок, поскольку целью урока является простая передача IP-адреса клиента и не больше.
Итак, имя мы получаем. Теперь осталось передать скрытно от пользователя его IP-адрес. Для этого допишем на странице с формой еще одно поле, типом которого укажем hidden (т.е., скрытое), а в качестве его значения укажем элемент REMOTE_ADDR:
Если мы сейчас обновим страницу с формой, то ничего не изменится… но если мы посмотрим исходный код этой страницы, то увидим следующее:
Интерпретатор PHP в качестве значения скрытого поля прописал IP-адрес клиента, который и будет отправлен на страницу index.php, и этот адрес будет находиться в переменной ip глобального массива $_POST. Осталось дописать вывод в файле index.php:
Вот, в принципе, и все. Вот так вот просто при помощи элементов массива $_SERVER мы можем получить массу служебной информации, которую затем можем использовать в своих веб-приложениях. Мы рассмотрели только пять элементов массива $_SERVER, на самом деле их, как уже говорилось выше, гораздо больше и без них часто сложно организовать функционирование достаточно серьезного проекта.
На этом, урок по определению IP-адреса компьютера окончен. До новых встреч!
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Хотите узнать, что необходимо для создания сайта?
Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!
Похожие статьи:
Комментарии Вконтакте: Комментарии Facebook: Комментарии (81)Как определить ip-адрес — всё довольно просто. Вопрос в том по каким его потом базам пробивать, что бы узнать какому региону и какому провайдеру принадлежить этот ip…
Посмотрите whois. Как вариант.
Ну узнаем мы к какому региону и провайдеру принадлежит ай-пишник и что дальше? Побежим в мили.. сорри полицию строчить заявление? Никто и никогда нам никаких сведений о физ лице не даст, только на смех поднимут. Наиболее разумный и действенный вариант это блокировка по ip. Это, конечно, не панацея, но на какое-то время может помочь. Собственно хотелось бы увидеть скрипт, позволяющий блокировать некоторый диапазон ip адресов.
p.s. whois показывает частенько такой бред
Собственно, блокировать по IP не так сложно. В БД создаем поле, в котором будут перечислены IP, по которым будем блокировать или ограничивать доступ. Также такие данные можно хранить в текстовом файле. Затем, к примеру перед тем как добавить комментарий пользователя, мы просто сравним его IP со всеми имеющимися у нас «черными» IP и, если совпадений нет — пропустим комментарий, а если есть такое совпадение — будем обзывать пользователя нехорошими словами, типа спамер Возможно, в ближайшем будущем сделаю урок по блокировке/ограничению доступа по IP. Как вариант — это может быть опрос на сайте по правилу 1 IP — 1 голос.
Да это было бы оч полезно. У джумлы стандартный модуль голосования (и сторонние расширения для комментов) все эти функции содержит. Но хотелось бы и ручками научицца. Ждем новых уроков. Спсб.
Можно блокировку сделать в файле htaccess по маске.я так целую страну отсек от своего сайта.Хотя человек может через анонимайзер зайти,может Вы что подскажите как определить что используется анонимайзер или софт по смене ip?
Насколько мне известно, это невозможно. Определяется IP-адрес, а что это — машина пользователя или прокси, анонимайзер — тут сказать сложно. Да и толку с этого знания не много. Поскольку сейчас через прокси ходит большое количество пользователей, то обрубать доступ каждому второму — мало смысла.
А что вы сразу про полицию? Она же теперь хорошая! Не то что старая милиция! Если по существу, определить город/регион имеет смысл, например для того что бы показывать организации/фирмы только того города/региона откуда поступил запрос. Это актуально для каталогов.
Эрли, напишите в файле *.php следующее: print_r($_SERVER); Сохраните страничку и затем обновите )) И кое ,что из, многого, Вам станет ясно в этой жизни Успехов в учёбе .
Самы навеоное интересный вопрос: «Как узнать точный адрес компа по IP»
Geotargeting прикрутить можно. (правда ловить будет, лишь крупные населённые пункты.)
мне надо узнать с какого ip совершали записи в опред.аккаунт телеграм опред.числа
А как скрыть свой IP
Скрыть ip клиента или сервера? А то на фрилансе видел офигенный заказ «требуется скрипт, так что бы нельзя было вычислить на каком хостере у меня сайт и нельзя было бы узнать ip-адресс моего сайта» :D
Месторасположение IP-адреса можно посмотреть здесь: domw.net/service:network-geo
Я часто пользуюсь перепиской в КОНТАКТЕ. Однажды залез в настройки и надал на: «Посмотреть историю активности». С ужасом для себя обнаружил IP адрес частовстречающийся и два адреса совершенно другие. Пробил по этой ссылке:domw.net/service:network-geo, и мне выдало координаты моего города, а так же широту и долготу. При этом координаты моего IP адреса и двух других — были совершенно одинаковые. Я позвонил своему поставщику интернет услуг, в службу технической поддержки и объяснил свою тревогу. Он отлучился на 3 мин. я продолжал оставаться на связи. Затем сказал следующее:»Все 3 IP адреса принадлежат мне. Так как у меня IP адрес не статический, а динамический. А если я хочу, чтобы у меня был один и тот же IP адрес (статический), то это будет стоить на 5 гривен в месяц дороже (примерно 20-22 рос.руб.)» А как оформить это дело… Заходишь на свою страницу (поставщика интернет услуг) набираешь логин и пароль(входишь) и в статистике изменяешь настройки. В результате ваша оплата увеличится и ходить никуда не надо.
Как всегда очень интересный и нужный урок. Ребята, если, конечно можно, опубликуйте урок как скачивать файлы с сайта? Вверху этой странички есть ссылка, по которой мы скачиваем уроки, расскажите, как мы сам можем организовать такую же.
Супер. Раньше я пользовался сторонними сервисами размещая их скрипт у себя, тем саммым засоряя лишними ссылками свой сайт, да и бывало что он был не доступен.
Здравствуйте! Хочу Вас поблагодарить за проделанную работу. Мой вопрос может показаться глупым но я по сути еще чайник. У меня тариф безлимит и это предполагает динамический AP. То-есть он дается на 3-4 дня потом другой и так далее, полчается можно вычислить только регион?
В википедии можно детальнее почитать об IP-адресе. Если же говорить попроще, то можно вычислить не только регион. При желании и соответствующих возможностях можно найти и физический адрес. Динамический IP выдается Вам провайдером на весь период сеанса, т.е., от момента подключения к сети до выхода из нее. Если компьютер вновь будет включен и запущен повторный сеанс, то, скорее всего, будет уже другой IP-адрес. Это первое. Второе… когда регистрируется новый провайдер, то ему выдается диапазон IP-адресов, а он, соответственно, из этого диапазона раздает эти адреса своим клиентам. Так вот, зная IP-адрес можно установить провайдера. Провайдер в логах хранит всю информацию за определенный промежуток времени, т.е., такого примерно вида — такому-то клиенту, к примеру, вчера был выдан такой-то IP-адрес и этот клиент посещал такие-то сайты. Соответственно, располагая определенными возможностями, можно «попросить» провайдера сказать физический адрес своего клиента, который в такое-то время где-то лазил в сети. Вот примерно так я понял для себя этот вопрос, когда вскользь читал о сетях… я, конечно, не большой специалист в этом вопросе, так что, если где-то ошибся, то пусть меня поправят
А как насчёт левых прокси. Можно вычислить адрес?
В комментарии, который и «породил» эту тему, я рассказывал об анонимайзерах, которые как раз и существуют для того, чтобы через них анонимно заходить на какие-либо ресурсы. Тогда, соответственно, мы получим IP этого анонимайзера. Теоретически, все равно можно получить адрес пользователя, но процедура усложняется в разы. Во-первых, нужно обращаться к анонимайзеру. Если они не хранят логи посещений, то найти пользователя не представится возможным. Если же логи есть — можно получить IP, под которым пользователь попал к ним. Ну а дальше процесс тот же — по IP определим провайдера, провайдер, если логи сохранены еще, может выдать адрес клиента. Но это все в теории. На практике ни анонимайзер, ни провайдер не должны предоставлять такой информации.
Ребята, я прошу прощения, если мой вопрос покажется неуместным или более того глупым, но мне вот интересно узнать, когда на сайте регистрируются совершенно нежелательные товарищи, их тоже можно вот так вычислить по IP — адресу и заблокировать в дальнейшем их регистрацию на сайте? ( здесь я не говорю про комментарии, а про регистрацию на сайте, которая в дальнейшем должна активироваться админом вручную ).
Комментарии в этом случае ничем не отличаются от регистрации. Как я писал выше, мы просто храним где-то нежелательные IP-адреса и при регистрации нового пользователя просто сверяем его IP-адрес с теми, которые у нас есть. Если совпадение найдено, то мы отказываем в регистрации, а если совпадений нет — регистрируем пользователя.