커피닉스, 시스템 엔지니어의 쉼터
  해당 IP가 어느 국가IP대역인지 아는 방법 (영어) 작성일 : 2005/07/04 22:29
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 10546
     
    http://www.maxmind.com/app/geoip_country 에서 cvs파일로 된 국가별 IP대역을
    DB에 insert한 후 간단히 select를 통해 IP가 어느 국가에 속하는지 알 수 있다.
    물론 global기업의 경우 실제 서버나 PC가 국내에 있어도 외국 IP로 나올 수 있다.

    by 좋은진호


    * 참고 자료
      GeoIP 활용(아파치 웹로그에 국가코드 남기기 외) (글 좋은진호, 2008.3)
      http://coffeenix.net/board_view.php?bd_code=1638

    ---------------------------------------------------------------------
    * 관련 링크 : http://www.delau.net/php/geoip.html
    * 아래글 출처 : http://www.maxmind.com/app/csv
    ---------------------------------------------------------------------
    GeoIP Country CSV Text Files

    MaxMind GeoIP databases are available in a Comma Separated Value (CSV) format, in addition to the binary format. These CSV files generally contain IP Address range and geographical data for all publicly assigned IPv4 addresses.

    Due to the large size of geolocation databases, we generally recommend using our binary format with one of our APIs, since they are highly optimized for speed and disk space. On the other hand, if you have a requirement to import the data into a SQL database, the CSV format is recommended. We have listed some guidelines for importing and querying the data with a SQL database.

    CSV Format

    The CSV File contains four fields:

        * Beginning IP Number*
        * Ending IP Number*
        * ISO 3166 Country Code
        * Country Name

    This is an sample of how the CSV file is structured:

    "begin_num","end_num","country","name"
    "1029177344","1029439487","AU","Australia"
    "1029439488","1029570559","HK","Hong Kong"
    "1029570560","1029572607","ID","Indonesia"

    * Beginning IP Number and Ending IP Number are calculated as follows:

    ipnum = 16777216*w + 65536*x + 256*y + z   (1)

    where

    IP Address = w.x.y.z

    The reverse of this formula is

    w = int ( ipnum / 16777216 ) % 256;
    x = int ( ipnum / 65536    ) % 256;
    y = int ( ipnum / 256      ) % 256;
    z = int ( ipnum            ) % 256;

    Where % is the mod operator.

    Here is sample Perl code to convert the IP number to
    a IP address:

    sub numToStr {
      my ($ipnum) = @_;
      my $z = $ipnum % 256;
      $ipnum >>= 8;
      my $y = $ipnum % 256;
      $ipnum >>= 8;
      my $x = $ipnum % 256;
      $ipnum >>= 8;
      my $w = $ipnum % 256;
      return "$w.$x.$y.$z";
    }


    It is useful to have the IP Number if you are performing IP Address lookups using a database. For example the following queries will find the country based on IP Address 24.24.24.24:

    SQL Query

    SELECT ip_country FROM geoip WHERE 404232216 BETWEEN begin_ip_num AND end_ip_num

    MySQL Query

    SELECT ip_country FROM geoip WHERE 404232216 >= begin_ip_num AND
       404232216 <= end_ip_num

    Here we used the formula (1) to compute the IP Number based on 24.24.24.24

    404232216 = 16777216*24 + 65536*24 + 256*24 + 24

    For more information on importing GeoIP CSV files into MySQL, see HOW-TO Import the MaxMind GeoIP Free Country CSV file into MySQL and save diskspace.

    http://www.delau.net/php/geoip.html


    커피닉스, 시스템 엔지니어의 쉼터 / URL : http://coffeenix.net/board_view.php?bd_code=1024