Comment obtenir le pays selon un certain IP?

voix
57

Est-ce que quelqu'un sait d'un moyen simple de récupérer le pays pour une adresse IP donnée? De préférence au format ISO_3166-1?

Créé 04/08/2008 à 06:15
source utilisateur
Dans d'autres langues...                            


14 réponses

voix
38

Il existe deux approches: l'utilisation d'un service Internet et en utilisant une sorte de liste locale (peut-être enveloppé dans une bibliothèque). Ce que vous voulez dépendra de ce que vous construisez.

Pour les services:

Pour les listes:

Créé 15/09/2008 à 20:45
source utilisateur

voix
35

Beaucoup de gens (y compris ma compagnie) semblent utiliser MaxMind GeoIP.

Ils ont une version gratuite GeoLite qui n'est pas aussi précis que la version payante, mais si vous êtes juste après quelque chose de simple, il peut être assez bon.

Créé 04/08/2008 à 07:26
source utilisateur

voix
10

Voici un joli service gratuit avec une API publique: http://www.hostip.info/use.html

Créé 04/08/2008 à 06:21
source utilisateur

voix
8

ipinfodb fournit une base de données libre et API pour IP pays et vice versa. Ils utilisent des données libres de MaxMind. Les données est mise à jour tous les mois, et il est une alternative libre avec bonne précision.

Créé 13/01/2010 à 14:13
source utilisateur

voix
5

Je ne sais pas comment précise ce site est hostip.info. Je viens de ce site ai visité, et il a rendu compte que mon pays est le Canada. Je suis aux Etats-Unis et le fournisseur de services Internet que mon bureau utilise ne fonctionne que des États-Unis. Il ne vous permet de corriger c'est deviner, mais si vous utilisez ce service pour suivre site web vistors par pays, vous aurez aucun moyen de savoir si les données sont correctes. Bien sûr, je suis juste un point de données. J'ai téléchargé la base de données Pays GeoLite, qui est juste un fichier .csv et mon adresse IP a été correctement identifié comme États-Unis.

Un autre avantage de la gamme de produits MaxMind (payant ou gratuit) est que vous avez les données, vous ne pas encourir le coup de la performance de faire un appel de service Web à un autre système.

Créé 04/08/2008 à 15:02
source utilisateur

voix
2

Vous pouvez utiliser mon service, http://ipinfo.io , pour cela. L'API retourne un tas de différents détails sur une adresse 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
}

Si vous êtes seulement après le code de pays que vous avez juste besoin d'ajouter / pays à l'URL:

$ curl ipinfo.io/8.8.8.8/country
US

Voici une fonction PHP générique, vous pouvez utiliser:

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

Je l' ai utilisé l'IP 8.8.8.8 dans ces exemples, mais si vous voulez des détails pour passer juste l'IP de l'utilisateur à la $_SERVER['REMOTE_ADDR']place. Plus de détails sont disponibles à http://ipinfo.io/developers

Créé 26/08/2014 à 05:49
source utilisateur

voix
2

Essayez ce code 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];?>
Créé 30/07/2012 à 09:07
source utilisateur

voix
2

Vous pouvez utiliser la solution prévue à cette question .

Mais il renvoie un code de pays à 2 chiffres.

Créé 19/10/2011 à 15:04
source utilisateur

voix
2

Google déclarations de clientlocation ( mon exemple )

latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;
Créé 13/01/2010 à 14:25
source utilisateur

voix
2

Le plus précis est Digital Elements NetAcuity ... pas gratuit , mais vous obtenez ce que vous payez pour la plupart du temps .... élément numérique

Créé 27/09/2008 à 04:04
source utilisateur

voix
1

vous pouvez utiliser l'API de service Web de qui faire ce travail comme:

see example of service: http://ip-api.com and usage: http://whatmyip.info
Créé 26/05/2014 à 15:59
source utilisateur

voix
1

utilisez la fonction ipToCountry (IP de $) de http://www.mmtutorialvault.com/php-ip-to-country-function/

Créé 27/06/2013 à 18:54
source utilisateur

voix
0

Vous pouvez essayer la libre base de données IP2Location LITE

Pour créer la table dans MySQL

CREATE DATABASE ip2location;
USE ip2location;
CREATE TABLE `ip2location_db1`(
    `ip_from` INT(10) UNSIGNED,
    `ip_to` INT(10) UNSIGNED,
    `country_code` CHAR(2),
    `country_name` VARCHAR(64),
    INDEX `idx_ip_to` (`ip_to`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Pour importer les données

LOAD DATA LOCAL
    INFILE 'IP2LOCATION-LITE-DB1.CSV'
INTO TABLE
    `ip2location_db1`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 0 LINES;

Code PHP pour interroger MySQL

<?php
// Replace this MYSQL server variables with actual configuration
$mysql_server = "mysql_server.com";
$mysql_user_name = "UserName";
$mysql_user_pass = "Password";

// Retrieve visitor IP address from server variable REMOTE_ADDR
$ipaddress = $_SERVER["REMOTE_ADDR"];

// Convert IP address to IP number for querying database
$ipno = Dot2LongIP($ipaddress);

// Connect to the database server
$link = mysql_connect($mysql_server, $mysql_user_name, $mysql_user_pass) or die("Could not connect to MySQL database");

// Connect to the IP2Location database
mysql_select_db("ip2location") or die("Could not select database");

// SQL query string to match the recordset that the IP number fall between the valid range
$query = "SELECT * FROM ip2location_db1 WHERE $ipno <= ip_to LIMIT 1";

// Execute SQL query
$result = mysql_query($query) or die("IP2Location Query Failed");

// Retrieve the recordset (only one)
$row = mysql_fetch_object($result);

// Keep the country information into two different variables
$country_code = $row->country_code;
$country_name = $row->country_name;

echo "Country_code: " . $country_code . "<br/>";
echo "Country_name: " . $country_name . "<br />";

// Free recordset and close database connection
mysql_free_result($result);
mysql_close($link);

// Function to convert IP address (xxx.xxx.xxx.xxx) to IP number (0 to 256^4-1)
function Dot2LongIP ($IPaddr) {
 if ($IPaddr == "")
 {
   return 0;
 } else {
   $ips = explode(".", $IPaddr);
   return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256);
 }
}
?>
Créé 27/02/2018 à 05:32
source utilisateur

voix
0

Voir ipdata.co qui vous donne plusieurs points de données à partir d' une adresse IP.

L'API est assez rapide, avec 10 points d'extrémité globaux chacun capable de gérer> 800M appels par jour.

Voici un exemple boucle;

curl https://api.ipdata.co/78.8.53.5
{
    "ip": "78.8.53.5",
    "city": "G\u0142og\u00f3w",
    "region": "Lower Silesia",
    "region_code": "DS",
    "country_name": "Poland",
    "country_code": "PL",
    "continent_name": "Europe",
    "continent_code": "EU",
    "latitude": 51.6461,
    "longitude": 16.1678,
    "asn": "AS12741",
    "organisation": "Netia SA",
    "postal": "67-200",
    "currency": "PLN",
    "currency_symbol": "z\u0142",
    "calling_code": "48",
    "flag": "https://ipdata.co/flags/pl.png",
    "emoji_flag": "\ud83c\uddf5\ud83c\uddf1",
    "time_zone": "Europe/Warsaw",
    "is_eu": true,
    "suspicious_factors": {
        "is_tor": false
    }
}⏎  
Créé 18/02/2018 à 19:05
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more