1

国にマッピングされた IP 範囲を持つ ip-to-country.csv をダウンロードしました。このデータをデータベースに保存する方法と、IP アドレスがどこから来ているかを知るために IP アドレスがどの範囲で照会できるかを教えてください。

4

4 に答える 4

5

それを行うために、 ip2cという小さなライブラリを作成しました。webhosting.infoのデータベースを使用しますが、 Software77のデータベースもサポートしています。

CSV 情報をコンパクトなバイナリ形式に変換し、ファイル、メモリ、またはメモリ マップされたファイルを直接検索できます。

Java API の使用法は次のようになります。

String ip = 85.64.225.159;
int caching1 = IP2Country.NO_CACHE;  // Straight on file, Fastest startup, slowest queries
int caching2 = IP2Country.MEMORY_MAPPED; // Memory mapped file, fast startup, fast queries.
int caching3 = IP2Country.MEMORY_CACHE; // load file into memory, slowerst startup, fastest queries
IP2Country ip2c = new IP2Country(caching1);
Country c = ip2c.getCountry(ip);
if (c == null)
{
        System.out.println("UNKNOWN");                          
}
else
{
        // will output IL ISR ISRAEL
        System.out.println(c.get2cStr() + " " + c.get3cStr() + " " + c.getName());      
}
于 2010-05-06T06:44:02.447 に答える
3

IP-to-Country Handbook を参照してください
。ip-to-country.csv ファイルには 5 つのフィールドが含まれています。

* Begining of IP address range
* Ending of IP address range
* Two-character country code based on ISO 3166
* Three-character country code based on ISO 3166
* Country name based on ISO 3166

次のフィールドを持つテーブルを作成することにより、このデータを任意のデータベースにインポートできます。

FIELD           DATA TYPE           FIELD DESCRIPTION
IP_FROM         NUMERICAL (DOUBLE)  Beginning of IP address range.
IP_TO           NUMERICAL (DOUBLE)  Ending of IP address range.
COUNTRY_CODE2    CHAR(2)            Two-character country code based on ISO 3166.
COUNTRY_CODE3    CHAR(3)            Three-character country code based on ISO 3166.
COUNTRY_NAME     VARCHAR(50)        Country name based on ISO 3166

上記のテーブルにデータをインポートした後、次の Select ステートメントを発行して、対応するIP 番号の国を検索するためにクエリを実行できます。

SELECT COUNTRY_NAME FROM <TableName> WHERE IP_FROM <= IP Number and IP_TO >= IP Number

ここで、特定の ABCD IP の IP 番号は次のように計算されます。

IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D
于 2010-05-06T06:25:35.173 に答える
2

IPv4 の場合、次の形式で保存できます。

  1. IP アドレスを整数に変換します。したがって、127.0.0.1 は 2 147 483 649 になります。
  2. テーブルをトリプル IPFrom IPTo Country として保存します
  3. IpFrom と IpTo のインデックスを構築する

IP アドレスを検索する必要がある場合は、次のクエリを実行します。

SELECT Country from GeoIP where  IpFrom < $IP  and $IP < $IpTo

これにより、IPアドレスの国が表示されます

于 2010-05-05T18:29:16.550 に答える
1

範囲の ipTo (上限) 値に対してのみインデックスを作成し、クエリを使用できます。

  select country from geoip where $ip <= ipTo limit 1

(MaxMind データベースのように範囲が重複しないことを前提としています)

于 2010-05-05T19:13:19.157 に答える