Server IP : 103.119.228.120 / Your IP : 3.133.148.76 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/local/ssl/local/ssl/local/ssl/local/ssl/local/ssl/local/share/perl5/IP/Country/ |
Upload File : |
package IP::Country::Medium; use strict; use Carp; use Socket qw ( inet_aton inet_ntoa AF_INET ); use IP::Country::Fast; use vars qw ( $VERSION ); $VERSION = '0.05'; my $singleton = undef; my $ip_match = qr/^(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])$/o; my $private_ip = qr/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/o; # RFC1918 my $tld_match = qr/\.([a-zA-Z][a-zA-Z])$/o; my %cache; my $cache = 1; # cache is switched on sub new { my $caller = shift; unless (defined $singleton){ my $class = ref($caller) || $caller; $singleton = bless {}, $class; } return $singleton; } sub cache { my $bool = defined $_[1] ? $_[1] : $_[0]; if ($bool){ $cache = 1; } else { $cache = 0; %cache = (); } } sub db_time { return 0; } sub inet_atocc { my $hostname = $_[1] || $_[0]; if ($hostname =~ $ip_match){ # IP address return inet_ntocc(inet_aton($hostname)); } else { # assume domain name if ($cache && exists $cache{$hostname}){ return $cache{$hostname}; } else { if ($hostname =~ $tld_match){ return uc($1); } else { my $cc = IP::Country::Fast::inet_atocc($hostname); $cache{$hostname} = $cc if $cache; return $cc; } } } } sub inet_ntocc { my $ip_addr = $_[1] || $_[0]; if ($cache && exists $cache{$ip_addr}){ return $cache{$ip_addr}; } else { my $ip_dotted = inet_ntoa($ip_addr); return undef if ($ip_dotted =~ $private_ip); if (my $cc = IP::Country::Fast::inet_ntocc($ip_addr)){ return $cc; } elsif (gethostbyaddr($ip_addr, AF_INET) =~ $tld_match){ my $cc = uc($1); $cache{$ip_addr} = $cc if $cache; return $cc; } else { } } return undef; } 1; __END__ =head1 NAME IP::Country::Medium - cached lookup of country codes by IP address and domain name =head1 SYNOPSIS use IP::Country::Medium; =head1 DESCRIPTION See documentation for IP::Country. In addition, IP::Country::Medium objects have a cache() method, which controls whether hostname->cc lookups are cached (on by default). =over 4 =item $ic-E<gt>cache(BOOLEAN) By default, the module caches results of country-code lookups. This feature can be switched off by setting cache to a false value (zero, empty string or undef), and can be switched on again by setting cache to a true value (anything which isn't false). $ic->cache(0); # clears and disables cache $ic->cache(1); # enables the cache The cache is formed at the class level, so any change in caching in one object will affect all objectcs of this class. Turning off the cache also clears the cache. =back =cut