Заметки · 10.04.2023

Назови мне свой IP…

И ещё немного о разных API (кстати, ранее уже был пост про эксперименты с API yesno.wtf).

На этот раз рассмотрим два сервиса для работы с IP: https://api.ipify.org/ (возвращает внешний IP адрес) и https://ip-api.com (сообщает информацию о регистрации IP адреса).

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

В общем, всё в духе жанра:

Начнём с того, что получим свой внешний IP адрес с помощью api.ipify.org. Если открыть эту ссылку напрямую в браузере — сайт выдаст наш айпи. Попробуем обработать json-ответ от сайта с помощью PowerShell:

(Invoke-WebRequest -Uri https://api.ipify.org/?format=json | ConvertFrom-Json).ip

Ответом в консоль должен вернутся заветный адрес. Теперь подсунем его сервису IP-API, который предоставит данные о заданном IP. Кстати, у этого проекта есть отлично задокументированный API (тык).

Получается вот такая красотища:

# Узнать свой внешний IP #
# https://api.ipify.org/
$myip = (Invoke-WebRequest -Uri https://api.ipify.org/?format=json | ConvertFrom-Json).ip
Write-Host "Мой внешний IP: $myip" -ForegroundColor Cyan
Write-Host

# Данные о IP #
# https://ip-api.com/docs/api:json
$country = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).country
$region = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).regionName
$city = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).city
$timezone = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).timezone
$isp = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).isp
$org = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).org

# Вывод данных #
Write-Host "Страна: $country" -ForegroundColor Cyan
Write-Host "Регион: $region" -ForegroundColor Cyan
Write-Host "Город: $city" -ForegroundColor Cyan
Write-Host "Часовой пояс: $timezone" -ForegroundColor Cyan
Write-Host "Провайдер: $isp" -ForegroundColor Cyan
Write-Host "Организация: $org" -ForegroundColor Cyan

# Ждём ответа пользователя #
Read-Host

Этот запрос вернёт в консоль данные о Вашем внешнем IP, перечисленные в блоке «Вывод данных«. Я сделал выгрузку только для географических данных адреса и его провайдере. При желании можно покопаться в документации сервиса и достать куда больше данных.

Как видно из скрипта, запрос к IP-API выглядит достаточно просто: http://ip-api.com/json/нужный IP. Всё, что нужно — это задать конкретный адрес.

В завершении отмечу, что заменив обращение к https://api.ipify.org/ на Read-Host, можно получить данные о заданном IP в PowerShell:

# Вводим IP адрес #
$myip = Read-Host "Введите IP"
Write-Host "IP: $myip" -ForegroundColor Cyan
Write-Host

# Данные о IP #
# https://ip-api.com/docs/api:json
$country = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).country
$region = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).regionName
$city = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).city
$timezone = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).timezone
$isp = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).isp
$org = (Invoke-WebRequest -Uri http://ip-api.com/json/$myip | ConvertFrom-Json).org

# Вывод данных #
Write-Host "Страна: $country" -ForegroundColor Cyan
Write-Host "Регион: $region" -ForegroundColor Cyan
Write-Host "Город: $city" -ForegroundColor Cyan
Write-Host "Часовой пояс: $timezone" -ForegroundColor Cyan
Write-Host "Провайдер: $isp" -ForegroundColor Cyan
Write-Host "Организация: $org" -ForegroundColor Cyan

# Ждём ответа пользователя #
Read-Host

Чуть не забыл! Есть ещё один интересный проект со свободным API — Coffee API. Сайт подбрасывает Вам случайную фотографию с кофе. В базе сайта 1257 картинок на кофейную тематику. Живите долго и созерцайте!