Frage

Kennt jemand eine einfache Möglichkeit, das Land für eine bestimmte IP-Adresse abzurufen?Am liebsten im ISO_3166-1-Format?

War es hilfreich?

Lösung

Viele Leute (einschließlich meiner Firma) scheinen MaxMind GeoIP zu verwenden.

Sie haben eine kostenlose Version GeoLite Das ist nicht so genau wie die kostenpflichtige Version, aber wenn Sie nur etwas Einfaches suchen, kann es gut genug sein.

Andere Tipps

Es gibt zwei Ansätze:Verwenden eines Internetdienstes und Verwenden einer Art lokaler Liste (vielleicht in einer Bibliothek verpackt).Was Sie wollen, hängt davon ab, was Sie bauen.

Für Dienstleistungen:

Für Listen:

Hier ist ein schöner kostenloser Dienst mit einer öffentlichen API:http://www.hostip.info/use.html

ipinfodb bietet eine kostenlose Datenbank und API für IP-zu-Land- und umgekehrt.Sie nutzen kostenlose Daten von MaxMind.Die Daten werden jeden Monat aktualisiert und es handelt sich um eine großartige kostenlose Alternative mit angemessener Genauigkeit.

Ich weiß nicht, wie genau die Website hostip.info ist.Ich habe gerade diese Website besucht und dort wurde mir angezeigt, dass mein Land Kanada ist.Ich bin in den USA und der ISP, den mein Büro nutzt, operiert nur von den USA aus.Es ermöglicht Ihnen zwar, Ihre Vermutung zu korrigieren, aber wenn Sie diesen Dienst nutzen, um Website-Besucher nach Ländern zu verfolgen, haben Sie keine Möglichkeit zu wissen, ob die Daten korrekt sind.Natürlich bin ich nur ein Datenpunkt.Ich habe die GeoLite-Länderdatenbank heruntergeladen, bei der es sich nur um eine CSV-Datei handelt, und meine IP-Adresse wurde korrekt als USA identifiziert.

Ein weiterer Vorteil der MaxMind-Produktlinie (kostenpflichtig oder kostenlos) besteht darin, dass Sie über die Daten verfügen und nicht die Leistungseinbußen hinnehmen müssen, die durch einen Webservice-Aufruf an ein anderes System entstehen.

Am genauesten ist NetAcuity von Digital Elements ... nicht kostenlos, aber Sie bekommen meistens das, wofür Sie bezahlen ...Digitales Element

Googles clientlocation gibt zurück (mein Beispiel)

latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
location = "IP location: " + getFormattedLocation();
document.getElementById("location").innerHTML = location;

Sie können die bereitgestellte Lösung verwenden diese Frage.

Es wird jedoch ein zweistelliger Ländercode zurückgegeben.

Probieren Sie diesen PHP-Code aus

  <?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];?>

Sie können meinen Service nutzen, http://ipinfo.io, dafür.Die API gibt eine ganze Reihe verschiedener Details zu einer IP-Adresse zurück:

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

Wenn Sie nur nach dem Ländercode suchen, müssen Sie nur /country zur URL hinzufügen:

$ curl ipinfo.io/8.8.8.8/country
US

Hier ist eine generische PHP-Funktion, die Sie verwenden könnten:

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

Ich habe in diesen Beispielen die IP 8.8.8.8 verwendet, aber wenn Sie Details zur IP des Benutzers wünschen, geben Sie diese einfach ein $_SERVER['REMOTE_ADDR'] stattdessen.Weitere Details finden Sie unter http://ipinfo.io/developers

Verwenden Sie die Funktion ipToCountry($ip) from http://www.mmtutorialvault.com/php-ip-to-country-function/

Sie können Webdienst-APIs verwenden, die diese Funktion wie folgt ausführen:

see example of service: http://ip-api.com and usage: http://whatmyip.info

Sehen ipdata.co Dadurch erhalten Sie mehrere Datenpunkte von einer IP-Adresse.

Die API ist ziemlich schnell, da 10 globale Endpunkte jeweils mehr als 800 Millionen Aufrufe täglich verarbeiten können.

Hier ist ein Curl-Beispiel;

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

Sie können es kostenlos ausprobieren IP2Location LITE-Datenbank

So erstellen Sie die Tabelle in 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;

Um die Daten zu importieren

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-Code zur Abfrage von 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);
 }
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top