Comment obtenir le pays selon une certaine IP?

quelqu'un connais un moyen simple de récupérer le pays d'une Adresse IP donnée? De préférence au format ISO_3166-1?

57
demandé sur Paul Ratazzi 2008-08-04 09:15:35

14 réponses

beaucoup de gens (y compris mon entreprise) semblent utiliser MaxMind GeoIP.

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

36
répondu Orion Edwards 2014-10-08 00:17:40

il y a deux approches: utiliser un service Internet et utiliser une sorte de liste locale (peut-être enveloppée dans une bibliothèque). Ce que vous voulez dépend de ce que vous construisez.

pour les services:

Pour les listes:

38
répondu Warren Blanchet 2017-05-23 12:26:00

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

10
répondu Mark Harrison 2008-08-04 05:21:59

ipinfodb fournit une base de données et API gratuite pour IP to country et vice versa. Ils utilisent des données gratuites de MaxMind. Les données sont mises à jour tous les mois, et c'est une excellente alternative gratuite avec une précision décente.

8
répondu Donny Kurnia 2013-05-25 13:54:58

Je ne sais pas si c'est exact. hostip.info site is. Je viens de visiter ce site, qui signale que mon pays est le Canada. Je suis aux États-Unis et le fournisseur D'accès internet que mon bureau utilise n'opère qu'à partir des États-Unis. Il ne vous permettre de corriger, c'est deviner, mais si vous utilisez ce service pour suivre le site web de visiteurs par pays, vous n'aurez aucun moyen de savoir si les données sont correctes. Bien sûr, je ne suis qu'un point de données. J'ai téléchargé La base de données de GeoLite Country, qui est juste une .fichier csv, et mon IP l'adresse a été correctement identifiée comme étant nous.

un autre avantage de la ligne de produits MaxMind (payé ou gratuit) est que vous avez les données, vous ne subissez pas le coup de performance de faire un appel de service web à un autre système.

5
répondu Chris Miller 2008-08-04 14:02:14

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

2
répondu CSharpAtl 2008-09-27 03:04:41

google clientlocation de revenus ( mon exemple )

latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;
2
répondu Niklas Rosencrantz 2010-01-13 13:25:21

vous pouvez utiliser la solution prévue pour cette question .

mais il renvoie un code de pays à deux chiffres.

2
répondu zak 2017-05-23 12:02:20

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];?>
2
répondu pckabeer 2012-07-30 08:07:35

vous pouvez utiliser mon service, http://ipinfo.io , pour ceci. L'API renvoie un tas de détails différents 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, vous avez juste besoin d'ajouter / country à L'URL:

$ curl ipinfo.io/8.8.8.8/country
US

Voici une fonction PHP générique que 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

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

2
répondu Ben Dowling 2014-08-26 04:49:49

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

1
répondu saifur 2013-06-27 17:54:01

vous pouvez utiliser les API de service web qui font ce travail comme:

see example of service: http://ip-api.com and usage: http://whatmyip.info
1
répondu user3463375 2014-05-28 12:57:32

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

L'API est assez rapide, avec 10 Paramètres globaux capables de traiter plus de 800 m d'appels par jour.

Voici un curl exemple;

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
    }
}⏎  
0
répondu Jonathan 2018-02-18 19:05:11

vous pouvez essayer le libre IP2Location LITE base de données

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 le 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);
 }
}
?>
0
répondu Vlam 2018-02-27 05:32:26