Избегайте использования InetAddress - Получение необработанного IP-адреса в сетевом порядке байтов

Я пытаюсь использовать базу данных 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()));
}
1
задан msw 2 May 2010 в 10:41
поделиться

2 ответа

// 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);
}
1
ответ дан 3 September 2019 в 00:54
поделиться

Все 12000+ записей в базе данных GeoIPCountryWhois имеют форму:

"4.17.135.32","4.17.135.63","68257568","68257599","CA","Canada"

разбейте имеющийся у вас четвертый адрес с точками на подстроки и проверьте их таким образом.

1
ответ дан 3 September 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: