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

в 13:36, , рубрики: php, метки:

В нашем современном мире многие до сих пор верят в анонимность в интернете (я не говорю про читателей:) ). Многие даже не понимают, что 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);
  }

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

Автор: Samin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js