Я пытаюсь использовать базу данных MaxMind GeoLite Country по Google App Engine. Однако я испытываю затруднения, заставляя Java API работать, поскольку это полагается на класс InetAddress, который не доступен для использования на Механизме Приложения.
Однако я не уверен, существует ли простое обходное решение, поскольку кажется, что это только использует класс InetAddress для определения IP данного имени хоста. В моем случае имя хоста всегда является IP так или иначе.
То, в чем я нуждаюсь, является способом преобразовать IP-адрес, представленный как Строка в массив байтов сетевого порядка байтов (который addr.getAddress () метод класса InetAddress обеспечивает).
Это - код текущее использование API, я должен найти способ удалить все ссылки на InetAddress при обеспечении, что он все еще работает!
Спасибо за внимание.
/**
* Returns the country the IP address is in.
*
* @param ipAddress String version of an IP address, i.e. "127.0.0.1"
* @return the country the IP address is from.
*/
public Country getCountry(String ipAddress) {
InetAddress addr;
try {
addr = InetAddress.getByName(ipAddress);
} catch (UnknownHostException e) {
return UNKNOWN_COUNTRY;
}
return getCountry(bytesToLong(addr.getAddress()));
}
// note: this is ipv4 specific, and i haven't tried to compile it.
long ipAsLong = 0;
for (String byteString : ipAddress.split("\\."))
{
ipAsLong = (ipAsLong << 8) | Integer.parseInt(byteString);
}
Все 12000+ записей в базе данных GeoIPCountryWhois имеют форму:
"4.17.135.32","4.17.135.63","68257568","68257599","CA","Canada"
разбейте имеющийся у вас четвертый адрес с точками на подстроки и проверьте их таким образом.