annotate contrib/geo2nginx.pl @ 196:8759b346e431 NGINX_0_3_45

nginx 0.3.45 *) Feature: the "ssl_verify_client", "ssl_verify_depth", and "ssl_client_certificate" directives. *) Change: the $request_method variable now returns the main request method. *) Change: the ° symbol codes were changed in koi-win conversion table. *) Feature: the euro É N symbols were added to koi-win conversion table. *) Bugfix: if nginx distributed the requests among several backends and some backend failed, then requests intended for this backend was directed to one live backend only instead of being distributed among the rest.
author Igor Sysoev <http://sysoev.ru>
date Sat, 06 May 2006 00:00:00 +0400
parents 962c43960644
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1 #!/usr/bin/perl -w
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 # (c) Andrei Nigmatulin, 2005
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 #
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5 # this script provided "as is", without any warranties. use it at your own risk.
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6 #
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 # special thanx to Andrew Sitnikov for perl port
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 # this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country)
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10 # to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx)
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11 #
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12 # for example, line with ip range
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 #
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14 # "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation"
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
15 #
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16 # will be converted to four subnetworks:
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
17 #
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18 # 62.16.68.0/22 RU;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 # 62.16.72.0/21 RU;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20 # 62.16.80.0/20 RU;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
21 # 62.16.96.0/19 RU;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 use warnings;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 use strict;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27 while( <STDIN> ){
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28 if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29 print_subnets($1, $2, $3);
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30 }
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31 }
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33 sub print_subnets {
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34 my ($a1, $a2, $c) = @_;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35 my $l;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 while ($a1 <= $a2) {
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){};
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n";
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 $a1 += (1 << $l);
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 }
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 }
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 sub long2ip {
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44 my $ip = shift;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 my $str = 0;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48 $str = ($ip & 255);
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 $ip >>= 8;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 $str = ($ip & 255).".$str";
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53 $ip >>= 8;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54 $str = ($ip & 255).".$str";
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56 $ip >>= 8;
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57 $str = ($ip & 255).".$str";
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 }