📄 geoip_region_maxmind.pm
字号:
#!/usr/bin/perl#-----------------------------------------------------------------------------# GeoIp_Region_Maxmind AWStats plugin# This plugin allow you to add a region report with regions detected# from a Geographical database (US and Canada).# Need the licensed region database from Maxmind.#-----------------------------------------------------------------------------# Perl Required Modules: Geo::IP or Geo::IP::PurePerl#-----------------------------------------------------------------------------# $Revision: 1.12 $ - $Author: eldy $ - $Date: 2006/05/06 02:54:48 $# <-----# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULESuse vars qw/ $type /;$type='geoip';if (!eval ('require "Geo/IP.pm";')) { $error1=$@; $type='geoippureperl'; if (!eval ('require "Geo/IP/PurePerl.pm";')) { $error2=$@; $ret=($error1||$error2)?"Error:\n$error1$error2":""; $ret.="Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; return $ret; }}# ----->use strict;no strict "refs";#-----------------------------------------------------------------------------# PLUGIN VARIABLES#-----------------------------------------------------------------------------# <-----# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE.my $PluginNeedAWStatsVersion="6.5";my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost SectionInitHashArray SectionProcessIp SectionProcessHostname SectionReadHistory SectionWriteHistory";# -----># <-----# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE.use vars qw/%TmpDomainLookup$geoip_region_maxmind%_region_p%_region_h%_region_k%_region_l$MAXNBOFSECTIONGIR%region/;my %countrylib=('ca'=>'Canada','us'=>'USA');my %countryregionlib=('ca'=>'Canadian Regions','us'=>'US regions');my %regca=('AB',"Alberta",'BC',"British Columbia",'MB',"Manitoba",'NB',"New Brunswick",'NF',"Newfoundland",'NS',"Nova Scotia",'NU',"Nunavut",'ON',"Ontario",'PE',"Prince Edward Island",'QC',"Quebec",'SK',"Saskatchewan",'NT',"Northwest Territories",'YT',"Yukon Territory");my %regus=('AA',"Armed Forces Americas",'AE',"Armed Forces Europe, Middle East, & Canada",'AK',"Alaska",'AL',"Alabama",'AP',"Armed Forces Pacific",'AR',"Arkansas",'AS',"American Samoa",'AZ',"Arizona",'CA',"California",'CO',"Colorado",'CT',"Connecticut",'DC',"District of Columbia",'DE',"Delaware",'FL',"Florida",'FM',"Federated States of Micronesia",'GA',"Georgia",'GU',"Guam",'HI',"Hawaii",'IA',"Iowa",'ID',"Idaho",'IL',"Illinois",'IN',"Indiana",'KS',"Kansas",'KY',"Kentucky",'LA',"Louisiana",'MA',"Massachusetts",'MD',"Maryland",'ME',"Maine",'MH',"Marshall Islands",'MI',"Michigan",'MN',"Minnesota",'MO',"Missouri",'MP',"Northern Mariana Islands",'MS',"Mississippi",'MT',"Montana",'NC',"North Carolina",'ND',"North Dakota",'NE',"Nebraska",'NH',"New Hampshire",'NJ',"New Jersey",'NM',"New Mexico",'NV',"Nevada",'NY',"New York",'OH',"Ohio",'OK',"Oklahoma",'OR',"Oregon",'PA',"Pennsylvania",'PR',"Puerto Rico",'PW',"Palau",'RI',"Rhode Island",'SC',"South Carolina",'SD',"South Dakota",'TN',"Tennessee",'TX',"Texas",'UT',"Utah",'VA',"Virginia",'VI',"Virgin Islands",'VT',"Vermont",'WA',"Washington",'WV',"West Virginia",'WI',"Wisconsin",'WY',"Wyoming");my %region=('ca'=>\%regca,'us'=>\%regus);# ----->#-----------------------------------------------------------------------------# PLUGIN FUNCTION: Init_pluginname#-----------------------------------------------------------------------------sub Init_geoip_region_maxmind { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); $MAXNBOFSECTIONGIR=10; # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin geoip_region_maxmind: InitParams=$InitParams",1); my ($mode,$datafile)=split(/\s+/,$InitParams,2); if (! $datafile) { $datafile="GeoIPRegion.dat"; } if ($type eq 'geoippureperl') { if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_MEMORY_CACHE(); } else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } } else { if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } else { $mode=Geo::IP::GEOIP_STANDARD(); } } %TmpDomainLookup=(); debug(" Plugin geoip_region_maxmind: GeoIP initialized type=$type mode=$mode",1); if ($type eq 'geoippureperl') { $geoip_region_maxmind = Geo::IP::PurePerl->open($datafile, $mode); } else { $geoip_region_maxmind = Geo::IP->open($datafile, $mode); }# Fails with some geoip versions# debug(" Plugin geoip_region_maxmind: GeoIP initialized database_info=".$geoip_region_maxmind->database_info()); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions");}#-----------------------------------------------------------------------------# PLUGIN FUNCTION: AddHTMLMenuLink_pluginname# UNIQUE: NO (Several plugins using this function can be loaded)#-----------------------------------------------------------------------------sub AddHTMLMenuLink_geoip_region_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- if ($Debug) { debug(" Plugin geoip_region_maxmind: AddHTMLMenuLink"); } if ($categ eq 'who') { $menu->{'plugin_geoip_region_maxmind'}=2.1; # Pos $menulink->{'plugin_geoip_region_maxmind'}=2; # Type of link $menutext->{'plugin_geoip_region_maxmind'}="Regions"; # Text } # -----> return 0;}#-----------------------------------------------------------------------------# PLUGIN FUNCTION: AddHTMLGraph_pluginname# UNIQUE: NO (Several plugins using this function can be loaded)#-----------------------------------------------------------------------------sub AddHTMLGraph_geoip_region_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- my $ShowRegions='H'; $MinHit{'Regions'}=1; my $total_p; my $total_h; my $total_k; my $rest_p; my $rest_h; my $rest_k; if ($Debug) { debug(" Plugin geoip_region_maxmind: AddHTMLGraph"); } my $title='Regions'; &tab_head("$title",19,0,'regions'); print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>US and CA Regions : ".((scalar keys %_region_h)-($_region_h{'unknown'}?1:0))."</th>"; if ($ShowRegions =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; } if ($ShowRegions =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; } if ($ShowRegions =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; } if ($ShowRegions =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; } if ($ShowRegions =~ /B/i) { print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; } if ($ShowRegions =~ /L/i) { print "<th width=\"120\">$Message[9]</th>"; } print "</tr>\n"; $total_p=$total_h=$total_k=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Regions'},\%_region_h,\%_region_h); # Group by country my @countrylist=('ca','us'); foreach my $country (@countrylist) { print "<tr><td class=\"aws\"><b>".$countryregionlib{$country}."</b></td>"; if ($ShowRegions =~ /P/i) { print "<td> </td>"; } if ($ShowRegions =~ /P/i) { print "<td> </td>"; } if ($ShowRegions =~ /H/i) { print "<td> </td>"; } if ($ShowRegions =~ /H/i) { print "<td> </td>"; } if ($ShowRegions =~ /B/i) { print "<td> </td>"; } if ($ShowRegions =~ /L/i) { print "<td> </td>"; } print "</tr>\n"; foreach my $key (@keylist) { if ($key eq 'unknown') { next; } my ($countrycode,$regioncode)=split('_',$key); if ($countrycode ne $country) { next; } my $p_p; my $p_h; if ($TotalPages) { $p_p=int($_region_p{$key}/$TotalPages*1000)/10; } if ($TotalHits) { $p_h=int($_region_h{$key}/$TotalHits*1000)/10; } print "<tr><td class=\"aws\">".$region{$countrycode}{uc($regioncode)}." ($regioncode)</td>"; if ($ShowRegions =~ /P/i) { print "<td>".($_region_p{$key}?$_region_p{$key}:" ")."</td>"; } if ($ShowRegions =~ /P/i) { print "<td>".($_region_p{$key}?"$p_p %":' ')."</td>"; } if ($ShowRegions =~ /H/i) { print "<td>".($_region_h{$key}?$_region_h{$key}:" ")."</td>"; } if ($ShowRegions =~ /H/i) { print "<td>".($_region_h{$key}?"$p_h %":' ')."</td>"; } if ($ShowRegions =~ /B/i) { print "<td>".Format_Bytes($_region_k{$key})."</td>"; } if ($ShowRegions =~ /L/i) { print "<td>".($_region_p{$key}?Format_Date($_region_l{$key},1):'-')."</td>"; } print "</tr>\n"; $total_p += $_region_p{$key}||0; $total_h += $_region_h{$key}; $total_k += $_region_k{$key}||0; $count++; } } if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } $rest_p=0; $rest_h=$TotalHits-$total_h; $rest_k=0; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other regions print "<tr><td class=\"aws\"> </td>"; if ($ShowRegions =~ /P/i) { print "<td> </td>"; } if ($ShowRegions =~ /P/i) { print "<td> </td>"; } if ($ShowRegions =~ /H/i) { print "<td> </td>"; } if ($ShowRegions =~ /H/i) { print "<td> </td>"; } if ($ShowRegions =~ /B/i) { print "<td> </td>"; } if ($ShowRegions =~ /L/i) { print "<td> </td>"; } print "</tr>\n"; my $p_p; my $p_h; if ($TotalPages) { $p_p=int($rest_p/$TotalPages*1000)/10; } if ($TotalHits) { $p_h=int($rest_h/$TotalHits*1000)/10; } print "<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]/$Message[0]</span></td>"; if ($ShowRegions =~ /P/i) { print "<td>".($rest_p?$rest_p:" ")."</td>"; } if ($ShowRegions =~ /P/i) { print "<td>".($rest_p?"$p_p %":' ')."</td>"; } if ($ShowRegions =~ /H/i) { print "<td>".($rest_h?$rest_h:" ")."</td>"; } if ($ShowRegions =~ /H/i) { print "<td>".($rest_h?"$p_h %":' ')."</td>"; } if ($ShowRegions =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; } if ($ShowRegions =~ /L/i) { print "<td> </td>"; } print "</tr>\n";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -