mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
GeoIP: Add lookup function for convenience
Instead of opening the database again for each lookup, we will read it into memory on first use and every lookup after that will be coming from cache. Reviewed-by: Peter Müller <peter.mueller@link38.eu> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
@@ -23,8 +23,23 @@
|
||||
|
||||
package GeoIP;
|
||||
|
||||
use Geo::IP::PurePerl;
|
||||
use Locale::Codes::Country;
|
||||
|
||||
my $database;
|
||||
|
||||
sub lookup($) {
|
||||
my $address = shift;
|
||||
|
||||
# Load the database into memory if not already done
|
||||
if (!$database) {
|
||||
$database = Geo::IP::PurePerl->new(GEOIP_MEMORY_CACHE);
|
||||
}
|
||||
|
||||
# Return the name of the country
|
||||
return $database->country_code_by_name($address);
|
||||
}
|
||||
|
||||
# Function to get the flag icon for a specified country code.
|
||||
sub get_flag_icon($) {
|
||||
my ($input) = @_;
|
||||
|
||||
@@ -60,7 +60,7 @@ foreach my $country (@countries) {
|
||||
$lines++;
|
||||
|
||||
# Convert country code into upper case.
|
||||
my $country_uc = uc($country);
|
||||
$country = uc($country);
|
||||
|
||||
# Get flag icon for of the country.
|
||||
my $flag_icon = &GeoIP::get_flag_icon($country);
|
||||
@@ -69,8 +69,8 @@ foreach my $country (@countries) {
|
||||
my $name = &GeoIP::get_full_country_name($country);
|
||||
|
||||
if ($lines % 2) {
|
||||
print "<td $col><a id='$country'><img src='$flag_icon' alt='$country_uc' title='$country_uc'/></a></td>";
|
||||
print "<td $col>$country_uc</td>";
|
||||
print "<td $col><a id='$country'><img src='$flag_icon' alt='$country' title='$country'/></a></td>";
|
||||
print "<td $col>$country</td>";
|
||||
print "<td $col>$name</td></tr>\n";
|
||||
} else {
|
||||
$lines2++;
|
||||
@@ -80,8 +80,8 @@ foreach my $country (@countries) {
|
||||
$col="style='background-color:${Header::table1colour};'";
|
||||
}
|
||||
print "<tr>";
|
||||
print "<td $col><a id='$country'><img src='$flag_icon' alt='$country_uc' title='$country_uc'/></a></td>";
|
||||
print "<td $col>$country_uc</td>";
|
||||
print "<td $col><a id='$country'><img src='$flag_icon' alt='$country' title='$country'/></a></td>";
|
||||
print "<td $col>$country</td>";
|
||||
print "<td $col>$name</td>";
|
||||
print "<td $col> </td>";
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#
|
||||
use strict;
|
||||
|
||||
use Geo::IP::PurePerl;
|
||||
use Getopt::Std;
|
||||
|
||||
# enable only the following on debugging purpose
|
||||
@@ -352,9 +351,7 @@ foreach $_ (@log)
|
||||
$srcport=$1 if $packet =~ /SPT=(\d+)/;
|
||||
$dstport=$1 if $packet =~ /DPT=(\d+)/;
|
||||
|
||||
my $gi = Geo::IP::PurePerl->new();
|
||||
my $ccode = $gi->country_code_by_name($srcaddr);
|
||||
my $fcode = lc($ccode);
|
||||
my $ccode = &GeoIP::lookup($srcaddr);
|
||||
|
||||
my $servi = uc(getservbyport($srcport, lc($proto)));
|
||||
if ($servi ne '' && $srcport < 1024) {
|
||||
@@ -386,10 +383,10 @@ foreach $_ (@log)
|
||||
END
|
||||
;
|
||||
# Get flag icon for of the country.
|
||||
my $flag_icon = &GeoIP::get_flag_icon($fcode);
|
||||
my $flag_icon = &GeoIP::get_flag_icon($ccode);
|
||||
|
||||
if ( $flag_icon) {
|
||||
print "<td align='center' $col><a href='../country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode'></a></td>";
|
||||
print "<td align='center' $col><a href='../country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode'></a></td>";
|
||||
} else {
|
||||
print "<td align='center' $col></td>";
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
# and Michael Tremer (www.ipfire.org)
|
||||
|
||||
use strict;
|
||||
use Geo::IP::PurePerl;
|
||||
use Getopt::Std;
|
||||
|
||||
# enable only the following on debugging purpose
|
||||
@@ -287,7 +286,6 @@ print "<p><b>$Lang::tr{'firewall hits'} $longmonthstr $daystr: $lines</b></p>";
|
||||
my $red_interface = &General::get_red_interface();
|
||||
my $linesjc = 0;
|
||||
my %tabjc;
|
||||
my $gi = Geo::IP::PurePerl->new();
|
||||
|
||||
if ($pienumber == -1 || $pienumber > $lines || $sortcolumn == 2) { $pienumber = $lines; };
|
||||
$lines = 0;
|
||||
@@ -310,7 +308,7 @@ foreach $_ (@log)
|
||||
# Traffic from red
|
||||
if($srcaddr ne '') {
|
||||
# srcaddr is set
|
||||
my $ccode = $gi->country_code_by_name($srcaddr);
|
||||
my $ccode = &GeoIP::lookup($srcaddr);
|
||||
if ($ccode eq '') {
|
||||
$ccode = 'unknown';
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
# and Michael Tremer (www.ipfire.org)
|
||||
|
||||
use strict;
|
||||
use Geo::IP::PurePerl;
|
||||
use Getopt::Std;
|
||||
|
||||
# enable only the following on debugging purpose
|
||||
@@ -436,9 +435,7 @@ for($s=0;$s<$lines;$s++)
|
||||
$col="bgcolor='$color{\"color$colorIndex\"}'";
|
||||
print "<tr>";
|
||||
|
||||
my $gi = Geo::IP::PurePerl->new();
|
||||
my $ccode = $gi->country_code_by_name($key[$s]);
|
||||
my $fcode = lc($ccode);
|
||||
my $ccode = &GeoIP::lookup($key[$s]);
|
||||
|
||||
$color++;
|
||||
print "<td align='center' $col><form method='post' action='showrequestfromip.dat'><input type='hidden' name='MONTH' value='$cgiparams{'MONTH'}'> <input type='hidden' name='DAY' value='$cgiparams{'DAY'}'> <input type='hidden' name='ip' value='$key[$s]'> <input type='submit' value='$Lang::tr{'details'}'></form></td>";
|
||||
@@ -448,7 +445,7 @@ for($s=0;$s<$lines;$s++)
|
||||
my $flag_icon = &GeoIP::get_flag_icon($ccode);
|
||||
|
||||
if ( $flag_icon ) {
|
||||
print "<td align='center' $col><a href='/cgi-bin/country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode'></a></td>";
|
||||
print "<td align='center' $col><a href='/cgi-bin/country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode'></a></td>";
|
||||
} else {
|
||||
print "<td align='center' $col></td>";
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
#use CGI::Carp 'fatalsToBrowser';
|
||||
|
||||
#use strict;
|
||||
use Geo::IP::PurePerl;
|
||||
|
||||
require '/var/ipfire/general-functions.pl';
|
||||
require "${General::swroot}/geoip-functions.pl";
|
||||
require "${General::swroot}/lang.pl";
|
||||
require "${General::swroot}/header.pl";
|
||||
|
||||
@@ -152,7 +152,6 @@ if (!(open (FILE,($filestr =~ /.gz$/ ? "gzip -dc $filestr |" : $filestr)))) {
|
||||
my $lines = 0;
|
||||
my @log=();
|
||||
my $country = $cgiparams{country};
|
||||
my $gi = Geo::IP::PurePerl->new();
|
||||
|
||||
if (!$skip)
|
||||
{
|
||||
@@ -179,7 +178,7 @@ if (!$skip)
|
||||
}
|
||||
elsif($srcaddr ne '') {
|
||||
# or srcaddr matches country code
|
||||
my $ccode = $gi->country_code_by_name($srcaddr);
|
||||
my $ccode = &GeoIP::lookup($srcaddr);
|
||||
if($ccode eq uc($country)){
|
||||
$log[$lines] = $_;
|
||||
$lines++;
|
||||
|
||||
Reference in New Issue
Block a user