tracker locator ip2location google geobytes detector address ip lookup country

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:

Para listas:


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



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.