Annotation of embedaddon/nginx/contrib/geo2nginx.pl, revision 1.1.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>