2012-03-21 21 views
29

¿Hay alguna forma de averiguar el nombre del país con solo mirar una dirección IP? Quiero decir, ¿los países tienen rangos específicos de direcciones IP? Por ejemplo, Australia puede tener direcciones IP solo en el rango de 123.45.56.89 - 231.54.65.98 (solo un ejemplo)País de identificación por dirección IP

+0

¿Qué desea hacer exactamente y en qué plataforma? –

+0

@ntidote Quiero redirigir al usuario al sitio específico del país al detectar la dirección IP del usuario. C# .NET – skos

+0

La pregunta ha sido discutida anteriormente. http://stackoverflow.com/questions/1270091/how-to-determine-if-an-ip-address-belongs-to-a-country –

Respuesta

13

Creo que lo que estás buscando es una base de datos o servicio IP Geolocalización proveedor. Hay muchos por ahí y algunos son gratuitos (obtenga lo que paga).

Aunque no he usado este servicio anteriormente, dice que es en tiempo real. https://kickfire.com/kf-api

Pero solo haga una búsqueda en Google sobre geo IP y obtendrá más resultados de los que necesita.

+0

Geoio acaba de ser adquirido por http://www.netimpact.com/ –

18

No, no es posible: las direcciones IP se reasignan y reasignan de vez en cuando, por lo que la asignación de IP a la ubicación también cambiará con el tiempo.

Si desea conocer la ubicación que actualmente tiene asignada una dirección IP, puede descargar una base de datos de geolocalización, como GeoLite from MaxMind, o utilizar una API como http://ipinfo.io (mi propio servicio) que también le proporcionará detalles adicionales:

$ 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": "California", 
    "country": "US", 
    "phone": 650 
} 
0

Acepto las respuestas anteriores, la mejor manera de obtener el país desde la dirección IP es Maxmind.

Si desea escribir código en java, es posible que desee utilizar, por ejemplo, geoip-api-1.2.10.jar y geoIP dat (GeoIPCity.dat), que se pueden encontrar a través de google.

El siguiente código puede ser útil para obtener casi toda la información relacionada con la ubicación, también estoy usando el mismo código.

public static String getGeoDetailsUsingMaxmind(String ipAddress, String desiredValue) 
    { 
     Location getLocation; 
     String returnString = ""; 
     try 
     { 
      String geoIPCity_datFile = System.getenv("AUTOMATION_HOME").concat("/tpt/GeoIP/GeoIPCity.dat"); 
      LookupService isp = new LookupService(geoIPCity_datFile); 
      getLocation = isp.getLocation(ipAddress); 
      isp.close(); 

      //Getting all location details 
      if(desiredValue.equalsIgnoreCase("latitude") || desiredValue.equalsIgnoreCase("lat")) 
      { 
       returnString = String.valueOf(getLocation.latitude); 
      } 
      else if(desiredValue.equalsIgnoreCase("longitude") || desiredValue.equalsIgnoreCase("lon")) 
      { 
       returnString = String.valueOf(getLocation.longitude); 
      } 
      else if(desiredValue.equalsIgnoreCase("countrycode") || desiredValue.equalsIgnoreCase("country")) 
      { 
       returnString = getLocation.countryCode; 
      } 
      else if(desiredValue.equalsIgnoreCase("countryname")) 
      { 
       returnString = getLocation.countryName; 
      } 
      else if(desiredValue.equalsIgnoreCase("region")) 
      { 
       returnString = getLocation.region; 
      } 
      else if(desiredValue.equalsIgnoreCase("metro")) 
      { 
       returnString = String.valueOf(getLocation.metro_code); 
      } 
      else if(desiredValue.equalsIgnoreCase("city")) 
      { 
       returnString = getLocation.city; 
      } 
      else if(desiredValue.equalsIgnoreCase("zip") || desiredValue.equalsIgnoreCase("postalcode")) 
      { 
       returnString = getLocation.postalCode; 
      } 
      else 
      { 
       returnString = ""; 
       System.out.println("There is no value found for parameter: "+desiredValue); 
      } 

      System.out.println("Value of: "+desiredValue + " is: "+returnString + " for ip address: "+ipAddress); 
     } 
     catch (Exception e) 
     { 
      System.out.println("Exception occured while getting details from max mind. " + e); 
     } 
     finally 
     { 
      return returnString; 
     } 
    } 
+0

seguro que funciona en Android ...? –

1

Usted puede intentar usar https://ip-api.io - ubicación geográfica API que devuelve país entre otra información IP.

Por ejemplo, con Node.js

const request = require('request-promise') 

request('http://ip-api.io/api/json/1.2.3.4') 
    .then(response => console.log(JSON.parse(response))) 
    .catch(err => console.log(err)) 
0

Usted podría utilizar https://ipdata.co a realizar la búsqueda

curl https://api.ipdata.co/23.221.76.66 

Ipdata tiene 10 puntos finales a nivel mundial cada capaz de manejar> 800M solicita al día!

Da

{ 
    "ip": "23.221.76.66", 
    "city": "Cambridge", 
    "region": "Massachusetts", 
    "country_name": "United States", 
    "country_code": "US", 
    "continent_name": "North America", 
    "continent_code": "NA", 
    "latitude": 42.3626, 
    "longitude": -71.0843, 
    "asn": "AS20940", 
    "organisation": "Akamai International B.V.", 
    "postal": "02142", 
    "currency": "USD", 
    "currency_symbol": "$", 
    "calling_code": "1", 
    "flag": "https://ipdata.co/flags/us.png", 
    "time_zone": "America/New_York" 
}⏎ 
0

red de entrega de contenidos de Amazon CloudFront ahora se puede configurar para pasar esta información a través de una cabecera.Dado el tamaño de Amazon (son grandes y estables, no van a ningún lado) y esta es la configuración del código (no hay API de terceros para aprender o código para mantener), todos creen que esta es la mejor opción.

Si no usa AWS CloudFront, me gustaría ver si su CDN tiene una opción de encabezado similar que se puede activar. Por lo general, los grandes proveedores presionan rápidamente por la paridad de características. Y si no está utilizando un CDN, podría poner CloudFront frente a su infraestructura y simplemente establecer el origen para resolver lo que está utilizando actualmente.

Además, también tiene sentido resolver esto en el nivel CDN. Su CDN ya tiene que descubrir la ubicación geográfica para enrutar al usuario al nodo de contenido más cercano, también podría pasar esta información y no encontrarla dos veces a través de una API de un tercero (esto se convierte en punto de bloqueo para su aplicación, esperando una geo búsqueda de ubicación para resolver). No es necesario hacer este trabajo dos veces (y la segunda vez, posiblemente menos resistente [por ejemplo, búsqueda geográfica de terceros]).

https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/

Segmentación geográfica - CloudFront detectará el país del usuario de origen y pasar a lo largo del código del condado para que en la cabecera CloudFront-Viewer-Country . Puede utilizar esta información para personalizar sus respuestas sin tener que usar las URL específicas de cada país.

0

Las direcciones IP se utilizan con bastante frecuencia para la segmentación geográfica, es decir, personalizar el contenido de un sitio web según la ubicación/país del visitante pero no están asociados permanentemente con un país y suelen volver a asignarse.

Para lograr lo que desea, debe mantener una búsqueda actualizada para asignar una dirección IP a un país con una base de datos o una API de geolocalización. He aquí un ejemplo:

> https://ipapi.co/8.8.8.8/country 
US 

> https://ipapi.co/8.8.8.8/country_name 
United States 

o puede utilizar la API completo para obtener completa location for IP address por ejemplo,

https://ipapi.co/8.8.8.8/json 

{ 
    "ip": "8.8.8.8", 
    "city": "Mountain View", 
    "region": "California", 
    "region_code": "CA", 
    "country": "US", 
    "country_name": "United States", 
    "continent_code": "NA", 
    "postal": "94035", 
    "latitude": 37.386, 
    "longitude": -122.0838, 
    "timezone": "America/Los_Angeles", 
    "utc_offset": "-0800", 
    "country_calling_code": "+1", 
    "currency": "USD", 
    "languages": "en-US,es-US,haw,fr", 
    "asn": "AS15169", 
    "org": "Google Inc." 
}