#!/usr/bin/perl ############################################################################### # # # IPFire.org - A linux based firewall # # Copyright (C) 2010 IPFire Team # # # # 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 3 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, see . # # # ############################################################################### use CGI; use IO::Socket; use strict; # enable only the following on debugging purpose #use warnings; #use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; require "${General::swroot}/geoip-functions.pl"; my %cgiparams=(); &Header::showhttpheaders(); &Header::openpage($Lang::tr{'ip info'}, 1, ''); &Header::openbigbox('100%', 'left'); my @lines=(); my $extraquery=''; # Hash which contains the whois servers from # the responisible RIR of the continent. my %whois_servers_by_continent = ( "AF" => "whois.afrinic.net", "AS" => "whois.apnic.net", "EU" => "whois.ripe.net", "NA" => "whois.arin.net", "SA" => "whois.lacnic.net" ); # Default whois server if no continent could be determined. my $whois_server = "whois.arin.net"; my $addr = CGI::param("ip") || ""; if (&General::validip($addr)) { my $iaddr = inet_aton($addr); my $hostname = gethostbyaddr($iaddr, AF_INET); if (!$hostname) { $hostname = $Lang::tr{'lookup failed'}; } # enumerate GeoIP information for IP address... my $db_handle = &GeoIP::init(); my $ccode = &GeoIP::lookup_country_code($db_handle, $addr); # Try to get the continent of the country code. my $continent = &GeoIP::get_continent_code($db_handle, $ccode); # Check if a whois server for the continent is known. if($whois_servers_by_continent{$continent}) { # Use it. $whois_server = $whois_servers_by_continent{$continent}; } my $flag_icon = &GeoIP::get_flag_icon($ccode); my $sock = new IO::Socket::INET ( PeerAddr => $whois_server, PeerPort => 43, Proto => 'tcp'); if ($sock) { print $sock "$addr\n"; while (<$sock>) { $extraquery = $1 if (/ReferralServer: whois:\/\/(\S+)\s+/); push(@lines,$_); } close($sock); if ($extraquery) { undef (@lines); $whois_server = $extraquery; my $sock = new IO::Socket::INET ( PeerAddr => $whois_server, PeerPort => 43, Proto => 'tcp'); if ($sock) { print $sock "$addr\n"; while (<$sock>) { push(@lines,$_); } } else { @lines = ( "$Lang::tr{'unable to contact'} $whois_server" ); } } } else { @lines = ( "$Lang::tr{'unable to contact'} $whois_server" ); } &Header::openbox('100%', 'left', $addr . " $ccode (" . $hostname . ') : '.$whois_server); print "
\n";
	foreach my $line (@lines) {
		print &Header::cleanhtml($line,"y");
	}
	print "
\n"; &Header::closebox(); } else { &Header::openbox('100%', 'left', $Lang::tr{'invalid ip'}); print < $Lang::tr{'invalid ip'}

EOF &Header::closebox(); } print <
$Lang::tr{
END ; &Header::closebigbox(); &Header::closepage();