Comment obtenir le pays selon une certaine adresse IP?

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

0
Ne vous fiez pas trop à l'adresse IP qui vous indique le pays où l'utilisateur est assis: parce que je travaille pour une entreprise scandinave, je continue de voir des publicités en suédois, même si notre bureau est en Écosse ...
ajouté l'auteur AAT, source
Exactement - si vous y réfléchissez. Il y a beaucoup de cas où vous pouvez sembler venir de quelque part, mais venir réellement d'ailleurs. Tout cela est dû au fait que la topologie du réseau n'a pas besoin de confirmer aux frontières politiques ou géologiques. F.ex. VPN, sans fil, satellite et ainsi de suite.
ajouté l'auteur Phluks, source

14 Réponses

Here's a nice free service with a public API: http://www.hostip.info/use.html

0
ajouté

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 payante, mais Si vous êtes juste après quelque chose de simple, cela peut être suffisant.

0
ajouté
Le lien GeoLite ci-dessus résulte en un 404 quand j'ai vérifié aujourd'hui.
ajouté l'auteur Parag Magunia, source
Notre API de géolocalisation fonctionne également très bien: ip-api.io
ajouté l'auteur Andrey E, source
le lien de travail est dev.maxmind.com/geoip/geoip2/geolite2
ajouté l'auteur Manoj, source

Je ne sais pas à quel point le site hostip.info est précis. Je viens de visiter ce site, et il a signalé que mon pays est le Canada. Je suis aux États-Unis et le FAI que mon bureau utilise uniquement des États-Unis. Cela vous permet de le corriger, mais si vous utilisez ce service pour suivre les sites Web 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 Pays GeoLite, qui est juste un fichier .csv, et mon adresse IP a été correctement identifiée comme US.

Un autre avantage de la ligne de produits MaxMind (payante ou gratuite) est que vous avez les données, vous n'encourez pas le coup de performance de faire un appel de service Web à un autre système.

0
ajouté
Im au Royaume-Uni et il a dit que j'étais à Rio, au Brésil :)
ajouté l'auteur Mike, source

The most accurate is Digital Elements NetAcuity...not free but you get what you pay for most of the time....Digital Element

0
ajouté

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épendra de ce que vous construisez.

Pour les services:

Pour les listes:

0
ajouté
L'une des réponses les plus utiles en général que j'ai vu dans SO. Je vous remercie!
ajouté l'auteur tzot, source
Savez-vous peut-être si les RIR ont aussi des informations plus détaillées, comme la base de données geopipcity de maxmind, disponibles en données ouvertes? J'ai regardé, mais je ne l'ai pas trouvé
ajouté l'auteur Jevado, source

google's clientlocation returns (my example)

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

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

The API is pretty fast, with 10 global endpoints each able to handle >800M calls daily.

Voici un exemple de 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
    }
}?  
0
ajouté

Vous pouvez utiliser mon service, http://ipinfo.io , pour cela. 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 du pays, il vous suffit 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

I've used the IP 8.8.8.8 in these examples, but if you want details for the user's IP just pass in $_SERVER['REMOTE_ADDR'] instead. More details are available at http://ipinfo.io/developers

0
ajouté

You can try the free IP2Location LITE database

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 . "
"; echo "Country_name: " . $country_name . "
"; // 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
ajouté

ipinfodb provides a free database and API for IP to country and vice versa. They use free data from MaxMind. The data gets updated every month, and it's a great free alternative with decent accuracy.

0
ajouté
Bien mieux que de maintenir votre propre base de données. Juste testé sur un endroit vraiment obscur (Uthai Thani, Thaïlande) et c'était sur place. Super trouvaille, merci!
ajouté l'auteur Jannie Theunissen, source

Vous pouvez utiliser la solution fournie pour cette question .

Mais il renvoie un code de pays à 2 chiffres.

0
ajouté

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];?>
0
ajouté

use the function ipToCountry($ip) from http://www.mmtutorialvault.com/php-ip-to-country-function/

0
ajouté

vous pouvez utiliser les API de service Web qui fonctionnent comme:

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