Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
1

Как получить IPv4

18.07.2022, 11:06. Показов 1141. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне нужно в сохранять IPv4 клиентов.
По
PHP
1
$_SERVER["REMOTE_ADDR"]
я получал IPv4
Теперь около 30% клиентов используют IPv6
PHP
1
inet_ntop
преобразует IPv4 из IPv6,
но как проверить какой IP пришел?
Заранее всем спасибо за помощь!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2022, 11:06
Ответы с готовыми решениями:

Как получить TCP-псевдозаголовок IPv4 в net.socet?
Есть например такая штука socket.remoteAddress, но откуда она сама берет ипшник? как вручную...

Как получить IPv4 своей физической сетевой карты, исключая прочие виртуальные адаптеры vmware, hyperv и т.д?
Добрый день. Подскажите пожалуйста как получить IPv4 своей физической сетевой карты, исключая...

Напишите программу, которая считывает IPv4 адрес и проверяет ее валидность. Форма записи IPv4 адреса – x.x.x.x
Напишите код для программы Пример: Напишите программу, которая считывает IPv4 адрес и проверяет...

Получить IPv4-адрес и использовать его в качестве аргумента для команды NETSH
Приветствую! Начну издалека. Недавно захотел настроить себе подключение по IPv6 через...

Как работает Multicast в IPv4?
Допустим мы передаем фильм на указанный ip от сервера к клиенту со скоростью 8Мбит/сек. Если нам...

13
14 / 9 / 11
Регистрация: 10.09.2012
Сообщений: 933
18.07.2022, 11:16 2
Как вариант
PHP
1
2
3
function ipV($ip) {
     return strpos($ip, ":") === false ? 4 : 6;
}
1
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
18.07.2022, 12:35  [ТС] 3
юрьич, Спасибо! Пробую.

Добавлено через 14 минут
Сорри, я ошибся, нужна ф-ция inet_pton для преобразования из IPv6 в IPv4.
Подсунул IPv6 в inet_pton и получил 6 групп нечитаемых символов, разделенных 0x3F
В IPv6 у меня 8 групп и должно быть на выходе 4.
0
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
20.07.2022, 14:57  [ТС] 4
Перепробовал много различных вариантов, не получилось ничего.
Получается не правильный IPv4, хотя форма правильная.

Прислали вот такой скрипт:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Grab the IP address of the user
$ipaddress = getenv("REMOTE_ADDR") ; echo 'IP Address: '.$ipaddress;
 
// Check if we need to try and get the IPv4 address
if(filter_var($ipaddress, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
?>
<script src=
"https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
    </script>
 
      <script>
 
    /* Add "https://api.ipify.org?format=json" statement
               this will communicate with the ipify servers in
               order to retrieve the IP address $.getJSON will
               load JSON-encoded data from the server using a
               GET HTTP request */
 
    $.getJSON("https://api.ipify.org?format=json", function(data) {
 
        // Setting text of element P with id gfg
        $("#gfg").html(data.ip);
    })
    </script>
 
       <p id="gfg"></p>
<?
}
else {
}
Скрипт работает правильно благодаря сайту
Возвращает IPv4 как мне нужно. Если просто набрать , то возвращает IPv6.
Как это сделано и сам их скрипт найти не удалось.
Хотелось бы этот или подобный скрипт иметь у себя. Кто знает, что ещё придумают за океаном.
Вообще, можно ли средствами PHP получить правильный IPv4 из IPv6?
Напр. этот
PHP
1
$ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2));
сообщает, что я в Японии нахожусь.
0
14 / 9 / 11
Регистрация: 10.09.2012
Сообщений: 933
20.07.2022, 15:34 5
Цитата Сообщение от Николай_4657 Посмотреть сообщение
Вообще, можно ли средствами PHP получить правильный IPv4 из IPv6
Это наврят ли)
0
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
20.07.2022, 15:41  [ТС] 6
юрьич, но как-то получают на сайте ipify.
Искал также через mysql и тоже правильный не удалось получить.
0
14 / 9 / 11
Регистрация: 10.09.2012
Сообщений: 933
20.07.2022, 16:02 7
Цитата Сообщение от Николай_4657 Посмотреть сообщение
но как-то получают на сайте ipify
Ну так тоже целый сервис работает. И там скорее всего в основном js и ещё хз что. И у них скорее всего технология не перевода, о отсеивания. Там своя магия). Вы понимаете, что v6 на несколько порядков больше чем v4. Это совсем другая технология. На сколько я понимаю). Вам нужно наверное смотреть в сторону поддержки v6
0
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
20.07.2022, 19:58  [ТС] 8
юрьич,
Я не проверял, информация из сети
v4 - 2**64
v6 - 2*128 - в 10-чной форме 18 разрядов
js серверный должен быть.
С PHP не получилось, смотрю MySQL
0
168 / 124 / 42
Регистрация: 25.10.2019
Сообщений: 476
20.07.2022, 23:07 9
Это две разные технологии без обратной совместимости. Преобразовать нельзя.

Банально
ipv6 = 2^128 = 340 282 366 920 938 463 463 374 607 431 768 211 456 адресов Вики


а ipv4 IPv4 обеспечивает возможность адресации 2^32 или приблизительно 4,3 миллиарда адресов (та же статья вики)

Это означает, что на подавляющем большинстве ipv6 не существует преобразования. И если клиенты перешли на эту технологию непосредственно - так и будет. В остальных случаях это лишь вариация подключения из-за доступности.

Путь преобразования - тупиковый. всего лишь ~2% ipv4 входят в этот диапазон
Нужно искать другой метод. Возможно получится JS'ом вынуждать клиента подключиться по ip4.
0
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
21.07.2022, 07:33  [ТС] 10
Цитата Сообщение от websyst_ru Посмотреть сообщение
Это означает, что на подавляющем большинстве ipv6 не существует преобразования
Вероятно, вычисляют и возвращают IP провайдера только, мне бы этого хватило, но только чтобы не брать информацию с чужого сервера, который находится за океаном. Вопрос остается, зачем тогда нужна inet_pton и что она возвращает на самом деле? В описании сказано, что она преобразует ipv6 в ipv4. Ещё с десяток готовых примеров нашлось, согласно одного мой ip 10.0.0.1(PHP-скрипт находился на сервере, не на локальном компьютере!!!), я тут же открыл яндекс и вбил мой ip и получил правильную информацию.

Цитата Сообщение от websyst_ru Посмотреть сообщение
Возможно получится JS'ом вынуждать клиента подключиться по ip4.
Разве не провайдер даёт такое подключение?
Серверными JS скриптами не приходилось пользоваться, ASP(VS) пользовались довольно долго, пока хозяин хостинга не потребовал отказаться, т.к. антивирус обзывал вирусом любой VS с напр. копированием файла. Перешли на PHP.
0
168 / 124 / 42
Регистрация: 25.10.2019
Сообщений: 476
21.07.2022, 08:24 11
Цитата Сообщение от Николай_4657 Посмотреть сообщение
В описании сказано, что она преобразует ipv6 в ipv4
Ничего подобного,
( string $ip ) : string|false

Эта функция конвертирует читаемый IPv4- или IPv6-адрес (если PHP был собран с поддержкой IPv6) в адрес, соответствующий 32-битной или 128-битной бинарной структуре.[/I]
Т.е. или-или.


Вы придаёте слишком большое значение слову "конвертирует". Да, оно есть, но тут имеется ввиду другое представление вида|типа данных, а не приведение к другой технологии. Яблоко можно конвертировать в пюре/салат/сок и т.д., но его нельзя конвертировать в автомобиль.

Цитата Сообщение от Николай_4657 Посмотреть сообщение
Разве не провайдер даёт такое подключение?
Верно.
Но ipv4 в данный момент - основная технология. Поэтому ipv6 - опционально может использоваться, а может и нет. Именно поэтому можно принудить клиента к ipv4 на скриптах. т.к. включены по умолчанию оба. ipv6 в этом случае просто приоритет подключения.
Но если выдан только ip6 и проведены соответствующие настройки. Или если шлюз имеет только ip6 - вы с этим ничего не сделаете.
Для каких целей вообще собираются Ip?, мне кажется вы идете не в ту сторону.
Нет никаких директив, которые были ли бы применены к ip4, но не к ip6.

Цитата Сообщение от Николай_4657 Посмотреть сообщение
согласно одного мой ip 10.0.0.1
Похоже на шлюз. Это не ваш случай.
0
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
21.07.2022, 12:06  [ТС] 12
Цитата Сообщение от websyst_ru Посмотреть сообщение
мне кажется вы идете не в ту сторону
Ищу варианты, пока не вижу.

Цитата Сообщение от websyst_ru Посмотреть сообщение
Для каких целей вообще собираются Ip
Заказчик хочет знать статистику, из каких стран и сколько раз к нему заходили.
Также храню адресную строку, т.к. в адресную строку пытались всунь скрипт и даже не через прокси заходили.
В сети в свободном доступе гуляет iptocountry.sql, с ip4. С ip6 закрытая информация. Хотя существуют сайты, напр. этот где есть все необходимое. Вытянуть можно оттуда, но через js скрипт, а он не хочет, т.к. js скрипт легко заменяется в отладчике.
Пробовал
PHP
1
file_get_contents('https://ipinfo.io/');
но такой вариант в принципе даже не может работать, т.к. обращение к сайту идет не от клиента, а от сервера и содержит информацию сервера, а не клиента.

Цитата Сообщение от websyst_ru Посмотреть сообщение
Похоже на шлюз
Да. Роутер у меня 10.0.0.138 и 10.0.0.1 это мой десктоп.
0
168 / 124 / 42
Регистрация: 25.10.2019
Сообщений: 476
21.07.2022, 12:39 13
Лучший ответ Сообщение было отмечено Николай_4657 как решение

Решение

Цитата Сообщение от Николай_4657 Посмотреть сообщение
Заказчик хочет знать статистику, из каких стран и сколько раз к нему заходили
Ip6 запросто отслеживается

Цитата Сообщение от Николай_4657 Посмотреть сообщение
скрипт легко заменяется в отладчике
Если отправляете запрос с сервера - не заменяется.
Работать можно с этим

http://ip-api.com/json/2a00:f940:4::8


Цитата Сообщение от Николай_4657 Посмотреть сообщение
скрипт легко заменяется в отладчике
А еще я бы задумался над целесообразностью всем мер "если". (Я предполагаю) что у вас обычный рядовой ресурс. Видели мемы ворот в чистом поле?) сейчас это выглядит так. ибо получить адреса можно и из стандартных логов.

Цитата Сообщение от Николай_4657 Посмотреть сообщение
но такой вариант в принципе даже не может работать
Не вижу причин, почему так нельзя делать, если в итоге вы получаете корректные данные

Отсюда всё вполне корректно работает.(просто нашел в гугле) таких ресурсов масса
http://ip-api.com/json/2a00:f940:4::8
1
11 / 10 / 2
Регистрация: 06.08.2021
Сообщений: 468
21.07.2022, 14:01  [ТС] 14
websyst_ru, Спасибо!!! Подсунул IPv6 как параметр
PHP
1
file_get_contents('http://ip-api.com/json/'.$IPv6);
Есть страна, то что я искал! Я не видел, что можно IPv6 как параметр подсунуть.
Сейчас чуть изменю таблицу и скрипт.

Цитата Сообщение от websyst_ru Посмотреть сообщение
А еще я бы задумался над целесообразностью всем мер "если". (Я предполагаю) что у вас обычный рядовой ресурс.
Заказчик необычный. Читает книжки для самых крутых хакеров от Фленова и враги кругом.
На самом деле, были попытки взлома. В адресную строку и поля инпут пытались скрипты подсунуть. Я быстренько вставил проверку и по их ip делаю редирект на сайт 18+

Ещё раз спасибо!

Добавлено через 52 минуты
websyst_ru, Насчет сайта конвертацией IPv6 в IPv4. Проверил на сайте
Как я и подозревал, дают IP провайдера, я попробовал пару цифр заменить в IPv6, IPv4 получил тот же самый, иначе просто невозможно.
0
21.07.2022, 14:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2022, 14:01
Помогаю со студенческими работами здесь

Как настроить ipv4 на vps.me?
Тут такая ситуация... Нету IPv4, как его настроить на VPS? Как это сделать??? Хостинг : vps.me...

Как заставить Socket работать и с IPv4, и с IPv6?
Доброе время суток! Подскажите, как заставить Socket работать с обеими вариантами IP одновременно?...

как в пакете найти признаки протоколов ipv4 и ipv6?
Нужно обработать входной файл формата &quot;паровоз 2 байта длины&quot;* : берется каждый пакет и в его...

Как изменить IP DNS-сервера в окне свойства протокола (TCP/IPv4)?
Здравствуйте уважаемые форумчане. Подскажите пожалуйста как программно в окне свойства протокола...

IPv4 Калькулятор
Добрый день, написал код ip-калькулятора, но не могу реализовать изменения по маски сети, (Т.е....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru