Php скрипт мой ip адрес

gethostbyaddr

Returns the host name of the Internet host specified by ip .

Parameters

Return Values

Returns the host name on success, the unmodified ip on failure, or false on malformed input.

Examples

Example #1 A simple gethostbyaddr() example

$hostname = gethostbyaddr ( $_SERVER [ ‘REMOTE_ADDR’ ]);

See Also

  • gethostbyname() — Get the IPv4 address corresponding to a given Internet host name
  • gethostbynamel() — Get a list of IPv4 addresses corresponding to a given Internet host name

User Contributed Notes 35 notes

Sometimes when using $_SERVER[‘HTTP_X_FORWARDED_FOR’] OR $_SERVER[‘REMOTE_ADDR’] more than 1 IP address is returned, for example ‘155.240.132.261, 196.250.25.120’. When this string is passed as an argument for gethostbyaddr() PHP gives the following error: Warning: Address is not a valid IPv4 or IPv6 address in.

To work around this I use the following code to extract the first IP address from the string and discard the rest. (If you wish to use the other IPs they will be in the other elements of the $ips array).

if (strstr($remoteIP, ‘, ‘)) $ips = explode(‘, ‘, $remoteIP);
$remoteIP = $ips[0];
>

The problem of broken DNS servers was causing me a problem because i had a page for user statistics that required around 20 reverse dns lookups to be done, and even as many as 5/6 of them being broken was causing a huge delay in loading the page. so i wrote a function that uses a UDP socket to talk directly to the DNS server (instead of going via the normal gethostbyaddr function) this let me set a timeout.

The only requirement is that your DNS server must be able to do recursive lookups, it wont go to other DNS servers if its told to. and of course you need to know your DNS servers IP address 🙂

function gethostbyaddr_timeout($ip, $dns, $timeout=1000)
// random transaction number (for routers etc to get the reply back)
$data = rand(0, 99);
// trim it to 2 bytes
$data = substr($data, 0, 2);
// request header
$data .= «\1\0\0\1\0\0\0\0\0\0»;
// split IP up
$bits = explode(«.», $ip);
// error checking
if (count($bits) != 4) return «ERROR»;
// there is probably a better way to do this bit.
// loop through each segment
for ($x=3; $x>=0; $x—)
// needs a byte to indicate the length of each segment of the request
switch (strlen($bits[$x]))
case 1: // 1 byte long segment
$data .= «\1»; break;
case 2: // 2 byte long segment
$data .= «\2»; break;
case 3: // 3 byte long segment
$data .= «\3»; break;
default: // segment is too big, invalid IP
return «INVALID»;
>
// and the segment itself
$data .= $bits[$x];
>
// and the final bit of the request
$data .= «\7in-addr\4arpa\0\0\x0C\0\1»;
// create UDP socket
$handle = @fsockopen(«udp://$dns», 53);
// send our request (and store request size so we can cheat later)
$requestsize=@fwrite($handle, $data);

Читайте также:  Javascript any sql server

@socket_set_timeout($handle, $timeout — $timeout%1000, $timeout%1000);
// hope we get a reply
$response = @fread($handle, 1000);
@fclose($handle);
if ($response == «»)
return $ip;
// find the response type
$type = @unpack(«s», substr($response, $requestsize+2));
if ($type[1] == 0x0C00) // answer
// set up our variables
$host=»»;
$len = 0;
// set our pointer at the beginning of the hostname
// uses the request size from earlier rather than work it out
$position=$requestsize+12;
// reconstruct hostname
do
// get segment size
$len = unpack(«c», substr($response, $position));
// null terminated string, so length 0 = finished
if ($len[1] == 0)
// return the hostname, without the trailing .
return substr($host, 0, strlen($host) -1);
// add segment to our host
$host .= substr($response, $position+1, $len[1]) . «.»;
// move pointer on to the next segment
$position += $len[1] + 1;
>
while ($len != 0);
// error — return the hostname we constructed (without the . on the end)
return $ip;
>
return $ip;
>
?>

This could be expanded quite a bit and improved but it works and i’ve seen quite a few people trying various methods to achieve something like this so i decided to post it here. on most servers it should also be more efficient than other methods such as calling nslookup because it doesn’t need to run external programs

Note: I’m more a C person than a PHP person, so just ignore it if anything hasn’t been done the *recomended* way 🙂

Источник

Как получить IP через PHP для сервера и пользователя

php-uznat-ip-adres

Доброго времени суток 🙂

На практике часто возникает необходимость узнать 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 адрес не посетителя, а прокси сервера.

Читайте также:  Google

Чтобы узнать в PHP IP адрес посетителя в данном случае, нужно воспользоваться другим способом.

http://cccp-blog.com/wp-includes/images/banners/templatemonster/banner_content_mobile.png

Как в 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 с помощью коммерческого непрозрачного прокси, то шансы узнать его реальный адрес стремятся к нулю. Благо, что процент таковых клиентов совсем невелик, так что приведённая финальная версия скрипта поможет вам в большинстве случаев.

Оставляйте свои отзывы в комментариях — что понравилось, что нет, может быть, о чём-то следовало бы рассказать поподробнее… Мне интересно любое ваше мнение.

P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.

Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.

Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.

И с друзьями не забудьте поделиться 😉

Источник

Читайте также:  Get index method java

Как узнать IP-адрес посетителя через PHP

Как узнать IP-адрес посетителя через PHP

Один из самых частых вопросов, которые мне довелось слышать — это «как узнать IP-адрес посетителя через PHP«. Несмотря на всю простоту этой задачи, люди, тем не менее, это спрашивают. Как правило, это новички, которым PHP изучать не нужно, а нужен лишь какой-то скрипт, который будет выполнять определённую их задачу, в частности, узнавать IP-адрес посетителя. И в этой статье я этот код и дам.

Чтобы узнать IP-адрес посетителя сайта нужно написать всего лишь одну строку в скрипте:

Если Вы запустите этот скрипт, то узнаете свой IP-адрес. Как видите, всё просто! А в одной из следующих статей я расскажу, как узнать по IP-адресу, из какой страны пришёл человек на сайт.

Создано 14.03.2011 19:58:36

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 10 ):

    Да так ты узнаешь IP НО как быть если у человека Динамический IP Ему просто стоит взять отключиться от нета а потом заново подключиться И у него уже будет новый IP Что посоветуешь в данной ситуации ?

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

    Самый простой вариант — это блокировка по cookie. По IP блокировать бесполезно по причинам описанным Вами же. Так же можно блокировать всю подсеть, хотя не всегда динамический IP в одной подсети, плюс пострадают нормальные люди из его подсети.

    Спасибо хорошая идея Попробую может что-то выйдет

    Админ у меня на локальном ip выводит вот это ::1 когда пишу echo $_SERVER[«REMOTE_ADDR»];

    а на настояшем сервере будет выводится IP.

    Михаил, спасибо, шикарная статья! Все по делу и понятно . По определению IP сейчас уже много решений для определения. появились такие сервисы, позволяющие узнавать не только IP, но и телефонные номера всех посетителей сайта. используют в маркетинге для обзвонов. говорят, что легально — патенты, разрешения, все дела. как они это делают? пример: https://vse-klienty.ru

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Оцените статью