Получение данных об IP-адресе в Laravel
Доброго времени суток! Сегодня мы рассмотрим с Вами как получить данные об IP-адресе (страна, регион, провайдер) из логов веб-сервера. В данном случае логи веб-сервера уже занесены в базу, поэтому остается только написать скрипт, которые эти данные будет возвращать. Для анализа IP-адресов мы будем использовать сервис ipinfo, (50 тыс. бесплатных запросов в месяц).
Код метода контроллера:
public function getUsersIpInfo()
{
$sql = "
select
distinct
l.id,
l.ip
from webserver_logs l
order by l.ip
";
// делаем запрос в базу и полученный массив превращаем в коллекцию Laravel
$rows = collect(DB::select($sql));
// создаем контекст выполнения http-запроса
$context = stream_context_create([
'http' => [
'timeout' => rand(1, 2),
]
]);
// данная функция выполняет запрос на сервер и декодирует полученные JSON-данные
$resp = file_get_contents(
"https://ipinfo.io/$ip?token={ВАШ_АПИ_КЛЮЧ}",
false, $context
);
$getIpInfo = fn($ip) => json_decode($resp);
// проходимся по списку полученных адресов и декодируем их в понятный формат
return $rows->map(static function ($row) use ($getIpInfo) {
$row->ip = $getIpInfo($row->ip);
return $row;
});
}
Примерный результат:
{
"1.1.1.1": {
"ip": "1.1.1.1",
"hostname": "one.one.one.one",
"anycast": true,
"city": "Los Angeles",
"region": "California",
"country": "US",
"loc": "34.0522,-118.2437",
"org": "AS13335 Cloudflare, Inc.",
"postal": "90076",
"timezone": "America/Los_Angeles"
},
"8.8.8.8": {
"ip": "8.8.8.8",
"hostname": "dns.google",
"anycast": true,
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.4056,-122.0775",
"org": "AS15169 Google LLC",
"postal": "94043",
"timezone": "America/Los_Angeles"
}
}
Вот таким образом можно получить данные об IP-адресе для последующего анализа, и при необходимости, блокировки, например.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.