Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Защита от накрутки или реализация чего-то типа геотаргеттинга :)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужна помощь!!
rsd
Отправлено: 23 Апреля, 2011 - 13:14:04
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Всем привет!
Пишу скрипт партнерской программы
и столкнулся с такой проблемой

посетитель будет переходить по ссылке вида site.ru/link1
данная ссылка link1 принадлежит пользователю зарегоному в системе как партнер.

скрипт считает:
получаем IP того кто по этой ссылке щас прошел
выбираем с базы данные
если для партнера User1 (которому принадлежит эта ссылка link1)
за сегодня переходов с текущим IP не было то всё ок делаем свое дело и в базу записываем что текущий IP уже был и если посетитель с этим IP еще раз посетит какую нибудь ссылку партера User1 то скрипт увидит что данный IP для данного партнера уже засветился сегодня и выдаст другие действия.

вот, все вроде хорошо но!!.. что мешает нечестному партнеру юзать прокси и накручивать систему.

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

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

Вот как только это реализовать я не знаю. может поделитесь мыслями или примерным кодом. Откуда брать базу IP для сверки и т.д.


-----
С полной обоймой нести слово Божье куда проще! Помолись Богу и подай патроны!
 
 Top
koval
Отправлено: 23 Апреля, 2011 - 13:57:07
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Ищите базу диапазонов айпи по странам. Как-то так.
 
 Top
Мелкий Супермодератор
Отправлено: 23 Апреля, 2011 - 14:05:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Кому надо - в любом случае накрутят.

rsd пишет:
при получении текущего IP сверял прокси это или реальный IP

Что считать реальным IP? Реальный IP, тот, про которой моя машина думает, что с ним ходит в инет - 192.168.1.2, и что это вам даст?
И у проксей очень даже реальные IP. Особенно у анонимных.

А ещё IP существуют динамические (т.е. хороший человек, но с динамической внешкой, будет вашей системой считаться как толпа разных людей) и один на толпу (NAT'ы; к слову о том, что считать хорошим, годным переходом только 1 человека с IP).

(Отредактировано автором: 23 Апреля, 2011 - 14:06:20)



-----
PostgreSQL DBA
 
 Top
rsd
Отправлено: 23 Апреля, 2011 - 14:07:57
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




ну по второму варианту я себе представляю реализацию геотаргеттинга (логику реализации)

а вот можно ли как то чекать IP на прокси посредством скрипта?
вот взять к примеру сервис 2ip.ru он сразу выдает при заходе на сайт - юзаете вы прокси или нет. плохо конечно выдает 90% прокси он не определяет и когда заходишь через прокси на этот сайт он показывает что прокси не используются.
вот как реализовать что то подобное только проверялись также и анонимные прокси на то что это прокси действительно а не реальный IP?
(Добавление)
rsd пишет:
Кому надо - в любом случае накрутят.

rsd пишет:
при получении текущего IP сверял прокси это или реальный IP

Что считать реальным IP? Реальный IP, тот, про которой моя машина думает, что с ним ходит в инет - 192.168.1.2, и что это вам даст?
И у проксей очень даже реальные IP. Особенно у анонимных.

А ещё IP существуют динамические (т.е. хороший человек, но с динамической внешкой, будет вашей системой считаться как толпа разных людей) и один на толпу (NAT'ы; к слову о том, что считать хорошим, годным переходом только 1 человека с IP).

(Отредактировано автором: 23 Апреля, 2011 - 14:06:20)




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


-----
С полной обоймой нести слово Божье куда проще! Помолись Богу и подай патроны!
 
 Top
rsd
Отправлено: 23 Апреля, 2011 - 19:35:10
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Разобрался я как сделать проверку, поэтому решил поделиться своим методом вдруг кому нибудь еще пригодится помимо меня Улыбка

Итак поехали:
1) Регистрируемся здесь https://www[dot]wipmania[dot]com/ru/
Цитата:
WIPmania поможет точно определить, какой стране принадлежит конкретный IP адрес. Спектр применения довольно широк: геотаргетинг в электронной коммерции, борьба с фродом, фишингом, спамом и мошенничеством, защита серверов от различных видов атак по геопризнаку.

сервис бесплатен!

2) получаем свой уникальный ключ
3) создаем файл напр. ipcheck.php
в нем пишем

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // Функция на получение IP адреса посетителя
  4. function getIP()
  5. {
  6.    
  7.    if( $_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
  8.    {
  9.       $client_ip =
  10.          ( !empty($_SERVER['REMOTE_ADDR']) ) ?
  11.             $_SERVER['REMOTE_ADDR']
  12.             :
  13.             ( ( !empty($_ENV['REMOTE_ADDR']) ) ?
  14.                $_ENV['REMOTE_ADDR']
  15.                :
  16.                "unknown" );
  17.    
  18.        $entries = split('[, ]', $_SERVER['HTTP_X_FORWARDED_FOR']);
  19.    
  20.       reset($entries);
  21.       while (list(, $entry) = each($entries))
  22.       {
  23.          $entry = trim($entry);
  24.          if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) )
  25.          {
  26.            
  27.             $private_ip = array(
  28.                   '/^0\./',
  29.                   '/^127\.0\.0\.1/',
  30.                   '/^192\.168\..*/',
  31.                   '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/',
  32.                   '/^10\..*/');
  33.    
  34.             $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
  35.    
  36.             if ($client_ip != $found_ip)
  37.             {
  38.                $client_ip = $found_ip;
  39.                break;
  40.             }
  41.          }
  42.       }
  43.    }
  44.    else
  45.    {
  46.       $client_ip =
  47.          ( !empty($_SERVER['REMOTE_ADDR']) ) ?
  48.             $_SERVER['REMOTE_ADDR']
  49.             :
  50.             ( ( !empty($_ENV['REMOTE_ADDR']) ) ?
  51.                $_ENV['REMOTE_ADDR']
  52.                :
  53.                "unknown" );
  54.    }
  55.    
  56.    return $client_ip;
  57.    
  58. }
  59.  
  60. $uip = getIP(); // Получаем IP посетителя
  61.  
  62. $host = 'api.wipmania.com'; // хост сервиса
  63. $page = $uip.'?k=[KEY]&t=text'; //Строка запроса   [KEY] - это ваш уникальный ключ в сервисе  text - это метод ответа сервиса также доступны json и xml
  64.  
  65. // формируем запрос
  66. function http_get_request($host, $page)
  67. {
  68.         $req  = "GET http://$host/$page$var HTTP/1.0\r\n";
  69.         $req .= "Typ: cnsrv\r\n"; // Это для того чтобы получить помимо страны еще код который говорит нам о наличии прокси, ботов, датаценров и т.д. подробнее об этом вы также можете прочитать на сервисе во вкладке API
  70.         $req .= "\r\n";
  71.         return $req;
  72. }
  73.  
  74. // Отправляем HTTP-запрос и принимаем ответ
  75. function http_send($host, $request)
  76. {
  77.         // Получим номер порта службы WWW
  78.         $service_port = getservbyname('www', 'tcp');
  79.        
  80.         // Получим IP-адрес по имени сервера
  81.         $address = gethostbyname($host);
  82.        
  83.         // Создадим TCP/IP сокет
  84.         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  85.         if ( $socket < 0 )
  86.                 return "socket_create() failed: reason: "
  87.                         .socket_strerror($socket)."\n";
  88.        
  89.         $result = socket_connect($socket, $address, $service_port);
  90.         if ( $result < 0 )
  91.                 return "socket_connect() failed.\nReason: ($result) "
  92.                         .socket_strerror($result)."\n";
  93.        
  94.         // Отправим запрос
  95.         socket_write($socket, $request, strlen($request));
  96.        
  97.         // Прочтем результат
  98.         $res = "";
  99.         while ( $out = socket_read($socket, 2048) )
  100.                 $res .= $out;
  101.        
  102.         socket_close($socket);
  103.        
  104.         return $res;
  105. }
  106.  
  107.  
  108. $one = http_get_request($host, $page); // Вызываем функцию с запросом
  109. $two = http_send($host, $one);
  110. /*
  111. получаем ответ от сервера вида
  112. HTTP/1.1 200 OK Server: nginx Date: Sat, 23 Apr 2011 16:24:11 GMT Content-Type: application/octet-stream Content-Length: 4 Connection: close Content-Type: text/html; charset=utf-8 Set-Cookie: uid=1fuqNE2y/SsKHicxFO8hAg==; expires=Thu, 31-Dec-37 23:55:55 GMT; domain=.wipmania.com; path=/ RU--  
  113.  
  114. нам как раз нужно только RU--
  115. это и есть страна IP и код прокси
  116.  
  117. если --  значит прокси отсутсвует если напр RU30 - (с 30 по 39 это прокси) значит юзается прокси
  118.  
  119. но т.к. нам нужны лишь последние 4 символа то поэтому разбиваем строку
  120. */
  121.  
  122. $three = explode('=/',$two);  // разбиваем через =/ т.к. =/ встречатся только 1 раз как раз перед нашими данными
  123. $request = trim($three[1]); // удаляем пробелы т.к. после =/ идет 2 пробела
  124.  
  125. echo $request; // ну и наконец либо выводим на этран как тут сделал либо дальше уже создаем if else и говорим скрипту что ему делать при обнаружении  определенных сочетаний этих 4-х символов
  126.  
  127. ?>


Вот впринципе и всё. Задачей было показать как определить IP по геотергеттингу и на наличие прокси

PS хоть сервис и бесплатный но на бесплатном аккаунте выдается только страна проверка на прокси доступна только при покупке платного акка


-----
С полной обоймой нести слово Божье куда проще! Помолись Богу и подай патроны!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB