Как получить страну в соответствии с определенным IP-адресом?

Кто-нибудь знает простой способ получить страну для данного IP-адреса? Предпочтительно в формате ISO_3166-1?

Ответ 1

Многие люди (включая мою компанию), похоже, используют MaxMind GeoIP.

У них есть бесплатная версия GeoLite, которая не так точна, как платная версия, но если вы просто после чего-то простого, он может быть достаточно хорошим.

Ответ 2

Существует два подхода: использование интернет-сервиса и использование какого-либо локального списка (возможно, завернутого в библиотеку). То, что вы хотите, будет зависеть от того, что вы строите.

Для служб:

Для списков:

Ответ 4

ipinfodb предоставляет бесплатную базу данных и API для IP для страны и наоборот. Они используют бесплатные данные от MaxMind. Данные обновляются каждый месяц, и это отличная бесплатная альтернатива с достойной точностью.

Ответ 5

Я не знаю, насколько точным является сайт hostip.info. Я просто открыл этот сайт, и он сообщил, что моя страна - Канада. Я нахожусь в США и интернет-провайдере, который работает в моем офисе только из США. Это позволяет вам исправить это, но если вы используете эту службу для отслеживания веб-сайтов по странам, вы не сможете узнать, правильны ли данные. Конечно, я всего лишь одна точка данных. Я загрузил базу данных GeoLite Country, которая является только CSV файлом, и мой IP-адрес был правильно идентифицирован как US.

Другим преимуществом линейки продуктов MaxMind (платной или бесплатной) является то, что у вас есть данные, вы не подвергаетесь удару производительности при вызове веб-службы в другую систему.

Ответ 6

Наиболее точным является Digital Elements NetAcuity... не бесплатно, но вы получаете то, что платите большую часть времени.... Digital Element

Ответ 7

google's clientlocation возвращает (мой пример)

latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;

Ответ 8

Вы можете использовать решение, предоставленное для этого вопроса.

Но он возвращает 2-значный код страны.

Ответ 9

Попробуйте этот php-код

  <?php  $ip = $_SERVER['REMOTE_ADDR'];
    $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
    $json = json_decode($json,true);
    $timezone = $json[localTimeZone];?>

Ответ 10

Для этого вы можете использовать мой сервис http://ipinfo.io. API возвращает целую кучу разных сведений об IP-адресе:

$ 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": "CA",
  "country": "US",
  "phone": 650
}

Если вы только после кода страны вам просто нужно добавить/страну в URL-адрес:

$ curl ipinfo.io/8.8.8.8/country
US

Вот общая функция PHP, которую вы могли бы использовать:

function ip_details($ip) {
    $json = file_get_contents("http://ipinfo.io/{$ip}");
    $details = json_decode($json);
    return $details;
}

$details = ip_details("8.8.8.8");

echo $details->city;     // => Mountain View
echo $details->country;  // => US
echo $details->org;      // => AS15169 Google Inc.
echo $details->hostname; // => google-public-dns-a.google.com

Я использовал IP 8.8.8.8 в этих примерах, но если вы хотите, чтобы данные для IP-адреса пользователя передавались только в $_SERVER['REMOTE_ADDR']. Более подробную информацию можно найти на http://ipinfo.io/developers

Ответ 12

вы можете использовать API веб-сервиса, который выполняет следующие действия:

see example of service: http://ip-api.com and usage: http://whatmyip.info