1

Google App Engine で MaxMind GeoLite Country データベースを使用しようとしています。ただし、App Engine では使用できない InetAddress クラスに依存しているため、Java API を機能させるのに苦労しています。

ただし、特定のホスト名の IP を決定するために InetAddress クラスのみを使用しているように見えるため、簡単な回避策があるかどうかはわかりません。私の場合、ホスト名はとにかく常に IP です。

私が必要としているのは、文字列として表される IP アドレスをネットワーク バイト オーダーのバイト配列 (InetAddress クラスの addr.getAddress() メソッドが提供する) に変換する方法です。

これは現在の 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()));
}
4

2 に答える 2

1
// 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);
}
于 2010-05-02T10:42:39.987 に答える
1

GeoIPCountryWhois データベースの 12000 以上のエントリはすべて次の形式です。

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

あなたが持っているドット付きクワッドアドレスを部分文字列に分割し、それらをそのように範囲チェックします。

于 2010-05-02T11:08:11.727 に答える