File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / nginx / contrib / geo2nginx.pl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 09:20:38 2013 UTC (10 years, 8 months ago) by misho
Branches: nginx, MAIN
CVS tags: v1_4_3p0, v1_4_3, HEAD
v 1.4.3

    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: }
   59: 

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