Identyfikacja kraju według adresu IP

Czy istnieje sposób, aby dowiedzieć się nazwę kraju po prostu patrząc na adres IP? Czy kraje mają określone zakresy adresów IP? Na przykład Australia może mieć adresy IP tylko w zakresie 123.45.56.89 - 231.54.65.98 (tylko przykład)

Author: Ben Dowling, 2012-03-21

10 answers

Myślę, że to, czego szukasz, to baza danych geolokalizacyjnych IP lub dostawca usług. Istnieje wiele tam i niektóre są darmowe (dostać to, za co płacisz).

Chociaż nie korzystałem wcześniej z tej usługi, twierdzi, że jest w czasie rzeczywistym. https://kickfire.com/kf-api

Ale po prostu wykonaj wyszukiwanie google NA IP geo, a otrzymasz więcej wyników, niż potrzebujesz.

 13
Author: Chris Gessler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-06 20:15:03

Nie Nie możesz-adresy IP są od czasu do czasu ponownie przydzielane i przydzielane, więc mapowanie adresu IP do lokalizacji również będzie się zmieniać w czasie.

Jeśli chcesz dowiedzieć się, gdzie znajduje się adres IP, możesz pobrać bazę danych geolokalizacyjnych, taką jak GeoLite z MaxMind , lub użyć API, takiego jak http://ipinfo.io (mój własny serwis), który również poda dodatkowe szczegóły:

$ 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
}
 23
Author: Ben Dowling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-07 06:39:45

To nie takie proste. Adresy IP nie są przypisywane do krajów jako takich, ale do firm i organizacji.

Ale może to ci pomoże: http://www.maxmind.com/app/geolitecountry

 2
Author: barsju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-21 09:50:37

Możesz spróbować użyć https://ip-api.io - API geo lokalizacji, które zwraca kraj wśród innych informacji IP.

Na przykład z 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))
 2
Author: Andrey E,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-06 20:41:17

You could use ipdata.co Aby przeprowadzić wyszukiwanie

Ta odpowiedź używa klucza API' test', który jest bardzo ograniczony i przeznaczony tylko do testowania kilku wywołań. Zarejestruj się dla własnego darmowego klucza API i otrzymuj do 1500 zapytań dziennie do rozwoju.

curl https://api.ipdata.co/23.221.76.66?api-key=test

Ipdata ma 10 punktów końcowych na całym świecie, z których każdy jest w stanie obsłużyć >10 000 żądań na sekundę!

Daje

{
    "ip": "23.221.76.66",
    "city": "Cambridge",
    "region": "Massachusetts",
    "region_code": "MA",
    "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",
    "calling_code": "1",
    "flag": "https://ipdata.co/flags/us.png",
    "emoji_flag": "\ud83c\uddfa\ud83c\uddf8",
    "emoji_unicode": "U+1F1FA U+1F1F8",
    "is_eu": false,
    "languages": [
        {
            "name": "English",
            "native": "English"
        }
    ],
    "currency": {
        "name": "US Dollar",
        "code": "USD",
        "symbol": "$",
        "native": "$",
        "plural": "US dollars"
    },
    "time_zone": {
        "name": "America/New_York",
        "abbr": "EDT",
        "offset": "-0400",
        "is_dst": true,
        "current_time": "2018-04-19T06:32:30.690963-04:00"
    },
    "threat": {
        "is_tor": false,
        "is_proxy": false,
        "is_anonymous": false,
        "is_known_attacker": false,
        "is_known_abuser": false,
        "is_threat": false,
        "is_bogon": false
    }
}⏎ 
 2
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-29 13:41:17
 1
Author: rcky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:17

Zgadzam się z powyższymi odpowiedziami, najlepszym sposobem na uzyskanie kraju z adresu ip jest Maxmind.

Jeśli chcesz napisać kod w Javie, możesz użyć np. geoip-api-1.2.10.pliki JAR i geoIP dat (GeoIPCity.dat), które można znaleźć za pośrednictwem google.

Poniższy kod może być przydatny, aby uzyskać prawie wszystkie informacje związane z lokalizacją, używam również tego samego kodu.

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;
        }
    }
 1
Author: Pankaj Kumar Katiyar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 08:44:41

[1]}sieć dostarczania treści CloudFront firmy Amazon może być teraz skonfigurowana tak, aby przekazywać te informacje jako nagłówek. Biorąc pod uwagę rozmiar Amazon (są duże i stabilne, nigdzie się nie wybierają) i jest to konfiguracja nad kodem (brak zewnętrznego API do nauki lub kodu do utrzymania), wszyscy uważają, że jest to najlepsza opcja.

Jeśli nie używasz AWS CloudFront, chciałbym sprawdzić, czy twój CDN ma podobną opcję nagłówka, którą można włączyć. Zazwyczaj duże dostawcy są szybkie, aby naciskać na parzystość funkcji. A jeśli nie używasz CDN, możesz umieścić CloudFront przed infrastrukturą i po prostu ustawić pochodzenie, aby rozwiązać to, czego obecnie używasz.

Dodatkowo, sensowne jest rozwiązanie tego problemu na poziomie CDN. Twój CDN już musi ustalić lokalizację geograficzną, aby skierować użytkownika do najbliższego węzła treści, równie dobrze może przekazać te informacje, a nie dowiedzieć się tego dwa razy za pośrednictwem zewnętrznego API (staje się to chokepoint dla Twojej aplikacji, oczekiwanie na wyszukiwanie lokalizacji geograficznej do rozwiązania). Nie ma potrzeby wykonywania tej pracy dwa razy(i za drugim razem, prawdopodobnie mniej odporne [np. 3rd party GEO lookup]).

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

Kierowanie geograficzne {–14]} - CloudFront wykryje Kraj pochodzenia użytkownika i przekazać Ci kod powiatu w CloudFront-Viewer-Country nagłówek. Możesz użyć tych informacji, aby dostosować swoje odpowiedzi bez konieczności używania adresów URL, które są specyficzne dla każdego kraju.

 1
Author: Joshua Robinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-20 22:15:15

Adresy IP są dość często używane do kierowania geograficznego, tj. dostosowywania zawartości strony internetowej według lokalizacji / kraju odwiedzającego, ale nie są trwale powiązane z krajem i często są ponownie przypisywane.

Aby osiągnąć to, co chcesz, musisz prowadzić aktualne wyszukiwanie, aby zmapować adres IP do kraju za pomocą bazy danych lub API geolokalizacyjnego. Oto przykład:

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

> https://ipapi.co/8.8.8.8/country_name
United States
Możesz też użyć pełnego API, aby uzyskać pełną lokalizację dla adresu IP]} np.
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."
}
 1
Author: Francis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 15:50:13

Tak, możesz pobrać zakresy adresów IP według kraju z https://lite.ip2location.com/ip-address-ranges-by-country

Widać, że każdy kraj ma wiele zakresów i często się zmienia.

 1
Author: Michael C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-28 02:12:12