[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[vidalia-svn] r2414: Create a contrib directory for miscellaneous stuff and move (in vidalia: misc trunk trunk/contrib)



Author: edmanm
Date: 2008-03-15 20:19:40 -0400 (Sat, 15 Mar 2008)
New Revision: 2414

Added:
   vidalia/trunk/contrib/
   vidalia/trunk/contrib/geoip
Removed:
   vidalia/misc/geoip
Log:
Create a contrib directory for miscellaneous stuff and move the geoip script
that runs on pasiphae into it.


Deleted: vidalia/misc/geoip

Copied: vidalia/trunk/contrib/geoip (from rev 2411, vidalia/misc/geoip)
===================================================================
--- vidalia/trunk/contrib/geoip	                        (rev 0)
+++ vidalia/trunk/contrib/geoip	2008-03-16 00:19:40 UTC (rev 2414)
@@ -0,0 +1,104 @@
+#!/usr/bin/perl -w
+#
+#  Vidalia is distributed under the following license:
+#
+#  Copyright (C) 2006,  Matt Edman, Justin Hipple
+#  Modified slightly by Sasha Romanosky
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
+#  02110-1301, USA.
+#
+#  The GeoIP Perl  Library is licensed under the GPL.  For details
+#  see the COPYING file.
+#################################################################
+
+use strict;
+use Geo::IP;
+
+my $VERSION = "05-06";
+my $GEODATA = "/home/vidalia/geodata/GeoLiteCity-$VERSION.dat";
+my $GI      = Geo::IP->open($GEODATA, GEOIP_STANDARD);
+
+my $uri     = "";
+my %fields  = ();
+my @params  = ();
+
+###############################################################
+print "Content-type: text/plain\n\n";
+
+# Parse the URI parameters
+my $method = $ENV{"REQUEST_METHOD"};
+if ($method eq "POST") {
+  my $query = "";
+  read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
+ 
+  # Request came in the form of a POST
+  @params = split /&/, $query;
+} elsif ($method eq "GET") {
+  # Method is a GET request
+  if ($ENV{"REQUEST_URI"} && $ENV{"REQUEST_URI"} =~/\?/) {
+    ($uri = $ENV{"REQUEST_URI"}) =~ s/.*\?//g;
+  }
+  @params = split /&/, $uri;
+} else {
+  # It wasn't a GET or POST, so we'd better bail.
+  print "Bad Request\n";
+  exit 0;
+}
+
+# Parse the parameters and values
+foreach (@params) {
+  my ($key, $val) = split /=/, $_;
+  $fields{$key} = $val;
+}
+ 
+# first build addr list
+unless ($fields{"ip"}) {           
+    # Get Geo info for requesting host
+    printGeoInfo($ENV{"REMOTE_ADDR"});
+}
+else {
+    # Resolve each IP in the request
+    my @addrs = split /,/, $fields{"ip"};
+    foreach (@addrs) {      
+        my $addr = substr($_, 0, 15); # chop at max length of an IP address
+        if ($addr =~ /\d+\.\d+\.\d+\.\d+/) {   # only select good IPs
+	        printGeoInfo($addr);
+	    }
+        else {
+	        print "Bad IP\n";
+        }
+    }
+}
+
+# print the Geo info
+sub printGeoInfo  {      
+    my $addr = shift;
+    print "$addr,";    
+    my $r = $GI->record_by_addr($addr);
+    if ($r) {
+        print join(",", $r->city,
+            $r->region,     
+            $r->country_code,
+            $r->latitude,
+            $r->longitude);
+    } 
+    else {
+        print "UNKNOWN";                  
+    }
+    print "\n"; 
+}
+
+#QED