Руководство по определению местоположения IP в JavaScript
Получите местоположение одного IP-адреса из браузера или Node.js.
Поиск IP-адреса в JavaScript
Запрос принимает один адрес IPv4 или IPv6 и запрашивает JSON. Замените адрес из примера на тот, который нужно исследовать.
const ip = '8.8.8.8'; // Replace with an IPv4 or IPv6 address.
const response = await fetch(
'https://api.ipquery.io/' + encodeURIComponent(ip) + '?format=json',
{ signal: AbortSignal.timeout(8000) }
);
if (!response.ok) throw new Error('IPQuery returned HTTP ' + response.status);
const data = await response.json();
if (data.ip !== ip || !data.location || !data.isp) {
throw new Error('Unexpected IPQuery response');
}
console.log(data.location.country, data.location.city, data.isp.asn);Запускайте пример в современном браузере или Node.js с поддержкой fetch и AbortSignal.timeout. Запрос из браузера определяет указанный вами адрес; эндпоинт собственного IP определяет адрес соединения браузера.
Чтение полей местоположения и сети
location.country и location.country_code указывают приблизительную страну. location.city может быть пустым или неточным. isp.asn идентифицирует сеть, которая может не совпадать с человеком или компанией, использующими адрес.
Чтобы получить адрес, с которого выполняется запрос, вызовите https://api.ipquery.io/?format=json. Запрос с сервера возвращает IP, с которого сервер устанавливает соединение; запрос из браузера возвращает видимый извне адрес его соединения.
Использование IPQuery в Dashy
Виджет Public IP в Dashy поддерживает IPQuery без ключа API. Добавьте эту запись в список widgets одного из разделов Dashy:
- type: public-ip
options:
provider: ipqueryЕсли настройки прокси в Dashy отключены, запрос отправляет браузер, а виджет показывает публичный IP и приблизительное местоположение этого соединения. Установка useProxy: true на верхнем уровне виджета или включение appConfig.widgetsAlwaysUseProxy направляет запрос через сервер Dashy, и вместо IP браузера отображается публичный IP сервера. Установка useProxy: false на верхнем уровне виджета не переопределяет настройку для всей панели.
Виджет использует эндпоинт собственного IP в IPQuery. Чтобы исследовать другой адрес, используйте приведённый выше JavaScript-запрос для одного IP.
Настройки виджета Public IP в DashyТочность и безопасность
IP-геолокация оценивает местоположение сети, а не устройства. VPN, прокси, мобильные сети и шлюзы операторов могут приводить к определению адреса далеко от пользователя. Считайте отсутствующие значения неизвестными, а не заполняйте их догадками.
Если приложение читает X-Forwarded-For, доверяйте ему только тогда, когда его передаёт контролируемый вами прокси. Заголовки, переданные клиентом, можно подделать. Проверяйте адреса перед выполнением запросов и обрабатывайте тайм-ауты и ошибки HTTP отдельно от успешного результата.
Справочник API