«Вычисляем по ip»

от автора

В нашем современном мире многие до сих пор верят в анонимность в интернете (я не говорю про хабражителей:) ). Многие даже не понимают, что img.2ip.ru/ooops.jpg правда узнаёт информацию о пользователе. Предлагаю сделать такой же сервис, то есть один человек другому пересылает ссылку на картинку, вместо открытия картинки выполняется наш скрипт, после выполнения он редеректит на «нормальную» картинку. И так, сначала сделаем простые вещи: определим ip человека, его браузер, операционку и так далее:

 $from = $_SERVER['HTTP_REFERER']; //Откуда на нашу страницу перешёл пользователь  if ( stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox') ) $browser = "MozillaFirefox"; //браузер   elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'YaBrowser') ) $browser = "YandexBrowser";   elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome') ) $browser = "Google Chrome";   elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Safari') ) $browser = "Safari";   elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Opera') ) $browser = "Opera";   elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Mail') ) $browser = "MailRuBrowser";     elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'AppleWebKit') ) $browser = "Mobile";   $ip = $_SERVER['REMOTE_ADDR'];   $spy_user = substr($_SERVER['QUERY_STRING'], 0, -4); // http://наш_сайт.домен0лвл/наша_страница.php?<ВОТ ЭТО БУДЕТ ПОМЕЩЕНО СЮДа>.gif. Это нужно для того, чтобы пользователи посылали "свою" картинку, то есть мы могли определить, какой именно пользователь послал "картинку" перешедшему сюда  function get_os($user_agent)  //функция для узнавания операционки  {     $oses = array (      'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',      'Windows 98' => '(Windows 98)|(Win98)',      'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',      'Windows XP' => '(Windows NT 5.1)|(Windows XP)',      'Windows 2003' => '(Windows NT 5.2)',    'Windows 7' => '(Windows NT 6.1)',      'Windows ME' => 'Windows ME',      'Open BSD'=>'OpenBSD',      'Sun OS'=>'SunOS',      'Linux'=>'(Linux)|(X11)',      'Macintosh'=>'(Mac_PowerPC)|(Macintosh)',      'QNX'=>'QNX',      'BeOS'=>'BeOS',      'OS/2'=>'OS/2',    'iOS'=>'iOS',    'Android'=>'Android',    'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)'     );            foreach($oses as $key=>$value)       {           if (preg_match('#'.$value.'#i', $user_agent))               return $key;       }   return 'Unknown';    }  if(!(isset($from))) $from = "Unknown";   $OS = get_os($_SERVER['HTTP_USER_AGENT']); //узнаём операционку  $info = $_SERVER['HTTP_USER_AGENT']; //на всякий случай записываем всю строку - на случай ошибки. Пусть будет 

И так, самое постое мы сделали. Теперь надо узнать страну, город и провайдер. Через какое-то время проб и ошибок я понял, что чтобы узнать провайдера, нужно узнать область ip, которыми он «командует». Следовательно, нужно составить базу областей ip и провайдеров, что очень сложно, так как провайдеров очень много. Поэтому я решил использовать какой-нибудь стандартный whois.
Остановился на русском, но, в принципе, можно использовать любой другой.

   if( $curl = curl_init() ) {     $ip = $_SERVER["REMOTE_ADDR"];     curl_setopt($curl, CURLOPT_URL, 'http://ip-whois.net/ip_geo.php?ip='.$ip);     curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);     $out = curl_exec($curl);     $matches = array();     $country = preg_match_all("/Страна: (.*)/i", $out, $matches);     $country = $matches[1][1];     curl_close($curl);   } 

Аналогично делаем с городом, регионом и провайдером. После этого результаты работы всей программы кладём в базу.

ссылка на оригинал статьи http://habrahabr.ru/post/211953/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *