Vă mulțumim pentru susținere

Cum să obțineți țara conform unui anumit IP?

Știe cineva despre o modalitate simplă de a prelua țara pentru o anumită adresă IP? Preferabil în format ISO_3166-1?

0
adăugat editat
Nu acordați prea multă încredere IP-ului, care vă spune țara în care se află utilizatorul: pentru că lucrez pentru o companie scandinavă, văd anunțurile în limba suedeză, chiar dacă biroul nostru este în Scoția ...
adăugat autor AAT
Exact - dacă te gândești la asta. Există multe cazuri în care pare să veniți de undeva, dar de fapt vin din altă parte. Este tocmai faptul că topologia rețelei nu trebuie să confirme granițele politice sau geologice. F.ex. VPN, wireless, satelit și așa mai departe.
adăugat autor Phluks

14 răspunsuri

Here's a nice free service with a public API: http://www.hostip.info/use.html

0
adăugat

O mulțime de oameni (inclusiv compania mea) par să utilizeze MaxMind GeoIP.

Ei au o versiune gratuită GeoLite , care nu este la fel de exactă ca versiunea plătită, dar dacă sunteți doar după ceva simplu, ar putea fi destul de bun.

0
adăugat
Linkul GeoLite de mai sus are un rezultat de 404 când am verificat astăzi.
adăugat autor Parag Magunia
Api-ul nostru de localizare geografică va funcționa foarte bine: ip-api.io
adăugat autor Andrey E
adăugat autor Manoj

Nu știu cât de precis este site-ul hostip.info. Tocmai am vizitat site-ul și a raportat că țara mea este Canada. Sunt în Statele Unite și ISP pe care biroul meu o folosește numai din SUA. Vă permite să corectați presupunerea, dar dacă utilizați acest serviciu pentru a urmări viziștii de pe site-ul web, nu veți avea nici o posibilitate să știți dacă datele sunt corecte. Desigur, sunt doar un singur punct de date. Am descarcat baza de date GeoLite Country, care este doar un fisier .csv, iar adresa mea IP a fost corect identificata ca US.

Un alt beneficiu al liniei de produse MaxMind (plătită sau gratuită) este că aveți datele, nu vă supuneți loviturii de performanță a efectuării unui apel de serviciu web către un alt sistem.

0
adăugat
Im în Marea Britanie și mi-a spus că am fost în Rio, Brazilia :)
adăugat autor Mike

The most accurate is Digital Elements NetAcuity...not free but you get what you pay for most of the time....Digital Element

0
adăugat

Există două abordări: utilizarea unui serviciu de internet și folosirea unui tip de listă locală (probabil înfășurat într-o bibliotecă). Ceea ce doriți va depinde de ceea ce construiți.

Pentru servicii:

Pentru liste:

0
adăugat
Unul dintre cele mai utile răspunsuri, în general, pe care l-am văzut în SO. Mulțumesc!
adăugat autor tzot
Poate știți dacă RIR-urile au, de asemenea, informații mai detaliate, cum ar fi geopipcity db de la maxmind, disponibile ca date deschise? M-am uitat, dar nu am găsit-o
adăugat autor Jevado

google's clientlocation returns (my example)

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

Consultați ipdata.co care vă oferă mai multe puncte de date de la o adresă IP.

The API is pretty fast, with 10 global endpoints each able to handle >800M calls daily.

Iată un exemplu 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
    }
}?  
0
adăugat

Puteți folosi serviciul meu, http://ipinfo.io , pentru aceasta. API-ul returnează o grămadă de detalii diferite despre o adresă 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
}

Dacă sunteți doar după codul țării, trebuie doar să adăugați / țara la adresa URL:

$ curl ipinfo.io/8.8.8.8/country
US

Iată o funcție generică PHP pe care o puteți utiliza:

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

I've used the IP 8.8.8.8 in these examples, but if you want details for the user's IP just pass in $_SERVER['REMOTE_ADDR'] instead. More details are available at http://ipinfo.io/developers

0
adăugat

You can try the free IP2Location LITE database

Pentru a crea tabela în 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;

Pentru a importa datele

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;

Cod PHP pentru a interoga MySQL

country_code;
$country_name = $row->country_name;

echo "Country_code: " . $country_code . "
"; echo "Country_name: " . $country_name . "
"; // 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); } } ?>
0
adăugat

ipinfodb provides a free database and API for IP to country and vice versa. They use free data from MaxMind. The data gets updated every month, and it's a great free alternative with decent accuracy.

0
adăugat
Mai bine decât păstrarea propriei baze de date. Testați-o într-un loc foarte obscur (Uthai Thani, Thailanda) și a fost la fața locului. O mare descoperire, multumesc!
adăugat autor Jannie Theunissen

Puteți utiliza soluția oferită pentru această întrebare .

Dar returnează un cod de țară de 2 cifre.

0
adăugat

Încercați acest cod php

  
0
adăugat

use the function ipToCountry($ip) from http://www.mmtutorialvault.com/php-ip-to-country-function/

0
adăugat

puteți utiliza API-urile de servicii web care fac acest lucru ca:

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