Как получить Страну по определенному IP? - PullRequest
58 голосов
/ 04 августа 2008

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

Ответы [ 14 ]

38 голосов
/ 15 сентября 2008

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

Для услуг:

Для списков:

36 голосов
/ 04 августа 2008

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

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

10 голосов
/ 04 августа 2008

Вот хороший бесплатный сервис с открытым API: http://www.hostip.info/use.html

8 голосов
/ 13 января 2010

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

5 голосов
/ 04 августа 2008

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

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

2 голосов
/ 26 августа 2014

Вы можете использовать мой сервис, 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

2 голосов
/ 30 июля 2012

Попробуйте этот 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];?>
2 голосов
/ 19 октября 2011

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

Но возвращается двухзначный код страны.

2 голосов
/ 13 января 2010

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;
2 голосов
/ 27 сентября 2008

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

...