Получение данных об IP-адресе в Laravel

Получение данных об IP-адресе в Laravel

Получение данных об 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-адресе для последующего анализа, и при необходимости, блокировки, например.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий