¿Alguien sabe de una manera simple de recuperar el país para una dirección IP dada? Preferiblemente en formato ISO_3166-1?¿Cómo obtener el país según una determinada IP?
Respuesta
Una gran cantidad de personas (incluyendo a mi compañía) parecen utilizar MaxMind GeoIP.
Tienen una versión gratuita GeoLite que no es tan precisa como la versión de pago, pero si buscas algo simple, puede ser suficiente.
El enlace GeoLite de arriba da como resultado un 404 cuando revisé hoy. –
enlace de trabajo es http://dev.maxmind.com/geoip/geoip2/geolite2/ – Manoj
Nuestra aplicación de ubicación geográfica también funcionará bien: https: // ip-api.io –
Aquí es un servicio gratuito agradable con una API pública: http://www.hostip.info/use.html
No sé qué tan preciso es el 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 de los beneficios de la línea de productos MaxMind (de pago o gratis) es que usted tiene los datos, no incurre en el impacto de rendimiento de realizar una llamada de servicio web a otro sistema.
Im en el Reino Unido y dijo que estaba en Río, Brasil :) – Mike
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 servicios:
- http://www.hostip.info/use.html (como se ha mencionado por Mark)
- http://www.team-cymru.org/Services/ip-to-asn.html
Para listas:
- http://www.maxmind.com/app/geoip_country (como se ha mencionado por Orion)
Se podría rodar su propia mediante la descarga de 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 in this README
La más precisa es Digital Elements NetAcuity ... no es libre, pero se obtiene lo que paga la mayor parte del tiempo .... Digital Element
ipinfodb proporciona una base de datos y API gratuita para IP a país y viceversa. Usan datos gratuitos de MaxMind. Los datos se actualizan todos los meses, y es una gran alternativa gratuita con una precisión decente.
Mucho mejor que mantener tu propia base de datos. Acabo de probarlo en un lugar realmente oscuro (Uthai Thani, Tailandia) y fue perfecto. Gran hallazgo, gracias! –
google's vuelve clientlocation (my example)
latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;
Se pueden utilizar la solución prevista this question.
Pero devuelve un código de país de 2 dígitos.
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];?>
utilizar la función ipToCountry ($ ip) de http://www.mmtutorialvault.com/php-ip-to-country-function/
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
Puede use mi servicio, http://ipinfo.io, para esto. La API devuelve un montón de diferentes detalles 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 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í hay una PHP función genérica que puede 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 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']
lugar. Más detalles están disponibles en http://ipinfo.io/developers
Ver ipdata.co que le da varios puntos de datos de una dirección IP.
La API es bastante rápida, con 10 puntos finales globales, cada uno capaz de manejar> 800M llamadas diarias.
Aquí hay un ejemplo de curl;
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
}
}⏎
Puede probar el libre IP2Location LITE database
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);
}
}
?>
- 1. cómo redirigir el dominio según el país dirección de IP
- 2. IP al país - IPv6
- 3. Obtener estados Lista de estados según el país seleccionado
- 4. Obtener el país de la dirección IP con PHP
- 5. Cómo determinar si una dirección IP pertenece a un país
- 6. ¿Cómo obtener el código de país y el código de moneda por dirección IP?
- 7. Cómo obtener el nombre del país
- 8. País de identificación por dirección IP
- 9. ¿Es posible tener compatibilidad múltiple con APK según el país?
- 10. conseguir visitantes de su país IP
- 11. Obtener la ubicación del país de una dirección IP con PHP nativo
- 12. Obtener el país desde las coordenadas?
- 13. Obtener el país de latitud longitud
- 14. Obtener zona horaria por país y región
- 15. Facebook Graph API: cómo obtener el país de usuario?
- 16. php cómo obtener el separador decimal/mil actual para una localidad determinada
- 17. ¿Cómo obtener la dirección IP?
- 18. ¿Puedo prohibir o restringir un país basado en IP?
- 19. Obtener el código de país del nombre del país en IOS
- 20. API para obtener el país, el estado y la ciudad
- 21. ¿Es posible cambiar el nombre de visualización del paquete según el país?
- 22. Python - Obtener localhost IP
- 23. obtener el sitio web ip usando php
- 24. Precisión de accept_language para detectar el país
- 25. ¿Cómo obtener el proyecto de SourceSafe de una versión antes de una fecha determinada?
- 26. Cómo centrar un mapa de Google en un país si solo tiene el nombre del país
- 27. ¿Cómo obtener dirección IP local usando vb?
- 28. Dirección de codificación geográfica: obtener el distrito de una determinada dirección (Google API)
- 29. Obteniendo la puerta de enlace para usar para una IP determinada en ANSI C
- 30. Cómo obtener la dirección IP de una máquina en C#
No confíe demasiado en el IP que le indica el país donde está sentado el usuario: porque trabajo para una empresa escandinava, sigo viendo anuncios en sueco, aunque nuestra oficina se encuentra en Escocia ... – AAT
Exactamente - si tú lo piensas. Hay muchos casos en los que puede parecer que proviene de algún lugar, pero en realidad provienen de otro lugar. Todo se debe al hecho de que la topología de red no tiene que confirmarse a fronteras políticas o geológicas. F.ex. VPN's, inalámbricos, satelitales, etc. – Phluks