Сравнивать первые три части IP-адреса только для дубликатов

#php

#php

Вопрос:

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

У меня есть результат базы данных по IP-адресам, просмотренным за последний час, и у меня есть текущий IP-адрес пользователя.

Мне интересно, знает ли кто-нибудь хорошую функцию для использования или имеет свою собственную, чтобы сравнить, принадлежит ли текущий IP-адрес пользователя сети, которую видели за последний час. С тем же IP-адресом, указанным ниже, мы хотели бы сравнить и вернуть true, если 1, 2 и 3 совпадают.

Пример IP 1.2.3.4 (совпадение по 1, 2 и 3 вернет true. Полное совпадение уже проверено.)

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

Комментарии:

1. Я могу получать новый IP-адрес каждую минуту, отключая кабель переменного тока от моего маршрутизатора. -> забудьте об ограничении вашего IP, используйте аутентификацию пользователя

2. Хранит ли ваша база данных IP-адреса в виде строк или 32-разрядных целых чисел?

3. Кроме того, один и тот же IP-адрес может использоваться разными посетителями, и все они должны иметь право требовать цену. Сосредоточьтесь на пользователе, а не на IP-адресе.

4. Если два разных посетителя используют одну и ту же подсеть, то вы наказываете кого-то, кого не должно быть. Если Боб находится в Майами у провайдера ComCants с IP 78.33.12.221, а Алиса также является подписчиком ComCants с IP 78.33.12.69, тогда что? Попытка забанить кого-либо по IP бесплодна и в конечном итоге не будет хорошим решением.

5. Вероятно, у меня есть IP-адрес парня через дорогу. Должны ли мы считаться одним и тем же человеком, несмотря на то, что он ….?

Ответ №1:

Хорошо, поскольку все были слишком заняты, говоря, как глупо это делать, вместо того, чтобы ответить на вопрос, я отвечу на него сам. Просто предположите, что у нас есть веские причины для этого, а не я трачу время на объяснение наших причин!

Я взял локальный IP-адрес и превратил его в массив, используя функцию explode.

 $ipArray = explode(".", $ip, 4);
  

Затем я удалил последнюю запись.

 array_pop($ipArray);
  

Затем я перебрал внешние IP-адреса, если таковые имеются, и проделал то же самое с каждым из них.

 $exArray = explode(".", $exIP, 4);
array_pop($exArray);
  

Наконец, все, что мне нужно было сделать, это сравнить два массива.

 if ($ipArray == $exArray) { return true; }
  

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

Вот полный используемый код. https://github.com/Bushstar/applebyte-faucet/commit/643bcd2111378bd6d1b2da34357290bd1d4136ae

Комментарии:

1. Valid Reason : Reputation 15