Определение страны по ip-адресу
есть ли способ выяснить название страны, просто посмотрев на IP-адрес? Я имею в виду, есть ли у стран конкретные диапазоны IP-адресов? Например, Австралия может иметь IP-адреса только в диапазоне 123.45.56.89 - 231.54.65.98
(просто пример)
10 ответов
Я думаю, что вы ищете базу данных геолокации IP или поставщика услуг. Есть много там, и некоторые из них бесплатно (получить то, что вы платите за).
хотя я не использовал эту услугу раньше, она утверждает, что находится в режиме реального времени. https://kickfire.com/kf-api
но просто сделайте поиск google на IP geo, и вы получите больше результатов, чем вам нужно.
нет, вы не можете - IP-адреса перераспределяются и переназначаются время от времени, поэтому отображение IP в местоположение также будет меняться с течением времени.
Если вы хотите узнать местоположение, которое в настоящее время отображает IP-адрес, вы можете загрузить базу данных геолокации, такую как от MaxMind GeoLite от, или использовать API, как http://ipinfo.io (мой собственный сервис), который также даст вам дополнительные сведения:
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "California",
"country": "US",
"phone": 650
}
Это не так просто. IP-адреса назначаются не странам как таковым, а компаниям и организациям.
но, может быть, это может помочь вам:http://www.maxmind.com/app/geolitecountry
вы можете попробовать использовать https://ip-api.io - Geo location api, который возвращает страну среди другой информации IP.
например, с узлом.js
const request = require('request-promise')
request('http://ip-api.io/api/json/1.2.3.4')
.then(response => console.log(JSON.parse(response)))
.catch(err => console.log(err))
можно использовать ipdata.со выполнить поиск
этот ответ использует "тестовый" ключ API, который очень ограничен и предназначен только для тестирования нескольких вызовов. Регистрация для вашего собственного бесплатного ключа API и получите до 1500 запросов ежедневно для разработки.
curl https://api.ipdata.co/23.221.76.66?api-key=test
Ipdata имеет 10 конечных точек по всему миру, каждая из которых способна обрабатывать >10 000 запросов в секунду!
дает
{
"ip": "23.221.76.66",
"city": "Cambridge",
"region": "Massachusetts",
"region_code": "MA",
"country_name": "United States",
"country_code": "US",
"continent_name": "North America",
"continent_code": "NA",
"latitude": 42.3626,
"longitude": -71.0843,
"asn": "AS20940",
"organisation": "Akamai International B.V.",
"postal": "02142",
"calling_code": "1",
"flag": "https://ipdata.co/flags/us.png",
"emoji_flag": "\ud83c\uddfa\ud83c\uddf8",
"emoji_unicode": "U+1F1FA U+1F1F8",
"is_eu": false,
"languages": [
{
"name": "English",
"native": "English"
}
],
"currency": {
"name": "US Dollar",
"code": "USD",
"symbol": "$",
"native": "$",
"plural": "US dollars"
},
"time_zone": {
"name": "America/New_York",
"abbr": "EDT",
"offset": "-0400",
"is_dst": true,
"current_time": "2018-04-19T06:32:30.690963-04:00"
},
"threat": {
"is_tor": false,
"is_proxy": false,
"is_anonymous": false,
"is_known_attacker": false,
"is_known_abuser": false,
"is_threat": false,
"is_bogon": false
}
}⏎
может быть эти две ссылки может помочь вам связать IP-адреса со странами
Я согласен с приведенными выше ответами, лучший способ получить страну с ip-адреса-Maxmind.
Если вы хотите написать код на java, вы можете использовать, например, geoip-api-1.2.10.файлы jar и geoIP dat (GeoIPCity.dat), который можно найти через google.
следующий код может быть полезным для вас, чтобы получить почти всю информацию, связанную с местоположением, я также использую тот же код.
public static String getGeoDetailsUsingMaxmind(String ipAddress, String desiredValue)
{
Location getLocation;
String returnString = "";
try
{
String geoIPCity_datFile = System.getenv("AUTOMATION_HOME").concat("/tpt/GeoIP/GeoIPCity.dat");
LookupService isp = new LookupService(geoIPCity_datFile);
getLocation = isp.getLocation(ipAddress);
isp.close();
//Getting all location details
if(desiredValue.equalsIgnoreCase("latitude") || desiredValue.equalsIgnoreCase("lat"))
{
returnString = String.valueOf(getLocation.latitude);
}
else if(desiredValue.equalsIgnoreCase("longitude") || desiredValue.equalsIgnoreCase("lon"))
{
returnString = String.valueOf(getLocation.longitude);
}
else if(desiredValue.equalsIgnoreCase("countrycode") || desiredValue.equalsIgnoreCase("country"))
{
returnString = getLocation.countryCode;
}
else if(desiredValue.equalsIgnoreCase("countryname"))
{
returnString = getLocation.countryName;
}
else if(desiredValue.equalsIgnoreCase("region"))
{
returnString = getLocation.region;
}
else if(desiredValue.equalsIgnoreCase("metro"))
{
returnString = String.valueOf(getLocation.metro_code);
}
else if(desiredValue.equalsIgnoreCase("city"))
{
returnString = getLocation.city;
}
else if(desiredValue.equalsIgnoreCase("zip") || desiredValue.equalsIgnoreCase("postalcode"))
{
returnString = getLocation.postalCode;
}
else
{
returnString = "";
System.out.println("There is no value found for parameter: "+desiredValue);
}
System.out.println("Value of: "+desiredValue + " is: "+returnString + " for ip address: "+ipAddress);
}
catch (Exception e)
{
System.out.println("Exception occured while getting details from max mind. " + e);
}
finally
{
return returnString;
}
}
сеть доставки контента CloudFront Amazon теперь можно настроить для передачи этой информации в качестве заголовка. Учитывая размер Amazon (они большие и стабильные, никуда не денутся), и это конфигурация по коду (нет стороннего API для изучения или кода для обслуживания), все вокруг считают это лучшим вариантом.
Если вы не используете AWS CloudFront, я бы посмотрел, есть ли у вашего CDN аналогичный параметр заголовка, который можно включить. Обычно крупные поставщики быстро нажмите для четности функций. И если вы не используете CDN, вы можете поместить CloudFront перед своей инфраструктурой и просто установить origin для разрешения того, что вы используете в настоящее время.
кроме того, имеет смысл разрешить это на уровне CDN. Ваш CDN уже должен выяснить географическое местоположение для маршрутизации пользователя к ближайшему узлу контента, а также передать эту информацию и не выяснить это дважды через сторонний API (это становится chokepoint для ваше приложение, ожидая гео поиска местоположения, чтобы решить). Нет необходимости делать эту работу дважды (и во второй раз, возможно, менее устойчивым [например, 3rd party Geo lookup]).
https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/
Гео-Таргетинг – CloudFront определит страну происхождения пользователя и передайте код округа вам в
CloudFront-Viewer-Country
заголовок. Эту информацию можно использовать для настройки ответы без использования URL-адресов, специфичных для каждой страны.
IP-адреса довольно часто используются для геотаргетинга, т. е. настройки содержимого веб-сайта по местоположению / стране посетителя, но они не постоянно связаны со страной и часто переуступаются.
чтобы выполнить то, что вы хотите, вам нужно держать в курсе поиска для сопоставления IP-адреса в страну либо с базой данных или геолокации API. Вот пример :
> https://ipapi.co/8.8.8.8/country
US
> https://ipapi.co/8.8.8.8/country_name
United States
или вы можете использовать полный API, чтобы получить полный расположение для IP-адреса например
https://ipapi.co/8.8.8.8/json
{
"ip": "8.8.8.8",
"city": "Mountain View",
"region": "California",
"region_code": "CA",
"country": "US",
"country_name": "United States",
"continent_code": "NA",
"postal": "94035",
"latitude": 37.386,
"longitude": -122.0838,
"timezone": "America/Los_Angeles",
"utc_offset": "-0800",
"country_calling_code": "+1",
"currency": "USD",
"languages": "en-US,es-US,haw,fr",
"asn": "AS15169",
"org": "Google Inc."
}
Да, вы можете скачать диапазоны IP-адресов по странам изhttps://lite.ip2location.com/ip-address-ranges-by-country
вы можете видеть, что каждая страна имеет несколько диапазонов и часто меняется.