Как я могу найти название города, используя IP-адрес в Java - PullRequest
2 голосов
/ 18 марта 2010

Я хочу название города с IP-адреса, используя Java

есть идея сделать это?

Ответы [ 5 ]

7 голосов
/ 18 марта 2010

По ссылке Андрея, вот как построить запрос, этот код вернет HTML-файл со всеми деталями текущего IP, включая город;

String IP= "123.123.123.123";
URL link = new URL("http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress="+IP);

BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));
String inputLine;

while ((inputLine = in.readLine()) != null){
     System.out.println(inputLine);             
}

in.close();

ОБНОВЛЕНИЕ, 23 мая 2013 г.

Предыдущий ответ в порядке, но это не вызов API, он читает HTML-страницу, которую я предоставил ранее, потому что я не нашел бесплатных API. Далее идет вызов API REST, который можно легко использовать и который вернет всю необходимую информацию, рекомендуется использовать этот:

String ip = "2.51.255.200"; 
URL url = new URL("http://freegeoip.net/csv/" + ip);
connection = (HttpURLConnection) url.openConnection();
connection.connect();

InputStream is = connection.getInputStream();

int status = connection.getResponseCode();
if (status != 200) {
    return null;
}

reader = new BufferedReader(new InputStreamReader(is));
for (String line; (line = reader.readLine()) != null;) {
    //this API call will return something like:
    "2.51.255.200","AE","United Arab Emirates","03","Dubai","Dubai","","x-coord","y-coord","",""
    // you can extract whatever you want from it
}
2 голосов
/ 24 апреля 2013

Логан прав, геобайт не является точным. Он указал мне на другой город.

Но whatismyipaddress опознал меня точно. Кажется, проблема с геобайтами.

2 голосов
/ 18 марта 2010
0 голосов
/ 11 июня 2018

Если ваше приложение развернуто за брандмауэром. Поэтому вместо вызова API мы можем использовать GeoLite, ниже приведен пример кода.

Загрузить файл City.dat из http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

            File    datapath = new File("GeoLiteCity.dat");
            LookupService cl = new LookupService(datapath,
                    LookupService.GEOIP_MEMORY_CACHE
                            | LookupService.GEOIP_CHECK_CACHE);
            String cityName = cl.getLocation(ipAddress).city;
0 голосов
/ 06 января 2017

Другой альтернативой некоторым из уже упомянутых сервисов является мой API, https://ipinfo.io.. Он возвращает геолокацию и другую информацию об IP-адресе:

$ curl ipinfo.io
{
  "ip": "24.6.61.239",
  "hostname": "c-24-6-61-239.hsd1.ca.comcast.net",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.3845,-122.0881",
  "org": "AS7922 Comcast Cable Communications, LLC",
  "postal": "94040"
}

Подробнее см. https://ipinfo.io/developers.

...