locator - ¿Cómo obtener el país de acuerdo con una determinada IP?
ip2location free (14)
Aquí hay un buen servicio gratuito con una API pública: http://www.hostip.info/use.html
¿Alguien sabe de una manera simple de recuperar el país para una dirección IP determinada? Preferiblemente en formato ISO_3166-1?
El más preciso es Digital Elements NetAcuity ... no es gratuito pero obtienes lo que pagas la mayor parte del tiempo ... Elemento digital
Hay dos enfoques: usar un servicio de Internet y usar algún tipo de lista local (quizás envuelta en una biblioteca). Lo que quieras dependerá de lo que estés construyendo.
Para servicios:
- http://www.hostip.info/use.html (como lo menciona Mark )
- http://www.team-cymru.org/Services/ip-to-asn.html
Para listas:
- http://www.maxmind.com/app/geoip_country (como lo menciona Orion )
-
Puede rodar el suyo descargando las listas de los RIR:
- ftp.arin.net/pub/stats/arin/delegated-arin-latest
- ftp.ripe.net/ripe/stats/delegated-ripencc-latest
- ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
- ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
-
ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
El formato está documentado en este README
Muchas personas (incluida mi empresa) parecen usar MaxMind GeoIP.
Tienen una versión gratuita GeoLite que no es tan precisa como la versión paga, pero si solo buscas algo simple, puede ser lo suficientemente bueno.
No sé qué tan exacto es ese sitio hostip.info. Acabo de visitar ese sitio e informó que mi país es Canadá. Estoy en los EE. UU. Y el ISP que usa mi oficina solo opera desde los EE. UU. Le permite corregir su suposición, pero si está utilizando este servicio para rastrear a los visitantes del sitio web por país, no tendrá forma de saber si los datos son correctos. Por supuesto, solo soy un punto de datos. Descargué la base de datos GeoLite Country, que es solo un archivo .csv, y mi dirección IP se identificó correctamente como EE. UU.
Otro beneficio de la línea de productos MaxMind (de pago o gratuito) es que tiene los datos, no incurre en el impacto del rendimiento de realizar una llamada de servicio web a otro sistema.
Prueba este código 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];?>
Puede probar la base de datos gratuita IP2Location LITE
Para crear la tabla en 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;
Para importar los datos
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;
Código PHP para consultar el 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);
}
}
?>
Puede usar la solución provista para esta pregunta .
Pero devuelve un código de país de 2 dígitos.
Puede usar mi servicio, http://ipinfo.io , para esto. La API devuelve un montón de detalles diferentes sobre una dirección 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 solo busca el código de país, solo necesita agregar / país a la URL:
$ curl ipinfo.io/8.8.8.8/country
US
Aquí hay una función genérica de PHP que podría usar:
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
He usado la IP 8.8.8.8 en estos ejemplos, pero si desea detalles para la IP del usuario, simplemente pase
$_SERVER[''REMOTE_ADDR'']
lugar.
Más detalles están disponibles en
http://ipinfo.io/developers
Vea ipdata.co que le brinda varios puntos de datos desde una dirección IP.
La API es bastante rápida, con 10 puntos finales globales, cada uno capaz de manejar> 800 millones de llamadas diarias.
Aquí hay un ejemplo de rizo;
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
}
}⏎
devuelve google''s ubicación google''s cliente google''s ( mi ejemplo )
latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;
puede usar API de servicios web que hacen esto como:
see example of service: http://ip-api.com and usage: http://whatmyip.info
use la función ipToCountry ($ ip) de http://www.mmtutorialvault.com/php-ip-to-country-function/
ipinfodb proporciona una base de datos gratuita y API para IP al país y viceversa. Usan datos gratuitos de MaxMind. Los datos se actualizan cada mes, y es una excelente alternativa gratuita con una precisión decente.