¿Cómo obtener el país según una determinada IP?

votos
57

¿Alguien sabe de una manera simple de recuperar el país para una dirección IP dada? Preferiblemente en formato ISO_3166-1?

Publicado el 04/08/2008 a las 06:15
fuente por usuario
En otros idiomas...                            


14 respuestas

votos
38

Hay dos enfoques: usar un servicio de Internet y usar algún tipo de lista local (tal vez envuelto en una biblioteca). Lo que quieras dependerá de lo que estás construyendo.

Para los servicios:

Para listas:

Respondida el 15/09/2008 a las 20:45
fuente por usuario

votos
35

Mucha gente (incluida mi empresa) parece usar MaxMind GeoIP.

Tienen una versión gratuita de GeoLite que no es tan precisa como la versión de pago, pero si buscas algo simple, puede ser suficiente.

Respondida el 04/08/2008 a las 07:26
fuente por usuario

votos
10

Aquí hay un buen servicio gratuito con una API pública: http://www.hostip.info/use.html

Respondida el 04/08/2008 a las 06:21
fuente por usuario

votos
8

ipinfodb proporciona una base de datos libre y API para IP a otro y viceversa. Utilizan datos libres de MaxMind. Los datos se actualiza cada mes, y que es una gran alternativa libre con una precisión digna.

Respondida el 13/01/2010 a las 14:13
fuente por usuario

votos
5

No sé qué tan preciso es ese sitio hostip.info. Acabo de visitar ese sitio e informó que mi país es Canadá. Estoy en EE. UU. Y el ISP que mi oficina usa solo opera desde los EE. UU. Le permite corregirlo, pero si usa este servicio para rastrear visitantes de sitios 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 US.

Otro beneficio de la línea de productos MaxMind (pagada o gratuita) es que usted tiene los datos, no incurre en el impacto en el rendimiento de realizar una llamada de servicio web a otro sistema.

Respondida el 04/08/2008 a las 15:02
fuente por usuario

votos
2

Puede usar mi servicio, http://ipinfo.io , para esto. La API devuelve un montón de diferentes detalles acerca de 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 estás sólo después de que el código de país sólo tiene que añadir / país a la URL:

$ curl ipinfo.io/8.8.8.8/country
US

Aquí está una función PHP genérico que podría utilizar:

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 utilizado el IP 8.8.8.8 en estos ejemplos, pero si quieres detalles de IP del usuario sólo tiene que pasar en $_SERVER['REMOTE_ADDR']su lugar. Más detalles están disponibles en http://ipinfo.io/developers

Respondida el 26/08/2014 a las 05:49
fuente por usuario

votos
2

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];?>
Respondida el 30/07/2012 a las 09:07
fuente por usuario

votos
2

Se puede utilizar la solución aportada por esta pregunta .

Pero devuelve un código de país de 2 dígitos.

Respondida el 19/10/2011 a las 15:04
fuente por usuario

votos
2

de Google vuelve clientlocation ( mi ejemplo )

latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;
Respondida el 13/01/2010 a las 14:25
fuente por usuario

votos
2

Lo más preciso es Digital Elements NetAcuity ... no gratis, pero obtienes lo que pagas la mayor parte del tiempo ... Elemento digital

Respondida el 27/09/2008 a las 04:04
fuente por usuario

votos
1

puede utilizar la API de servicios web que hacen este trabajo como:

see example of service: http://ip-api.com and usage: http://whatmyip.info
Respondida el 26/05/2014 a las 15:59
fuente por usuario

votos
1

utilizar la función ipToCountry ($ ip) de http://www.mmtutorialvault.com/php-ip-to-country-function/

Respondida el 27/06/2013 a las 18:54
fuente por usuario

votos
0

Usted puede probar la conexión de base de datos 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);
 }
}
?>
Respondida el 27/02/2018 a las 02:32
fuente por usuario

votos
0

Ver ipdata.co que le da varios puntos de datos desde una dirección IP.

El API es bastante rápido, con 10 puntos finales globales cada uno capaz de manejar> 800M llama todos los días.

He aquí un ejemplo 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
    }
}⏎  
Respondida el 18/02/2018 a las 16:05
fuente por usuario

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