Hvordan få land i henhold til en bestemt IP?

stemmer
57

Er det noen som vet om en enkel måte å hente landet for en gitt IP-adresse? Fortrinnsvis i ISO_3166-1 format?

Publisert på 04/08/2008 klokken 05:15
kilden bruker
På andre språk...                            


14 svar

stemmer
38

Det er to tilnærminger: ved hjelp av en Internett-tjeneste og bruker en slags lokal liste (kanskje innpakket i et bibliotek). Hva du ønsker, vil avhenge av hva du bygger.

For tjenester:

For lister:

Svarte 15/09/2008 kl. 19:45
kilden bruker

stemmer
36

Mange mennesker (inkludert mitt selskap) synes å bruke MaxMind GeoIP.

De har en gratis versjon GeoLite som ikke er så nøyaktig som den betalte versjonen, men hvis du er bare ute etter noe enkelt, kan det være bra nok.

Svarte 04/08/2008 kl. 06:26
kilden bruker

stemmer
10

Her er en fin gratis tjeneste med en offentlig API: http://www.hostip.info/use.html

Svarte 04/08/2008 kl. 05:21
kilden bruker

stemmer
8

ipinfodb tilbyr en gratis database og API for IP til land og vice versa. De bruker gratis data fra MaxMind. Dataene blir oppdatert hver måned, og det er en stor gratis alternativ med anstendig nøyaktighet.

Svarte 13/01/2010 kl. 13:13
kilden bruker

stemmer
5

Jeg vet ikke hvor nøyaktig det hostip.info nettstedet er. Jeg besøkte dette området, og det rapportert at mitt land er Canada. Jeg er i USA og ISP som mitt kontor bruker bare opererer fra USA. Det gjør at du kan rette det er gjetning, men hvis du bruker denne tjenesten til å spore nettstedet vistors etter land, har du ingen måte å vite om dataene er riktige. Selvfølgelig, jeg er bare ett datapunkt. Jeg lastet ned GeoLite Country-databasen, som er bare en CSV-fil, og min IP-adresse ble korrekt identifisert som USA.

En annen fordel med MaxMind produktlinje (betalt eller gratis) er at du har data, trenger du ikke pådrar ytelse hit for å gjøre en web-tjeneste samtale til et annet system.

Svarte 04/08/2008 kl. 14:02
kilden bruker

stemmer
2

Du kan bruke min tjeneste, http://ipinfo.io for dette. APIen returnerer en hel haug med forskjellige detaljer om en IP-adresse:

$ 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
}

Hvis du er bare etter landkoden du trenger bare å legge til / land til nettadressen:

$ curl ipinfo.io/8.8.8.8/country
US

Her er en generisk PHP-funksjonen kan du bruke:

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

Jeg har brukt IP 8.8.8.8 i disse eksemplene, men hvis du ønsker opplysninger for brukerens IP bare passere i $_SERVER['REMOTE_ADDR']stedet. Flere detaljer er tilgjengelig på http://ipinfo.io/developers

Svarte 26/08/2014 kl. 04:49
kilden bruker

stemmer
2

Prøv denne php-kode

  <?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];?>
Svarte 30/07/2012 kl. 08:07
kilden bruker

stemmer
2

Du kan bruke løsningen gitt for dette spørsmålet .

Men den returnerer en to sifret landkode.

Svarte 19/10/2011 kl. 14:04
kilden bruker

stemmer
2

Googles clientlocation avkastning ( mitt eksempel )

latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;
Svarte 13/01/2010 kl. 13:25
kilden bruker

stemmer
2

Den mest nøyaktige er Digital Elements NetAcuity ... ikke gratis, men du får det du betaler for mesteparten av tiden .... Digital Element

Svarte 27/09/2008 kl. 03:04
kilden bruker

stemmer
1

du kan bruke web-tjeneste API-er som gjør dette arbeidet slik ut:

see example of service: http://ip-api.com and usage: http://whatmyip.info
Svarte 26/05/2014 kl. 14:59
kilden bruker

stemmer
1

bruke funksjonen ipToCountry ($ ip) fra http://www.mmtutorialvault.com/php-ip-to-country-function/

Svarte 27/06/2013 kl. 17:54
kilden bruker

stemmer
0

Du kan prøve den gratis IP2Location LITE database

For å opprette tabellen i 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;

For å importere data

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;

PHP-kode for å søke i 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);
 }
}
?>
Svarte 27/02/2018 kl. 05:32
kilden bruker

stemmer
0

Se ipdata.co som gir deg flere datapunkter fra en ip-adresse.

API er ganske rask, med 10 globale endepunkter hver stand til å håndtere> 800M kaller daglig.

Her er en curl eksempel;

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
    }
}⏎  
Svarte 18/02/2018 kl. 19:05
kilden bruker

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