Como obter o País de acordo com um determinado IP?

votos
57

Alguém sabe de uma maneira simples para recuperar o país para um determinado endereço IP? De preferência em formato ISO_3166-1?

Publicado 04/08/2008 em 06:15
fonte usuário
Em outras línguas...                            


14 respostas

votos
38

Existem duas abordagens: usando um serviço de Internet e usando algum tipo de lista local (talvez envolto em uma biblioteca). O que você quer vai depender do que você está construindo.

Para os serviços de:

Para listas:

Respondeu 15/09/2008 em 20:45
fonte usuário

votos
35

Um monte de pessoas (incluindo minha empresa) parecem usar MaxMind GeoIP.

Eles têm uma versão gratuita GeoLite que não é tão preciso como a versão paga, mas se você está apenas atrás de algo simples, pode ser bom o suficiente.

Respondeu 04/08/2008 em 07:26
fonte usuário

votos
10

Aqui está um bom serviço gratuito com uma API pública: http://www.hostip.info/use.html

Respondeu 04/08/2008 em 06:21
fonte usuário

votos
8

ipinfodb fornece um banco de dados livre e API para IP para país e vice-versa. Eles usam dados livres de MaxMind. Os dados são atualizados a cada mês, e é uma ótima alternativa livre com precisão decente.

Respondeu 13/01/2010 em 14:13
fonte usuário

votos
5

Eu não sei quão preciso que o site hostip.info é. Eu apenas visted esse site, e informou que meu país é Canadá. Estou nos EUA eo ISP que meu escritório utiliza apenas opera a partir dos EUA. Ele não permite que você corrigir é palpite, mas se você estiver usando este serviço para rastrear vistors do Web site por país, você não terá nenhuma maneira de saber se os dados estão corretos. Claro, eu sou apenas um ponto de dados. Eu baixei o banco de dados GeoLite País, que é apenas um arquivo .csv, e meu endereço de IP foi corretamente identificado como US.

Outro benefício da linha de produtos MaxMind (pago ou gratuito) é que você tem os dados, você não incorrer no hit de fazer uma chamada de serviço web para outro sistema desempenho.

Respondeu 04/08/2008 em 15:02
fonte usuário

votos
2

Você pode usar o meu serviço, http://ipinfo.io , para isso. A API retorna um monte de detalhes diferentes sobre um endereço 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
}

Se você é somente após o código do país você só precisa adicionar / país para o URL:

$ curl ipinfo.io/8.8.8.8/country
US

Aqui está uma função PHP genérico você poderia 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

Eu usei o IP 8.8.8.8 nestes exemplos, mas se você quiser detalhes para IP do usuário apenas passar em $_SERVER['REMOTE_ADDR']seu lugar. Mais detalhes estão disponíveis em http://ipinfo.io/developers

Respondeu 26/08/2014 em 05:49
fonte usuário

votos
2

Tente 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];?>
Respondeu 30/07/2012 em 09:07
fonte usuário

votos
2

Você pode usar a solução fornecida para esta pergunta .

Mas ele retorna um código de país de 2 dígitos.

Respondeu 19/10/2011 em 15:04
fonte usuário

votos
2

do Google retorna ClientLocation ( meu exemplo )

latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;
Respondeu 13/01/2010 em 14:25
fonte usuário

votos
2

O mais preciso é Elements Digital NetAcuity ... não é livre, mas você obtém o que você paga na maioria das vezes .... Elemento Digital

Respondeu 27/09/2008 em 04:04
fonte usuário

votos
1

você pode usar a API do serviço web que fazer este trabalho como:

see example of service: http://ip-api.com and usage: http://whatmyip.info
Respondeu 26/05/2014 em 15:59
fonte usuário

votos
1

usar a função IPToCountry ($ ip) de http://www.mmtutorialvault.com/php-ip-to-country-function/

Respondeu 27/06/2013 em 18:54
fonte usuário

votos
0

Você pode tentar a livre banco de dados IP2Location LITE

Para criar a tabela no 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 os dados

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 o 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);
 }
}
?>
Respondeu 27/02/2018 em 05:32
fonte usuário

votos
0

Veja ipdata.co que lhe dá vários pontos de dados a partir de um endereço IP.

A API é bastante rápido, com 10 pontos finais globais cada um capaz de lidar com> 800M chamadas diárias.

Aqui está um exemplo onda;

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
    }
}⏎  
Respondeu 18/02/2018 em 19:05
fonte usuário

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