How to find IP and geographic location of the person with PHP scripting.
Are you interested in finding the geographic location of the person you are talking to?
This type of information can be very useful if you are tracking someone.
I will share with you some websites that create a link that you can send via social networks or using social engineering methods, and can instantly find out the IP address of the target.
If you are interested in creating your own IP grabber tool because you want to use your own domain, then here is a simple code:
<?php
//IP Grabber
//Variables
$protocol = $_SERVER[‘SERVER_PROTOCOL’];
$ip = $_SERVER[‘REMOTE_ADDR’];
$port = $_SERVER[‘REMOTE_PORT’];
$agent = $_SERVER[‘HTTP_USER_AGENT’];
$ref = $_SERVER[‘HTTP_REFERER’];
$hostname = gethostbyaddr($_SERVER[‘REMOTE_ADDR’]);
//Print IP, Hostname, Port Number, User Agent and Referer To Log.TXT
$fh = fopen(‘log.txt’, ‘a’);
fwrite($fh, ‘IP Address: ‘.«».$ip .«\n»);
fwrite($fh, ‘Hostname: ‘.«».$hostname .«\n»);
fwrite($fh, ‘Port Number: ‘.«».$port .«\n»);
fwrite($fh, ‘User Agent: ‘.«».$agent .«\n»);
fwrite($fh, ‘HTTP Referer: ‘.«».$ref .«\n\n»);
fclose($fh);
?>
IP logger
IP Logger URL Shortener allows you to track and register IP addresses, GPS locations.
IP Logger URL Shortener provides checking access to IP addresses, checking what my IP services, counters, and informants are.
PHP: Как определить IP адрес пользователя?
Сегодня поговорим о том, как определить IP адрес пользователя в PHP, как его проверить с помощью регулярных выражений, как его конвертировать в число и обратно, как его хранить в базе данных MySQL, а так же о том, какие ip адреса заранее зарезервированы..
Вступление
IP адрес — это сокращение от Internet Protocol Address. Это числовой идентификатор компьютера или устройства в локальной сети или сети интернет. Бывают двух версий:
- IPv4 (32 бита), пример: 192.168.0.1
- IPv6 (128 бит), пример: 0000:0000:0000:0000:0000:0000:0000:1 или ::1
В этой статье мы поговорим про ip-адреса версии IPv4, т.е. об ip адресах из диапазона: 0.0.0.0 — 255.255.255.255
Как получить IP адрес посетителя в PHP
IP адрес пользователя, в PHP, передается в глобальном массиве $_SERVER. Получить его можно использовав ключ массива REMOTE_ADDR, пример:
В результате выполнения скрипта, вы получите ip адрес посетителя.
Какой адрес будет показан при входе с моего ПК, на веб-сервер на моем ПК?
В случае, если Вы установили веб-сервер на свой ПК (например, Openserver) и открываете страницу опять же со своего ПК, вы увидите адрес 127.0.0.1. Это нормально, при переносе на нормальный хостинг, будет показан Ваш внешний IP.
Что будет при попытке получить ip-адрес выполнив скрипт из консоли?
Если Вы попробуете запустить такой скрипт из консоли, например создав файл ip.php с содержимым:
и затем в консоли выполните:
то вы получите ошибку, в которой будет написано, что PHP не может найти значение по указанному ключу
Дело в том, что эти переменные устанавливает веб-сервер и при запуске «напрямую» они не будут установлены
Как проверить откуда запускается скрипт из консоли или через веб-сервер?
Проверить откуда запускается скрипт можно с помощью функции php_sapi_name()
Более надежными способом будет дополнительная проверка на существование ключа массива, вот так:
Если у Вас возникнет вопрос, почему просто не проверить через isset, отвечаю: переменная REMOTE_ADDR может быть установлена с помощью переменных окружения, тогда проверка isset пройдет, но значение может не соответствовать действительности. Да, можно проигнорировать проверку с помощью php_sapi_name(), но вы должны отдавать себе отчет в том, что вы делаете и почему именно так.
Как проверить IP адрес с помощью регулярного выражения?
Проверить IP адрес с помощью регулярного выражения можно простой проверкой:
Здесь проверяется, что в $ip содержится такая строка:
Более точной будет проверка ip-адреса вот таким выражением:
Здесь проверяется, что в $ip содержится такая строка:
Как определить IP адрес посетителя, находящегося за прокси сервером?
Достоверно на 100% определить нельзя. Можно попытать удачи с переменными HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR, но надо помнить что все переменные массива $_SERVER начинающиеся на HTTP_* это заголовки запроса, которые могут быть подделаны, переопределены, полностью отсутствовать, иметь не верный формат или содержать какую-нибудь гадость, например, sql-инъекцию.
Обычно используют так:
В случае, если Вы решите использовать именно такой код, я рекомендую проверять его с помощью регулярки описанной выше, чтобы отфильтровать не валидные ip и гадости. Вот так:
Как хранить IP адрес в базе данных MySQL?
Лично я предпочитаю хранить IP адрес в MySQL в поле типа VARCHAR(15), по длине самого длинного IPv4 адреса = 255.255.255.255
Другой способ, это привести IP адрес в к типу UNSIGNED INT. Это позволяет экономить память: 4 байта у UNSIGNED INT против 15 у CHAR.
Преобразовать IPv4 адрес к типу INT в PHP можно так
Тоже самое можно сделать и на стороне MySQL, для этого надо использовать функции INET_ATON() и INET_NTOA()
Запомнить эти функции достаточно просто:
ATON = Address TO Numaber
NTOA = Number TO Adress
Выбор, что использовать для хранения VARCHAR или INT стоит за проектировщиком БД и удобством использования в будущем.
Какие IP адреса являются предопределенными?
Для локальных сетей предопределены такие диапазоны IP адресов:
- 10.0.0.0/8 или 10.0.0.0 — 10.255.255.255
- 172.16.0.0/12 или 172.16.0.0 — 172.31.255.255
- 192.168.0.0/16 или 192.168.0.0 — 192.168.255.255
Для коммуникаций внутри хоста (между программами запущенными на вашем ПК) используется диапазон ip-адресов: 127.0.0.0/8 или 127.0.0.0 — 127.255.255.255 .
Блок с 169.254.1.0 по 169.254.254.255 (подсеть 169.254.0.0/16 за исключением подсетей 169.254.0.0/24 и 169.254.255.0/24) —
используется для автоматической настройки сетевого интерфейса в случае отсутствия DHCP
Как в PHP узнать IP пользователя и определить его страну?
Получить IP адрес клиента в PHP можно через суперглобальный массив $_SERVER . В этом массиве IP адрес посетителя доступен через ключ REMOTE_ADDR .
Но, если клиент использует прокси-сервер, то значение $_SERVER[’REMOTE_ADDR’] будет содержать IP последнего прокси-сервера, через который клиент попал на сайт.
В этом случае, чтобы узнать IP посетителя можно попробовать использовать $_SERVER[’HTTP_CLIENT_IP’] и $_SERVER[’HTTP_X_FORWARDED_FOR’] . HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR – это заголовки, содержащие IP адрес пользователя. Данные заголовки устанавливает прокси-сервер. Обычно прокси-сервер устанавливает один из них. Данным в этих заголовках можно доверять, только если прокси-сервер надёжный. В противном случае, им доверять не стоит, т.к. их можно очень просто подделать. В этом случае лучше просто использовать $_SERVER[’REMOTE_ADDR’] или сохранять в базу как $_SERVER[’REMOTE_ADDR’] , так и заголовок, устанавливаемый прокси-сервером.
Определение страны по ip с помощью Sypex Geo
Основные шаги по созданию php скрипта, с помощью которого можно будет определять страну по ip:
1. Скачаем Sypex Geo для PHP и базу данных стран. Sypex Geo распространяется по лицензии BSD, т.е. является абсолютно бесплатным.
2. Распакуем архивы и загрузим на сервер файлы «SxGeo.php» и «SxGeo.dat». В качестве примера, создадим на сервере папку SxGeo и загрузим эти файлы в неё.
3. Создадим свой скрипт, например, «get_country_code.php».
4. Вставим в этот файл следующий код:
5. Включим файл «get_country_code.php» в другие скрипты, в которых нужно реализовать выполнение кода в зависимости от принадлежности ip посетителя к той или иной стране.
Определение города по ip с помощью Sypex Geo
Для определения города, потребуется загрузить архив с базой данных городов для Sypex Geo, распаковать его и загрузить на сервер.
Скрипт в этом случае будет следующий:
Для автоматического обновления баз можно воспользоваться этим архивом. В этом архиве находится php скрипт. Этот скрипт необходимо настроить, т.е. указать в нём URL для скачивания базы и пути к файлам на сервере. После этого загрузить его на сервер и настроить его запуск по расписанию с помощью cron.
Определение страны и города по ip через сервис через сервис ipstack
Рассмотрим ещё один вариант определения в php местоположения по ip посетителя, но уже не через Sypex Geo, а с помощью сервиса ipstack.
Сервис ipstack имеет бесплатный план, который позволяет обрабатывать до 10000 запросов в месяц.
Для получения бесплатного плана нажимаем на кнопку «GET FREE API KEY» и переходим на страницу, на которой нужно заполнить регистрационную карточку.
После регистрации, на личной странице ipstack вам будет назначен «API Access Key», который нужно скопировать. Он нам потребуется при создании php скрипта.
Как в PHP получить IP адрес сервера
Узнать IP адрес сервера в PHP можно с помощью следующей инструкции:
Пример реализации определения локации в CMS MODX
В качестве примере рассмотрим, как в CMS MODX Revolution можно очень просто без сторонних сервисов осуществить определение страны посетителя. Разработаем решение на базе Sypex Geo.
1. Для этого сначала нужно загрузить Sypex Geo в проект:
Файл «SxGeo.php» – это основной скрипт, а «SxGeo.dat» – это база стран. Этих двух файлов достаточно для определения страны пользователя по его ip. Дополнительно в каталоге SxGeo ещё расположен файл «SxGeoCity.dat», данный файл в текущей реализации не нужен, он может потребовать, если в проекте потребуется определять не только страну пользователя, а ещё его регион и город.
2. Создадим сниппет, например «get_location.php». В качестве примера организуем это с помощью файлов. Для этого нужно чтобы был установлен pdoTools и в настройках включена опция «Использовать Fenom на страницах».
Код сниппета «get_location.php»:
Поместим файл «get_location.php» в каталог /core/elements/snippets/ .
Данный сниппет будет определять страну и помещать его код в плейсхолдер countrycode .
3. После этого в нужных шаблонах поместим код вызова сниппета и сохранение значение плейсхолдера countrycode в переменную $country_code .
Как получить IP через PHP для сервера и пользователя
Доброго времени суток
На практике часто возникает необходимость узнать IP в PHP скрипте сайта. Причём, это может быть как IP адрес сервера, так и посетителя, производящего действия на вашем ресурсе.
Причём, последний иногда может пользоваться сайтом не напрямую, а по каким-то причинам подключаясь к нему через прокси сервер. Этот случай усложняет жизнь тем, что для подключения используется изменённый IP адрес.
Но, к счастью, в PHP получить IP адрес как клиента, так и самого сайта в этом случае более, чем реально. Причём, для этого не потребуются никакие специальные библиотеки и средства движков сайтов. Всё необходимое уже есть в самом PHP «на борту».
Нам осталось только пользоваться
Как в PHP узнать IP сервера
Вся необходимая информация об IP сервера, да и пользователя тоже, в PHP доступна через суперглобальный массив $_SERVER. Однако, помимо перечисленных данных он содержит ещё много различной информации.
В этой ситуации отыскать нужное становится непростой задачей, для решения которой нужно знать назначение переменных массива.
В частности, для того, чтобы в PHP определить IP адрес сервера, в коде нужно прописать следующую конструкцию:
Данный PHP код позволит вам вывести на экран IP адрес сервера, на котором он запускается. Это же значение будет и IP адресом сайта, если он вам где-нибудь понадобится.
Как в PHP получить IP посетителя
Для определения в PHP IP пользователя, с которого он подключается к вашему сайту, мы воспользуемся тем же массивом $_SERVER. В данном случае нас будет интересовать переменная REMOTE_ADDR, содержимое которой можно вывести на экран привычным способом:
Однако, в случаях использования клиентом прокси соединений, т.е. когда при подключении трафик идёт через сторонний прокси сервер, данная переменная будет содержать IP адрес не посетителя, а прокси сервера.
Чтобы узнать в PHP IP адрес посетителя в данном случае, нужно воспользоваться другим способом.
Как в PHP определить IP пользователя, использующего прокси
Первым делом, в PHP IP посетителя при использовании прокси можно попробовать получить следующим способом:
Данный код можно найти практически во всех PHP скриптах, определяющих реальный IP посетителя. Однако, мало кто может объяснить, что хранится в данной переменной.
Если прописать данный код у себя в сайте на локальном сервере, то вы вообще получите пустое значение, т.е. данной переменной в массиве $_SERVER у вас не окажется. И это не удивительно, т.к. в HTTP_CLIENT_IP хранится глобальный IP пользователя, т.е. его адрес в сети Интернет.
И, самое главное, что на это значение не влияет прокси соединение, т.е. здесь вы найдёте реальный IP пользователя, а не его прокси сервера.
Если по каким-то причинам данная переменная будет отсутствовать в PHP $_SERVER, то можете попробовать узнать IP адрес клиента ещё и таким способом:
В данную переменную прокси сервера сами помещают реальный IP посетителя.
Таким образом, для того, чтобы в PHP узнать IP клиента гарантированно, можно использовать следующую конструкцию:
Данный скрипт выведет на экран значение переменной $ip, в которую при использовании прокси соединения будет записан глобальный IP посетителя. Если же его не будет найдено в PHP $_SERVER, то скрипт попытается узнать IP пользователя, записанный самим прокси сервером.
Если же ни одной переменной не будет присвоено значение, то с большой вероятностью можно предположить, что посетитель не использует прокси либо прокси сервер не предоставляет реальный IP посетителя. В этом случае, чтобы получить хоть какое-то значение IP, мы берём его из REMOTE_ADDR. Но, с высокой долей вероятности, это значение будет IP адресом прокси сервера (благо, что ими не пользуется абсолютно каждый клиент сайтов).
Для проверки существования значений переменных я, как видите, решил воспользоваться PHP функцией filter_var, которая фильтрует переменные с применением определённого фильтра (шаблона), которым в данном случае является FILTER_VALIDATE_IP.
В завершение хочу подытожить, что описанным выше способом, несмотря на все тщательные проверки всех возможных серверных переменных PHP, определить IP пользователя с использованием прокси всё равно не получится на 100%.
Дело в том, что IP адрес клиента предоставляют только определённый тип прокси серверов, которые называют «прозрачными». Как правило, это открытые службы.
Если же ваш пользователь решил скрыть свой реальный IP с помощью коммерческого непрозрачного прокси, то шансы узнать его реальный адрес стремятся к нулю. Благо, что процент таковых клиентов совсем невелик, так что приведённая финальная версия скрипта поможет вам в большинстве случаев.
Оставляйте свои отзывы в комментариях — что понравилось, что нет, может быть, о чём-то следовало бы рассказать поподробнее… Мне интересно любое ваше мнение.