Annotation of embedaddon/nginx/contrib/geo2nginx.pl, revision 1.1

1.1     ! misho       1: #!/usr/bin/perl -w
        !             2: 
        !             3: # (c) Andrei Nigmatulin, 2005
        !             4: #
        !             5: # this script provided "as is", without any warranties. use it at your own risk.
        !             6: #
        !             7: # special thanx to Andrew Sitnikov for perl port
        !             8: #
        !             9: # this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country)
        !            10: # to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx)
        !            11: #
        !            12: # for example, line with ip range
        !            13: #
        !            14: #   "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation"
        !            15: #
        !            16: # will be converted to four subnetworks:
        !            17: #
        !            18: #   62.16.68.0/22 RU;
        !            19: #   62.16.72.0/21 RU;
        !            20: #   62.16.80.0/20 RU;
        !            21: #   62.16.96.0/19 RU;
        !            22: 
        !            23: 
        !            24: use warnings;
        !            25: use strict;
        !            26: 
        !            27: while( <STDIN> ){
        !            28:        if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){
        !            29:                print_subnets($1, $2, $3);
        !            30:        }
        !            31: }
        !            32: 
        !            33: sub  print_subnets {
        !            34:        my ($a1, $a2, $c) = @_;
        !            35:        my $l;
        !            36:     while ($a1 <= $a2) {
        !            37:                for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){};
        !            38:                print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n";
        !            39:        $a1 += (1 << $l);
        !            40:        }
        !            41: }
        !            42: 
        !            43: sub long2ip {
        !            44:        my $ip = shift;
        !            45: 
        !            46:        my $str = 0;
        !            47: 
        !            48:        $str = ($ip & 255);
        !            49: 
        !            50:        $ip >>= 8;
        !            51:        $str = ($ip & 255).".$str";
        !            52: 
        !            53:        $ip >>= 8;
        !            54:        $str = ($ip & 255).".$str";
        !            55: 
        !            56:        $ip >>= 8;
        !            57:        $str = ($ip & 255).".$str";
        !            58: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>