??????????????? ??????????????? php.ini.20150828_1459000064400000014114152532063030007426 0ustar00; |PIG v0.3.2.2| [PHP] suhosin.post.max_vars = 5000 engine = 1 zend.ze1_compatibility_mode = short_open_tag = 1 asp_tags = precision = 14 y2k_compliance = 1 output_buffering = 4096 zlib.output_compression = implicit_flush = unserialize_callback_func = serialize_precision = 100 allow_call_time_pass_reference = safe_mode = ; safe_mode_gid = 1 safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = "PHP_" safe_mode_protected_env_vars = "LD_LIBRARY_PATH" disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source disable_classes = highlight.string = "#DD0000" highlight.comment = "#FF9900" highlight.keyword = "#007700" highlight.bg = "#FFFFFF" highlight.default = "#0000BB" highlight.html = "#000000" expose_php = 1 max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = 6135 display_errors = 0 display_startup_errors = log_errors = 1 log_errors_max_len = 1024 ignore_repeated_errors = ignore_repeated_source = report_memleaks = 1 track_errors = html_errors = error_log = "/hsphere/local/var/httpd/logs/php54_error.log" variables_order = EGPCS register_globals = 0 ; register_long_arrays = 1 register_argc_argv = 1 auto_globals_jit = 1 post_max_size = 50M ; magic_quotes_gpc = 1 magic_quotes_runtime = magic_quotes_sybase = auto_prepend_file = auto_append_file = default_mimetype = "text/html" always_populate_raw_post_data = 1 ;***** Added by go-pear include_path=".:/hsphere/shared/php54/include/php/PEAR" ;***** doc_root = user_dir = extension_dir = "/hsphere/shared/php54/lib/php/extensions/no-debug-non-zts-20100525/" cgi.fix_pathinfo = 1 file_uploads = 1 upload_tmp_dir = upload_max_filesize = 50M allow_url_fopen = 1 allow_url_include = default_socket_timeout = 60 auto_detect_line_endings = 1 [Syslog] define_syslog_variables = [mail function] sendmail_from = postmaster@ sendmail_path = /usr/sbin/sendmail -t -i -fpostmaster@organizedbyromanic.com mail.force_extra_parameters = [SQL] sql.safe_mode = [ODBC] odbc.allow_persistent = odbc.check_persistent = 1 odbc.max_persistent = "-1" odbc.max_links = "-1" odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = mysql.max_persistent = "-1" mysql.max_links = "-1" mysql.default_port = 3306 mysql.default_socket = "/var/lib/mysql/mysql.sock" mysql.default_host = localhost mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = [MySQLi] mysqli.max_links = "-1" mysqli.default_port = 3306 mysqli.default_socket = "/var/lib/mysql/mysql.sock" mysqli.default_host = localhost mysqli.default_user = mysqli.default_pw = mysqli.reconnect = [PostgresSQL] pgsql.allow_persistent = pgsql.auto_reset_persistent = pgsql.max_persistent = "-1" pgsql.max_links = "-1" pgsql.ignore_notice = 0 pgsql.log_notice = 0 [dbx] dbx.colnames_case = lowercase [bcmath] bcmath.scale = 0 [Session] session.save_handler = files session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = "/" session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.bug_compat_42 = 0 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 5 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [Assertion] assert.active = 1 assert.warning = 1 assert.bail = assert.callback = 0 assert.quiet_eval = 0 [Sockets] sockets.use_system_read = 1 [mbstring] mbstring.language = Neutral mbstring.internal_encoding = "EUC-JP" mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = mbstring.detect_order = auto mbstring.substitute_character = mbstring.func_overload = 0 [exif] exif.encode_unicode = "ISO-8859-15" exif.decode_unicode_motorola = "UCS-2BE" exif.decode_unicode_intel = "UCS-2LE" exif.encode_jis = exif.decode_jis_motorola = JIS exif.decode_jis_intel = JIS [soap] soap.wsdl_cache_enabled = 1 soap.wsdl_cache_dir = "/tmp" soap.wsdl_cache_ttl = 86400 [Zend] zend_extension="/hsphere/shared/php54/lib/php/extensions/ZendGuardLoader.so" ; zend_extension_manager.optimizer = "/usr/local/Zend/lib/Optimizer-3.3.3" ; zend_extension_manager.optimizer_ts = "/usr/local/Zend/lib/Optimizer_TS-3.3.3" ; zend_optimizer.version = "3.3.3" ; zend_extension = "/usr/local/Zend/lib/ZendExtensionManager.so" ; zend_extension_ts = "/usr/local/Zend/lib/ZendExtensionManager_TS.so" [suhosin] ; extension = suhosin.so suhosin.executor.include.max_traversal = 4 suhosin.executor.disable_emodifier = 0 suhosin.executor.include.whitelist = "http://,https://,file://,bfa://" suhosin.executor.allow_symlink = 0 suhosin.mail.protect = 1 suhosin.upload.disallow_elf = 1 suhosin.log.syslog = 511 suhosin.log.syslog.facility = 8 suhosin.log.syslog.priority = 1 suhosin.log.sapi = 511 suhosin.session.encrypt = 0 suhosin.cookie.cryptua = 0 suhosin.session.cryptdocroot = 0 suhosin.cookie.cryptdocroot = 0 suhosin.executor.include.whitelist="phar" suhosin.get.max_value_length = 10240 suhosin.request.max_array_index_length = 512 suhosin.get.max_array_index_length = 512 suhosin.post.max_array_index_length = 512 memory_limit = 128M [curl] extension=curl.so [gmp] extension=gmp.so [iconv] extension=iconv.so [imap] extension=imap.so [mysqli] extension=mysqli.so [mysql] extension=mysql.so [odbc] extension=odbc.so [pdo] extension=pdo.so [pdo_mysql] extension=pdo_mysql.so [pdo_pgsql] extension=pdo_pgsql.so [pdo_sqlite] extension=pdo_sqlite.so [pgsql] extension=pgsql.so [sqlite3] extension=sqlite3.so [htscanner] extension=htscanner.so [mongo] extension=mongo.so php5-custom-ini.cgi000075500000000222152532063030010167 0ustar00#!/bin/sh export PHP_FCGI_CHILDREN=3 exec /hsphere/shared/php5/bin/php-cgi -c /hsphere/local/home/sksadmin//organizedbyromanic.com/cgi-bin/php.iniphp.ini.bak_07122020000064400000014226152532063030007551 0ustar00; |PIG v0.3.2.2| [PHP] max_input_vars = 5000 open_basedir = engine = 1 zend.ze1_compatibility_mode = short_open_tag = 1 asp_tags = precision = 14 y2k_compliance = 1 output_buffering = 4096 zlib.output_compression = implicit_flush = unserialize_callback_func = serialize_precision = 100 allow_call_time_pass_reference = safe_mode = ; safe_mode_gid = 1 safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = "PHP_" safe_mode_protected_env_vars = "LD_LIBRARY_PATH" disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source disable_classes = highlight.string = "#DD0000" highlight.comment = "#FF9900" highlight.keyword = "#007700" highlight.bg = "#FFFFFF" highlight.default = "#0000BB" highlight.html = "#000000" expose_php = 1 max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = 6135 display_errors = 0 display_startup_errors = log_errors = 1 log_errors_max_len = 1024 ignore_repeated_errors = ignore_repeated_source = report_memleaks = 1 track_errors = html_errors = error_log = "/hsphere/local/var/httpd/logs/php54_error.log" variables_order = EGPCS register_globals = 0 ; register_long_arrays = 1 register_argc_argv = 1 auto_globals_jit = 1 post_max_size = 50M magic_quotes_gpc = 0 magic_quotes_runtime = magic_quotes_sybase = auto_prepend_file = auto_append_file = default_mimetype = "text/html" always_populate_raw_post_data = 1 ;***** Added by go-pear include_path=".:/hsphere/shared/php54/include/php/PEAR" ;***** doc_root = user_dir = extension_dir = "/hsphere/shared/php54/lib/php/extensions/no-debug-non-zts-20100525/" cgi.fix_pathinfo = 1 file_uploads = 1 upload_tmp_dir = upload_max_filesize = 50M allow_url_fopen = 1 allow_url_include = default_socket_timeout = 60 auto_detect_line_endings = 1 [Syslog] define_syslog_variables = [mail function] sendmail_from = postmaster@ sendmail_path = /usr/sbin/sendmail -t -i -fpostmaster@organizedbyromanic.com mail.force_extra_parameters = [SQL] sql.safe_mode = [ODBC] odbc.allow_persistent = odbc.check_persistent = 1 odbc.max_persistent = "-1" odbc.max_links = "-1" odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = mysql.max_persistent = "-1" mysql.max_links = "-1" mysql.default_port = 3306 mysql.default_socket = "/var/lib/mysql/mysql.sock" mysql.default_host = localhost mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = [MySQLi] mysqli.max_links = "-1" mysqli.default_port = 3306 mysqli.default_socket = "/var/lib/mysql/mysql.sock" mysqli.default_host = localhost mysqli.default_user = mysqli.default_pw = mysqli.reconnect = [PostgresSQL] pgsql.allow_persistent = pgsql.auto_reset_persistent = pgsql.max_persistent = "-1" pgsql.max_links = "-1" pgsql.ignore_notice = 0 pgsql.log_notice = 0 [dbx] dbx.colnames_case = lowercase [bcmath] bcmath.scale = 0 [Session] session.save_handler = files session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = "/" session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.bug_compat_42 = 0 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 5 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [Assertion] assert.active = 1 assert.warning = 1 assert.bail = assert.callback = 0 assert.quiet_eval = 0 [Sockets] sockets.use_system_read = 1 [mbstring] mbstring.language = Neutral mbstring.internal_encoding = "EUC-JP" mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = mbstring.detect_order = auto mbstring.substitute_character = mbstring.func_overload = 0 [exif] exif.encode_unicode = "ISO-8859-15" exif.decode_unicode_motorola = "UCS-2BE" exif.decode_unicode_intel = "UCS-2LE" exif.encode_jis = exif.decode_jis_motorola = JIS exif.decode_jis_intel = JIS [soap] soap.wsdl_cache_enabled = 1 soap.wsdl_cache_dir = "/tmp" soap.wsdl_cache_ttl = 86400 [Zend] zend_extension="/hsphere/shared/php54/lib/php/extensions/ZendGuardLoader.so" ; zend_extension_manager.optimizer = "/usr/local/Zend/lib/Optimizer-3.3.3" ; zend_extension_manager.optimizer_ts = "/usr/local/Zend/lib/Optimizer_TS-3.3.3" ; zend_optimizer.version = "3.3.3" ; zend_extension = "/usr/local/Zend/lib/ZendExtensionManager.so" ; zend_extension_ts = "/usr/local/Zend/lib/ZendExtensionManager_TS.so" [suhosin] ; extension = suhosin.so suhosin.request.max_vars = 5000 suhosin.post.max_vars = 5000 suhosin.executor.include.max_traversal = 4 suhosin.executor.disable_emodifier = 0 suhosin.executor.include.whitelist = "http://,https://,file://,bfa://" suhosin.executor.allow_symlink = 0 suhosin.mail.protect = 1 suhosin.upload.disallow_elf = 1 suhosin.log.syslog = 511 suhosin.log.syslog.facility = 8 suhosin.log.syslog.priority = 1 suhosin.log.sapi = 511 suhosin.session.encrypt = 0 suhosin.cookie.cryptua = 0 suhosin.session.cryptdocroot = 0 suhosin.cookie.cryptdocroot = 0 suhosin.executor.include.whitelist="phar" suhosin.get.max_value_length = 10240 suhosin.request.max_array_index_length = 512 suhosin.get.max_array_index_length = 512 suhosin.post.max_array_index_length = 512 memory_limit = 128M [curl] extension=curl.so [gmp] extension=gmp.so [iconv] extension=iconv.so [imap] extension=imap.so [mysqli] extension=mysqli.so [mysql] extension=mysql.so [odbc] extension=odbc.so [pdo] extension=pdo.so [pdo_mysql] extension=pdo_mysql.so [pdo_pgsql] extension=pdo_pgsql.so [pdo_sqlite] extension=pdo_sqlite.so [pgsql] extension=pgsql.so [sqlite3] extension=sqlite3.so [htscanner] extension=htscanner.so [mongo] extension=mongo.so php54.cgi000075500000000217152532063030006172 0ustar00#!/bin/sh export PHP_FCGI_CHILDREN=3 exec /hsphere/shared/php54/bin/php-cgi /hsphere/local/home/sksadmin/organizedbyromanic.com/cgi-bin/php.iniformmail/formmail.cgi000075500000114625152532063030010657 0ustar00#!/usr/bin/perl ############################################################################## # FormMail Version 1.92 # # Copyright 1995-2002 Matt Wright mattw@scriptarchive.com # # Created 06/09/95 Last Modified 04/21/02 # # Matt's Script Archive, Inc.: http://www.scriptarchive.com/ # ############################################################################## # COPYRIGHT NOTICE # # Copyright 1995-2002 Matthew M. Wright All Rights Reserved. # # # # FormMail may be used and modified free of charge by anyone so long as this # # copyright notice and the comments above remain intact. By using this # # code you agree to indemnify Matthew M. Wright from any liability that # # might arise from its use. # # # # Selling the code for this program without prior written consent is # # expressly forbidden. In other words, please ask first before you try and # # make money off of my program. # # # # Obtain permission before redistributing this software over the Internet or # # in any other medium. In all cases copyright and header must remain intact. # ############################################################################## # ACCESS CONTROL FIX: Peter D. Thompson Yezek # # http://www.securityfocus.com/archive/1/62033 # ############################################################################## # Define Variables # # Detailed Information Found In README File. # # $mailprog defines the location of your sendmail program on your unix # # system. The flags -i and -t should be passed to sendmail in order to # # have it ignore single dots on a line and to read message for recipients # $mailprog = '/usr/sbin/sendmail -i -t'; # @referers allows forms to be located only on servers which are defined # # in this field. This security fix from the last version which allowed # # anyone on any server to use your FormMail script on their web site. # @referers = ('organizedbyromanic.com'); # @recipients defines the e-mail addresses or domain names that e-mail can # # be sent to. This must be filled in correctly to prevent SPAM and allow # # valid addresses to receive e-mail. Read the documentation to find out how # # this variable works!!! It is EXTREMELY IMPORTANT. # @recipients = &fill_recipients(@referers); # ACCESS CONTROL FIX: Peter D. Thompson Yezek # # @valid_ENV allows the sysadmin to define what environment variables can # # be reported via the env_report directive. This was implemented to fix # # the problem reported at http://www.securityfocus.com/bid/1187 # @valid_ENV = ('REMOTE_HOST','REMOTE_ADDR','REMOTE_USER','HTTP_USER_AGENT'); # Done # ############################################################################## # Check Referring URL &check_url; # Retrieve Date &get_date; # Parse Form Contents &parse_form; # Check Required Fields &check_required; # Send E-Mail &send_mail; # Return HTML Page or Redirect User &return_html; # NOTE rev1.91: This function is no longer intended to stop abuse, that # # functionality is now embedded in the checks made on @recipients and the # # recipient form field. # sub check_url { # Localize the check_referer flag which determines if user is valid. # local($check_referer) = 0; # If a referring URL was specified, for each valid referer, make sure # # that a valid referring URL was passed to FormMail. # if ($ENV{'HTTP_REFERER'}) { foreach $referer (@referers) { if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) { $check_referer = 1; last; } } } else { $check_referer = 1; } # If the HTTP_REFERER was invalid, send back an error. # if ($check_referer != 1) { &error('bad_referer') } } sub get_date { # Define arrays for the day of the week and month of the year. # @days = ('Sunday','Monday','Tuesday','Wednesday', 'Thursday','Friday','Saturday'); @months = ('January','February','March','April','May','June','July', 'August','September','October','November','December'); # Get the current time and format the hour, minutes and seconds. Add # # 1900 to the year to get the full 4 digit year. # ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6]; $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec); $year += 1900; # Format the date. # $date = "$days[$wday], $months[$mon] $mday, $year at $time"; } sub parse_form { # Define the configuration associative array. # %Config = ('recipient','', 'subject','', 'email','', 'realname','', 'redirect','', 'bgcolor','', 'background','', 'link_color','', 'vlink_color','', 'text_color','', 'alink_color','', 'title','', 'sort','', 'print_config','', 'required','', 'env_report','', 'return_link_title','', 'return_link_url','', 'print_blank_fields','', 'missing_fields_redirect',''); # Determine the form's REQUEST_METHOD (GET or POST) and split the form # # fields up into their name-value pairs. If the REQUEST_METHOD was # # not GET or POST, send an error. # if ($ENV{'REQUEST_METHOD'} eq 'GET') { # Split the name-value pairs @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the name-value pairs @pairs = split(/&/, $buffer); } else { &error('request_method'); } # For each name-value pair: # foreach $pair (@pairs) { # Split the pair up into individual variables. # local($name, $value) = split(/=/, $pair); # Decode the form encoding on the name and value variables. # # v1.92: remove null bytes # $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $name =~ tr/\0//d; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/\0//d; # If the field name has been specified in the %Config array, it will # # return a 1 for defined($Config{$name}}) and we should associate # # this value with the appropriate configuration variable. If this # # is not a configuration form field, put it into the associative # # array %Form, appending the value with a ', ' if there is already a # # value present. We also save the order of the form fields in the # # @Field_Order array so we can use this order for the generic sort. # if (defined($Config{$name})) { $Config{$name} = $value; } else { if ($Form{$name} ne '') { $Form{$name} = "$Form{$name}, $value"; } else { push(@Field_Order,$name); $Form{$name} = $value; } } } # The next six lines remove any extra spaces or new lines from the # # configuration variables, which may have been caused if your editor # # wraps lines after a certain length or if you used spaces between field # # names or environment variables. # $Config{'required'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $Config{'required'} =~ s/(\s+)?\n+(\s+)?//g; $Config{'env_report'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $Config{'env_report'} =~ s/(\s+)?\n+(\s+)?//g; $Config{'print_config'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $Config{'print_config'} =~ s/(\s+)?\n+(\s+)?//g; # Split the configuration variables into individual field names. # @Required = split(/,/,$Config{'required'}); @Env_Report = split(/,/,$Config{'env_report'}); @Print_Config = split(/,/,$Config{'print_config'}); # ACCESS CONTROL FIX: Only allow ENV variables in @valid_ENV in # # @Env_Report for security reasons. # foreach $env_item (@Env_Report) { foreach $valid_item (@valid_ENV) { if ( $env_item eq $valid_item ) { push(@temp_array, $env_item) } } } @Env_Report = @temp_array; } sub check_required { # Localize the variables used in this subroutine. # local($require, @error); # The following insures that there were no newlines in any fields which # # will be used in the header. # if ($Config{'subject'} =~ /(\n|\r)/m || $Config{'email'} =~ /(\n|\r)/m || $Config{'realname'} =~ /(\n|\r)/m || $Config{'recipient'} =~ /(\n|\r)/m) { &error('invalid_headers'); } if (!$Config{'recipient'}) { if (!defined(%Form)) { &error('bad_referer') } else { &error('no_recipient') } } else { # This block of code requires that the recipient address end with # # a valid domain or e-mail address as defined in @recipients. # $valid_recipient = 0; foreach $send_to (split(/,/,$Config{'recipient'})) { foreach $recipient (@recipients) { if ($send_to =~ /$recipient$/i) { push(@send_to,$send_to); last; } } } if ($#send_to < 0) { &error('no_recipient') } $Config{'recipient'} = join(',',@send_to); } # For each require field defined in the form: # foreach $require (@Required) { # If the required field is the email field, the syntax of the email # # address if checked to make sure it passes a valid syntax. # if ($require eq 'email' && !&check_email($Config{$require})) { push(@error,$require); } # Otherwise, if the required field is a configuration field and it # # has no value or has been filled in with a space, send an error. # elsif (defined($Config{$require})) { if ($Config{$require} eq '') { push(@error,$require); } } # If it is a regular form field which has not been filled in or # # filled in with a space, flag it as an error field. # elsif (!defined($Form{$require}) || $Form{$require} eq '') { push(@error,$require); } } # If any error fields have been found, send error message to the user. # if (@error) { &error('missing_fields', @error) } } sub return_html { # Local variables used in this subroutine initialized. # local($key,$sort_order,$sorted_field); # Now that we have finished using form values for any e-mail related # # reasons, we will convert all of the form fields and config values # # to remove any cross-site scripting security holes. # local($field); foreach $field (keys %Config) { $safeConfig{$field} = &clean_html($Config{$field}); } foreach $field (keys %Form) { $Form{$field} = &clean_html($Form{$field}); } # If redirect option is used, print the redirectional location header. # if ($Config{'redirect'}) { print "Location: $safeConfig{'redirect'}\n\n"; } # Otherwise, begin printing the response page. # else { # Print HTTP header and opening HTML tags. # print "Content-type: text/html\n\n"; print "\n \n"; # Print out title of page # if ($Config{'title'}) { print "$safeConfig{'title'}\n" } else { print "Thank You\n" } print " \n \n
\n"; # Print custom or generic title. # if ($Config{'title'}) { print "

$safeConfig{'title'}

\n" } else { print "

Thank You For Filling Out This Form

\n" } print "
\n"; print "Below is what you submitted to $safeConfig{'recipient'} on "; print "$date


\n"; # If a sort order is specified, sort the form fields based on that. # if ($Config{'sort'} =~ /^order:.*,.*/) { # Set the temporary $sort_order variable to the sorting order, # # remove extraneous line breaks and spaces, remove the order: # # directive and split the sort fields into an array. # $sort_order = $Config{'sort'}; $sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $sort_order =~ s/(\s+)?\n+(\s+)?//g; $sort_order =~ s/order://; @sorted_fields = split(/,/, $sort_order); # For each sorted field, if it has a value or the print blank # # fields option is turned on print the form field and value. # foreach $sorted_field (@sorted_fields) { local $sfname = &clean_html($sorted_field); if ($Config{'print_blank_fields'} || $Form{$sorted_field} ne '') { print "$sfname: $Form{$sorted_field}

\n"; } } } # Otherwise, use the order the fields were sent, or alphabetic. # else { # Sort alphabetically if requested. if ($Config{'sort'} eq 'alphabetic') { @Field_Order = sort @Field_Order; } # For each form field, if it has a value or the print blank # # fields option is turned on print the form field and value. # foreach $field (@Field_Order) { local $fname = &clean_html($field); if ($Config{'print_blank_fields'} || $Form{$field} ne '') { print "$fname: $Form{$field}

\n"; } } } print "


\n"; # Check for a Return Link and print one if found. # if ($Config{'return_link_url'} && $Config{'return_link_title'}) { print "

\n"; } # Print the page footer. # print <<"(END HTML FOOTER)";

FormMail V1.92 © 1995 - 2002 Matt Wright
A Free Product of Matt's Script Archive, Inc.
(END HTML FOOTER) } } sub send_mail { # Localize variables used in this subroutine. # local($print_config,$key,$sort_order,$sorted_field,$env_report); # Open The Mail Program open(MAIL,"|$mailprog"); print MAIL "To: $Config{'recipient'}\n"; print MAIL "From: $Config{'email'} ($Config{'realname'})\n"; # Check for Message Subject if ($Config{'subject'}) { print MAIL "Subject: $Config{'subject'}\n\n" } else { print MAIL "Subject: WWW Form Submission\n\n" } print MAIL "Below is the result of your feedback form. It was submitted by\n"; print MAIL "$Config{'realname'} ($Config{'email'}) on $date\n"; print MAIL "-" x 75 . "\n\n"; if (@Print_Config) { foreach $print_config (@Print_Config) { if ($Config{$print_config}) { print MAIL "$print_config: $Config{$print_config}\n\n"; } } } # If a sort order is specified, sort the form fields based on that. # if ($Config{'sort'} =~ /^order:.*,.*/) { # Remove extraneous line breaks and spaces, remove the order: # # directive and split the sort fields into an array. # local $sort_order = $Config{'sort'}; $sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $sort_order =~ s/(\s+)?\n+(\s+)?//g; $sort_order =~ s/order://; @sorted_fields = split(/,/, $sort_order); # For each sorted field, if it has a value or the print blank # # fields option is turned on print the form field and value. # foreach $sorted_field (@sorted_fields) { if ($Config{'print_blank_fields'} || $Form{$sorted_field} ne '') { print MAIL "$sorted_field: $Form{$sorted_field}\n\n"; } } } # Otherwise, print fields in order they were sent or alphabetically. # else { # Sort alphabetically if specified: # if ($Config{'sort'} eq 'alphabetic') { @Field_Order = sort @Field_Order; } # For each form field, if it has a value or the print blank # # fields option is turned on print the form field and value. # foreach $field (@Field_Order) { if ($Config{'print_blank_fields'} || $Form{$field} ne '') { print MAIL "$field: $Form{$field}\n\n"; } } } print MAIL "-" x 75 . "\n\n"; # Send any specified Environment Variables to recipient. # foreach $env_report (@Env_Report) { if ($ENV{$env_report}) { print MAIL "$env_report: $ENV{$env_report}\n"; } } close (MAIL); } sub check_email { # Initialize local email variable with input to subroutine. # $email = $_[0]; # If the e-mail address contains: # if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || # the e-mail address contains an invalid syntax. Or, if the # # syntax does not match the following regular expression pattern # # it fails basic syntax verification. # $email !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)(\]?)$/) { # Basic syntax requires: one or more characters before the @ sign, # # followed by an optional '[', then any number of letters, numbers, # # dashes or periods (valid domain/IP characters) ending in a period # # and then 2 or 3 letters (for domain suffixes) or 1 to 3 numbers # # (for IP addresses). An ending bracket is also allowed as it is # # valid syntax to have an email address like: user@[255.255.255.0] # # Return a false value, since the e-mail address did not pass valid # # syntax. # return 0; } else { # Return a true value, e-mail verification passed. # return 1; } } # This was added into v1.91 to further secure the recipients array. Now, by # # default it will assume that valid recipients include only users with # # usernames A-Z, a-z, 0-9, _ and - that match your domain exactly. If this # # is not what you want, you should read more detailed instructions regarding # # the configuration of the @recipients variable in the documentation. # sub fill_recipients { local(@domains) = @_; local($domain,@return_recips); foreach $domain (@domains) { if ($domain =~ /^\d+\.\d+\.\d+\.\d+$/) { $domain =~ s/\./\\\./g; push(@return_recips,'^[\w\-\.]+\@\[' . $domain . '\]'); } else { $domain =~ s/\./\\\./g; $domain =~ s/\-/\\\-/g; push(@return_recips,'^[\w\-\.]+\@' . $domain); } } return @return_recips; } # This function will convert <, >, & and " to their HTML equivalents. # sub clean_html { local $value = $_[0]; $value =~ s/\&/\&/g; $value =~ s//\>/g; $value =~ s/"/\"/g; return $value; } sub body_attributes { # Check for Background Color if ($Config{'bgcolor'}) { print " bgcolor=\"$safeConfig{'bgcolor'}\"" } # Check for Background Image if ($Config{'background'}) { print " background=\"$safeConfig{'background'}\"" } # Check for Link Color if ($Config{'link_color'}) { print " link=\"$safeConfig{'link_color'}\"" } # Check for Visited Link Color if ($Config{'vlink_color'}) { print " vlink=\"$safeConfig{'vlink_color'}\"" } # Check for Active Link Color if ($Config{'alink_color'}) { print " alink=\"$safeConfig{'alink_color'}\"" } # Check for Body Text Color if ($Config{'text_color'}) { print " text=\"$safeConfig{'text_color'}\"" } } sub error { # Localize variables and assign subroutine input. # local($error,@error_fields) = @_; local($host,$missing_field,$missing_field_list); if ($error eq 'bad_referer') { if ($ENV{'HTTP_REFERER'} =~ m|^https?://([\w\.]+)|i) { $host = $1; my $referer = &clean_html($ENV{'HTTP_REFERER'}); print <<"(END ERROR HTML)"; Content-type: text/html Bad Referrer - Access Denied
Bad Referrer - Access Denied
The form attempting to use FormMail resides at $referer, which is not allowed to access this cgi script.

If you are attempting to configure FormMail to run with this form, you need to add the following to \@referers, explained in detail in the README file.

Add '$host' to your \@referers array.


FormMail V1.92 © 1995 - 2002 Matt Wright
A Free Product of Matt's Script Archive, Inc.
(END ERROR HTML) } else { print <<"(END ERROR HTML)"; Content-type: text/html FormMail v1.92
FormMail
Copyright 1995 - 2002 Matt Wright
Version 1.92 - Released April 21, 2002
A Free Product of Matt's Script Archive, Inc.
(END ERROR HTML) } } elsif ($error eq 'request_method') { print <<"(END ERROR HTML)"; Content-type: text/html Error: Request Method
Error: Request Method
The Request Method of the Form you submitted did not match either GET or POST. Please check the form and make sure the method= statement is in upper case and matches GET or POST.

FormMail V1.92 © 1995 - 2002 Matt Wright
A Free Product of Matt's Script Archive, Inc.
(END ERROR HTML) } elsif ($error eq 'no_recipient') { print <<"(END ERROR HTML)"; Content-type: text/html Error: Bad/No Recipient
Error: Bad/No Recipient
There was no recipient or an invalid recipient specified in the data sent to FormMail. Please make sure you have filled in the recipient form field with an e-mail address that has been configured in \@recipients. More information on filling in recipient form fields and variables can be found in the README file.
FormMail V1.92 © 1995 - 2002 Matt Wright
A Free Product of Matt's Script Archive, Inc.
(END ERROR HTML) } elsif ($error eq 'invalid_headers') { print <<"(END ERROR HTML)"; Content-type: text/html Error: Bad Header Fields
Error: Bad Header Fields
The header fields, which include recipient, email, realname and subject were filled in with invalid values. You may not include any newline characters in these parameters. More information on filling in these form fields and variables can be found in the README file.
FormMail V1.92 © 1995 - 2002 Matt Wright
A Free Product of Matt's Script Archive, Inc.
(END ERROR HTML) } elsif ($error eq 'missing_fields') { if ($Config{'missing_fields_redirect'}) { print "Location: " . &clean_html($Config{'missing_fields_redirect'}) . "\n\n"; } else { foreach $missing_field (@error_fields) { $missing_field_list .= "
  • " . &clean_html($missing_field) . "\n"; } print <<"(END ERROR HTML)"; Content-type: text/html Error: Blank Fields
    Error: Blank Fields
    The following fields were left blank in your submission form:

      $missing_field_list

    These fields must be filled in before you can successfully submit the form.

    Please use your browser's back button to return to the form and try again.


    FormMail V1.92 © 1995 - 2002 Matt Wright
    A Free Product of Matt's Script Archive, Inc.
    (END ERROR HTML) } } exit; } guestbook/Datafiles/README.DATAFILES000064400000000200152532063030012604 0ustar00Note that when you first install this script, this directory will be empty. Don't worry, it will fill up as you run the app :) guestbook/Datafiles/guestbook.log000064400000000735152532063030013153 0ustar00Tue Sep 15 08:08:46 2009|INFO|ADDITION PERFORMED ADD_DEFINITION: reviewed_by_admin= location=8593560023 record_id= comments=A guest book with hidden records could do the trick ... lname=Pronay fname=Sean date_time_posted=2009-09-15 08:08:46 email=sean@tvadpro.com Tue Sep 15 08:31:07 2009|INFO|ADDITION PERFORMED ADD_DEFINITION: reviewed_by_admin= location=8593630134 record_id= comments=Is email required? lname=Fichlie fname=Chris date_time_posted=2009-09-15 08:31:07 email= guestbook/Datafiles/index.html000064400000000036152532063030012435 0ustar00 Restricted.... guestbook/Datafiles/Uploads/readme.txt000064400000000176152532063030014052 0ustar00I am sorry but this directory is restricted. Please contact the system administrator of this site if you have become lost. guestbook/Datafiles/guestbook.dat000064400000000273152532063030013137 0ustar001|Sean|Pronay|8593560023|sean@tvadpro.com|A guest book with hidden records could do the trick ...||2009-09-15 08:08:46 2|Chris|Fichlie|8593630134||Is email required?||2009-09-15 08:31:07 guestbook/Datafiles/guestbook.dat.count000064400000000002152532063030014254 0ustar002 guestbook/Datafiles/Sessions/index.html000064400000000036152532063030014243 0ustar00 Restricted.... guestbook/guestbook.cgi000075500000031032152532063030011235 0ustar00#!/usr/bin/perl -wT # Copyright (C) 1994 - 2001 eXtropia.com # # 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., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. use strict; use lib qw( /hsphere/shared/perl/Extropia/Modules /hsphere/shared/perl/Extropia/ActionHandlers /hsphere/shared/perl/Extropia/Views/Extropia/WebDB /hsphere/shared/perl/Extropia/Views/Extropia/WebDB/Guestbook /hsphere/shared/perl/Extropia/Views/Extropia/AuthManager /hsphere/shared/perl/Extropia/Views/Extropia/StandardTemplates ); # The following is only of interest to mod_perl, PerlEx, # and other Perl acceleration users unshift @INC, qw( /hsphere/shared/perl/Extropia/Modules /hsphere/shared/perl/Extropia/ActionHandlers /hsphere/shared/perl/Extropia/Views/Extropia/WebDB /hsphere/shared/perl/Extropia/Views/Extropia/WebDB/Guestbook /hsphere/shared/perl/Extropia/Views/Extropia/AuthManager /hsphere/shared/perl/Extropia/Views/Extropia/StandardTemplates ) if ($INC[0] ne "../../Modules"); use CGI qw(-debug); use CGI::Carp qw(fatalsToBrowser); use Extropia::App::DBApp; use Extropia::View; use Extropia::SessionManager; my $CGI = new CGI() or die("Unable to construct the CGI object" . ". Please contact the webmaster."); my $VIEW_LOADER = new Extropia::View() or die("Unable to construct the VIEW LOADER object in " . $CGI->script_name() . ". Please contact the webmaster."); my $DATAFILES_DIRECTORY = "./Datafiles"; foreach ($CGI->param()) { $CGI->param($1,$CGI->param($_)) if (/(.*)\.x/); } ###################################################################### # DATA HANDLER SETUP # ###################################################################### my @ADD_FORM_DHM_CONFIG_PARAMS = ( -TYPE => 'CGI', -CGI_OBJECT => $CGI, -DATAHANDLERS => [qw( Exists HTML String )], -FIELD_MAPPINGS => { 'fname' => 'First Name', 'lname' => 'Last Name', 'email' => 'Email', 'location' => 'Location', 'comments' => 'Comments', }, -RULES => [ -ESCAPE_HTML_TAGS => [ -FIELDS => [qw( * )], ], -SUBSTITUTE_ONE_STRING_FOR_ANOTHER => [ -FIELDS => [qw( * )], -ORIGINAL_STRING => '"', -NEW_STRING => "''" ], -IS_FILLED_IN => [ -FIELDS => [qw( comments )] ] ] ); my @DATA_HANDLER_MANAGER_CONFIG_PARAMS = ( -ADD_FORM_DHM_CONFIG_PARAMS => \@ADD_FORM_DHM_CONFIG_PARAMS ); ###################################################################### # DATASOURCE SETUP # ###################################################################### my @DATASOURCE_FIELD_NAMES = qw( record_id fname lname location email comments reviewed_by_admin date_time_posted ); my %BASIC_INPUT_WIDGET_DEFINITIONS = ( lname => [ -DISPLAY_NAME => 'Last Name', -TYPE => 'textfield', -NAME => 'lname', -SIZE => 30, -MAXLENGTH => 80 ], fname => [ -DISPLAY_NAME => 'First Name', -TYPE => 'textfield', -NAME => 'fname', -SIZE => 30, -MAXLENGTH => 80 ], location => [ -DISPLAY_NAME => 'Telephone', -TYPE => 'textfield', -NAME => 'location', -SIZE => 30, -MAXLENGTH => 80 ], email => [ -DISPLAY_NAME => 'Email', -TYPE => 'textfield', -NAME => 'email', -SIZE => 30, -MAXLENGTH => 80 ], comments => [ -DISPLAY_NAME => 'Comments', -TYPE => 'textarea', -NAME => 'comments', -ROWS => 6, -COLS => 30, -WRAP => 'VIRTUAL' ] ); my @BASIC_INPUT_WIDGET_DISPLAY_ORDER = qw( fname lname location email comments ); my @INPUT_WIDGET_DEFINITIONS = ( -BASIC_INPUT_WIDGET_DEFINITIONS => \%BASIC_INPUT_WIDGET_DEFINITIONS, -BASIC_INPUT_WIDGET_DISPLAY_ORDER => \@BASIC_INPUT_WIDGET_DISPLAY_ORDER ); my @BASIC_DATASOURCE_CONFIG_PARAMS = ( -TYPE => 'File', -CREATE_FILE_IF_NONE_EXISTS => 1, -FILE => "$DATAFILES_DIRECTORY/guestbook.dat", -COMMENT_PREFIX => '#', -FIELD_DELIMITER => '|', -FIELD_NAMES => \@DATASOURCE_FIELD_NAMES, -KEY_FIELDS => ['record_id'], -FIELD_TYPES => { record_id => 'Autoincrement' } ); my @DATASOURCE_CONFIG_PARAMS = ( -BASIC_DATASOURCE_CONFIG_PARAMS => \@BASIC_DATASOURCE_CONFIG_PARAMS, ); ###################################################################### # MAILER SETUP # ###################################################################### my @MAIL_CONFIG_PARAMS = ( -TYPE => 'Sendmail' ); my @EMAIL_DISPLAY_FIELDS = qw( subject abstract full_text ); my @ADD_EVENT_MAIL_SEND_PARAMS = ( -FROM => $CGI->param('email'), -TO => 'sean@tvadpro.com', -REPLY_TO => 'sean@tvadpro.com', -SUBJECT => 'New contact' ); my @MAIL_SEND_PARAMS = ( -ADD_EVENT_MAIL_SEND_PARAMS => \@ADD_EVENT_MAIL_SEND_PARAMS, ); ################################################################## # LOGGING SETUP # ################################################################## my @LOG_CONFIG_PARAMS = ( -TYPE => 'File', -LOG_FILE => "$DATAFILES_DIRECTORY/guestbook.log", -LOG_ENTRY_SUFFIX => '|' . _generateEnvVarsString() . '|', -LOG_ENTRY_PREFIX => 'Guestbook|' ); sub _generateEnvVarsString { my @env_values; my $key; foreach $key (keys %ENV) { push (@env_values, "$key=" . $ENV{$key}); } return join ("\|", @env_values); } ###################################################################### # VIEW SETUP # ###################################################################### my @VALID_VIEWS = qw( CSSView AddAcknowledgementView AddRecordConfirmationView SessionTimeoutErrorView AddRecordView GuestbookView ); my @VIEW_DISPLAY_PARAMS = ( -INPUT_WIDGET_DEFINITIONS => \@INPUT_WIDGET_DEFINITIONS, -APPLICATION_LOGO => 'logo.gif', -APPLICATION_LOGO_HEIGHT => '40', -APPLICATION_LOGO_WIDTH => '353', -APPLICATION_LOGO_ALT => 'Guestbook Demo', -HTTP_HEADER_PARAMS => [-EXPIRES => '-1d'], -DOCUMENT_ROOT_URL => '/', -IMAGE_ROOT_URL => '/cp/images/Extropia', -LINK_TARGET => '_self', -SCRIPT_DISPLAY_NAME => 'Guestbook', -SCRIPT_NAME => $CGI->script_name(), -EMAIL_DISPLAY_FIELDS => \@EMAIL_DISPLAY_FIELDS, -HOME_VIEW => 'GuestbookView', -FIELD_NAME_MAPPINGS => { fname => "First Name", lname => "Last Name", email => "Email", location => "Telephone", comments => "Comments" }, -DISPLAY_FIELDS => [qw( fname lname email location comments )], -SELECTED_DISPLAY_FIELDS => [qw( fname lname email location comments )], -SORT_FIELDS => [qw( fname )] ); ###################################################################### # FILTER SETUP # ###################################################################### my @HTMLIZE_FILTER_CONFIG_PARAMS = ( -TYPE => 'HTMLize', -CONVERT_DOUBLE_LINEBREAK_TO_P => 1, -CONVERT_LINEBREAK_TO_BR => 1, ); my @CHARSET_FILTER_CONFIG_PARAMS = ( -TYPE => 'CharSet' ); my @EMBED_FILTER_CONFIG_PARAMS = ( -TYPE => 'Embed', -ENABLE => 0 ); my @VIEW_FILTERS_CONFIG_PARAMS = ( \@HTMLIZE_FILTER_CONFIG_PARAMS, \@CHARSET_FILTER_CONFIG_PARAMS, \@EMBED_FILTER_CONFIG_PARAMS ); ###################################################################### # ACTION/WORKFLOW SETUP # ###################################################################### my @ACTION_HANDLER_LIST = qw( DisplayCSSViewAction DisplaySessionTimeoutErrorAction DownloadFileAction DisplayAddFormAction DisplayAddRecordConfirmationAction ProcessAddRequestAction DisplayBasicDataViewAction DefaultAction ); my @ACTION_HANDLER_ACTION_PARAMS = ( -ACTION_HANDLER_LIST => \@ACTION_HANDLER_LIST, -ADD_ACKNOWLEDGEMENT_VIEW_NAME => 'AddAcknowledgementView', -ADD_RECORD_CONFIRMATION_VIEW_NAME => 'AddRecordConfirmationView', -ALLOW_ADDITIONS_FLAG => 1, -ADD_FORM_VIEW_NAME => 'AddRecordView', -ADD_EMAIL_BODY_VIEW => 'AddEventEmailView', -BASIC_DATA_VIEW_NAME => 'GuestbookView', -CGI_OBJECT => $CGI, -CSS_VIEW_URL => $CGI->script_name() . "?display_css_view=on", -CSS_VIEW_NAME => "CSSView", -DATA_HANDLER_MANAGER_CONFIG_PARAMS => \@DATA_HANDLER_MANAGER_CONFIG_PARAMS, -DEFAULT_SORT_FIELD1 => 'title', -DEFAULT_SORT_FIELD2 => 'abstract', -DISPLAY_ACKNOWLEDGEMENT_ON_ADD_FLAG => 1, -DISPLAY_CONFIRMATION_ON_ADD_FLAG => 1, -DATASOURCE_CONFIG_PARAMS => \@DATASOURCE_CONFIG_PARAMS, -HIDDEN_ADMIN_FIELDS_VIEW_NAME => 'HiddenAdminFieldsView', -URL_ENCODED_ADMIN_FIELDS_VIEW_NAME => 'URLEncodedAdminFieldsView', -LOG_CONFIG_PARAMS => \@LOG_CONFIG_PARAMS, -MAIL_CONFIG_PARAMS => \@MAIL_CONFIG_PARAMS, -MAIL_SEND_PARAMS => \@MAIL_SEND_PARAMS, -SEND_EMAIL_ON_ADD_FLAG => 0, -SESSION_TIMEOUT_VIEW_NAME => 'SessionTimeoutErrorView', -VIEW_FILTERS_CONFIG_PARAMS => \@VIEW_FILTERS_CONFIG_PARAMS, -VIEW_DISPLAY_PARAMS => \@VIEW_DISPLAY_PARAMS, -VALID_VIEWS => \@VALID_VIEWS, -VIEW_LOADER => $VIEW_LOADER, -MAX_RECORDS_PER_PAGE => $CGI->param('records_per_page') || 10, -SORT_FIELD1 => $CGI->param('sort_field1') || 'category', -SORT_FIELD2 => $CGI->param('sort_field2') || 'fname', -SORT_DIRECTION => $CGI->param('sort_direction') || 'DESC', -SIMPLE_SEARCH_STRING => $CGI->param('simple_search_string') || "", -FIRST_RECORD_ON_PAGE => $CGI->param('first_record_to_display') || 0, -LAST_RECORD_ON_PAGE => $CGI->param('first_record_to_display') || "0", -KEY_FIELD => 'record_id', -PAGE_TOP_VIEW => 'PageTopView', -PAGE_BOTTOM_VIEW => 'PageBottomView' ); ###################################################################### # LOAD APPLICATION # ###################################################################### my $APP = new Extropia::App::DBApp( -ACTION_HANDLER_ACTION_PARAMS => \@ACTION_HANDLER_ACTION_PARAMS, -ACTION_HANDLER_LIST => \@ACTION_HANDLER_LIST, -VIEW_DISPLAY_PARAMS => \@VIEW_DISPLAY_PARAMS ) or die("Unable to construct the application object in " . $CGI->script_name() . ". Please contact the webmaster."); print $APP->execute(); guestbook/index.html000064400000000036152532063030010541 0ustar00 Restricted.... php.ini.20150828_1457000064400000014232152532063030007425 0ustar00; |PIG v0.3.2.1| [PHP] max_input_vars = 5000 open_basedir = engine = 1 zend.ze1_compatibility_mode = short_open_tag = 1 asp_tags = precision = 14 y2k_compliance = 1 output_buffering = 4096 zlib.output_compression = implicit_flush = unserialize_callback_func = serialize_precision = 100 allow_call_time_pass_reference = safe_mode = ; safe_mode_gid = 1 safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = "PHP_" safe_mode_protected_env_vars = "LD_LIBRARY_PATH" disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source disable_classes = highlight.string = "#DD0000" highlight.comment = "#FF9900" highlight.keyword = "#007700" highlight.bg = "#FFFFFF" highlight.default = "#0000BB" highlight.html = "#000000" expose_php = 1 max_execution_time = 300 max_input_time = 600 memory_limit = 128M error_reporting = 6135 display_errors = 0 display_startup_errors = log_errors = 1 log_errors_max_len = 1024 ignore_repeated_errors = ignore_repeated_source = report_memleaks = 1 track_errors = html_errors = error_log = "/hsphere/local/var/httpd/logs/php54_error.log" variables_order = EGPCS register_globals = 0 ; register_long_arrays = 1 register_argc_argv = 1 auto_globals_jit = 1 post_max_size = 50M ; magic_quotes_gpc = 1 magic_quotes_runtime = magic_quotes_sybase = auto_prepend_file = auto_append_file = default_mimetype = "text/html" always_populate_raw_post_data = 1 ;***** Added by go-pear include_path=".:/hsphere/shared/php54/include/php/PEAR" ;***** doc_root = user_dir = extension_dir = "/hsphere/shared/php54/lib/php/extensions/no-debug-non-zts-20100525/" cgi.fix_pathinfo = 1 file_uploads = 1 upload_tmp_dir = upload_max_filesize = 50M allow_url_fopen = 1 allow_url_include = default_socket_timeout = 60 auto_detect_line_endings = 1 [Syslog] define_syslog_variables = [mail function] sendmail_from = postmaster@ sendmail_path = /usr/sbin/sendmail -t -i -fpostmaster@organizedbyromanic.com mail.force_extra_parameters = [SQL] sql.safe_mode = [ODBC] odbc.allow_persistent = odbc.check_persistent = 1 odbc.max_persistent = "-1" odbc.max_links = "-1" odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = mysql.max_persistent = "-1" mysql.max_links = "-1" mysql.default_port = 3306 mysql.default_socket = "/var/lib/mysql/mysql.sock" mysql.default_host = localhost mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = [MySQLi] mysqli.max_links = "-1" mysqli.default_port = 3306 mysqli.default_socket = "/var/lib/mysql/mysql.sock" mysqli.default_host = localhost mysqli.default_user = mysqli.default_pw = mysqli.reconnect = [PostgresSQL] pgsql.allow_persistent = pgsql.auto_reset_persistent = pgsql.max_persistent = "-1" pgsql.max_links = "-1" pgsql.ignore_notice = 0 pgsql.log_notice = 0 [dbx] dbx.colnames_case = lowercase [bcmath] bcmath.scale = 0 [Session] session.save_handler = files session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = "/" session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.bug_compat_42 = 0 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 5 suhosin.post.max_vars = 5000 suhosin.request.max_vars = 5000 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [Assertion] assert.active = 1 assert.warning = 1 assert.bail = assert.callback = 0 assert.quiet_eval = 0 [Sockets] sockets.use_system_read = 1 [mbstring] mbstring.language = Neutral mbstring.internal_encoding = "EUC-JP" mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = mbstring.detect_order = auto mbstring.substitute_character = mbstring.func_overload = 0 [exif] exif.encode_unicode = "ISO-8859-15" exif.decode_unicode_motorola = "UCS-2BE" exif.decode_unicode_intel = "UCS-2LE" exif.encode_jis = exif.decode_jis_motorola = JIS exif.decode_jis_intel = JIS [soap] soap.wsdl_cache_enabled = 1 soap.wsdl_cache_dir = "/tmp" soap.wsdl_cache_ttl = 86400 [Zend] zend_extension="/hsphere/shared/php54/lib/php/extensions/ZendGuardLoader.so" ; zend_extension_manager.optimizer = "/usr/local/Zend/lib/Optimizer-3.3.3" ; zend_extension_manager.optimizer_ts = "/usr/local/Zend/lib/Optimizer_TS-3.3.3" ; zend_optimizer.version = "3.3.3" ; zend_extension = "/usr/local/Zend/lib/ZendExtensionManager.so" ; zend_extension_ts = "/usr/local/Zend/lib/ZendExtensionManager_TS.so" [suhosin] ; extension = suhosin.so suhosin.executor.include.max_traversal = 4 suhosin.executor.disable_emodifier = 0 suhosin.executor.include.whitelist = "http://,https://,file://,bfa://" suhosin.executor.allow_symlink = 0 suhosin.mail.protect = 1 suhosin.upload.disallow_elf = 1 suhosin.log.syslog = 511 suhosin.log.syslog.facility = 8 suhosin.log.syslog.priority = 1 suhosin.log.sapi = 511 suhosin.session.encrypt = 0 suhosin.cookie.cryptua = 0 suhosin.session.cryptdocroot = 0 suhosin.cookie.cryptdocroot = 0 suhosin.executor.include.whitelist="phar" suhosin.get.max_value_length = 10240 suhosin.request.max_array_index_length = 512 suhosin.get.max_array_index_length = 512 suhosin.post.max_array_index_length = 512 memory_limit = 128M [curl] extension=curl.so [gmp] extension=gmp.so [iconv] extension=iconv.so [imap] extension=imap.so [mysqli] extension=mysqli.so [mysql] extension=mysql.so [odbc] extension=odbc.so [pdo] extension=pdo.so [pdo_mysql] extension=pdo_mysql.so [pdo_pgsql] extension=pdo_pgsql.so [pdo_sqlite] extension=pdo_sqlite.so [pgsql] extension=pgsql.so [sqlite3] extension=sqlite3.so [htscanner] extension=htscanner.so [mongo] extension=mongo.so php.ini000064400000014227152532063030006041 0ustar00; |PIG v0.3.2.2| [PHP] max_input_vars = 5000 open_basedir = engine = 1 zend.ze1_compatibility_mode = short_open_tag = 1 asp_tags = precision = 14 y2k_compliance = 1 output_buffering = 4096 zlib.output_compression = implicit_flush = unserialize_callback_func = serialize_precision = 100 allow_call_time_pass_reference = safe_mode = ; safe_mode_gid = 1 safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = "PHP_" safe_mode_protected_env_vars = "LD_LIBRARY_PATH" disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source disable_classes = highlight.string = "#DD0000" highlight.comment = "#FF9900" highlight.keyword = "#007700" highlight.bg = "#FFFFFF" highlight.default = "#0000BB" highlight.html = "#000000" expose_php = 1 max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = 6135 display_errors = 0 display_startup_errors = log_errors = 1 log_errors_max_len = 1024 ignore_repeated_errors = ignore_repeated_source = report_memleaks = 1 track_errors = html_errors = error_log = "/hsphere/local/var/httpd/logs/php54_error.log" variables_order = EGPCS register_globals = 0 ; register_long_arrays = 1 register_argc_argv = 1 auto_globals_jit = 1 post_max_size = 50M magic_quotes_gpc = 0 magic_quotes_runtime = magic_quotes_sybase = auto_prepend_file = auto_append_file = default_mimetype = "text/html" always_populate_raw_post_data = 1 ;***** Added by go-pear include_path=".:/hsphere/shared/php54/include/php/PEAR" ;***** doc_root = user_dir = extension_dir = "/hsphere/shared/php54/lib/php/extensions/no-debug-non-zts-20100525/" cgi.fix_pathinfo = 1 file_uploads = 1 upload_tmp_dir = upload_max_filesize = 50M allow_url_fopen = 1 allow_url_include = default_socket_timeout = 60 auto_detect_line_endings = 1 [Syslog] define_syslog_variables = [mail function] sendmail_from = postmaster@ sendmail_path = /usr/sbin/sendmail -t -i -fpostmaster@organizedbyromanic.com mail.force_extra_parameters = [SQL] sql.safe_mode = [ODBC] odbc.allow_persistent = odbc.check_persistent = 1 odbc.max_persistent = "-1" odbc.max_links = "-1" odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = mysql.max_persistent = "-1" mysql.max_links = "-1" mysql.default_port = 3306 mysql.default_socket = "/var/lib/mysql/mysql.sock" mysql.default_host = localhost mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = [MySQLi] mysqli.max_links = "-1" mysqli.default_port = 3306 mysqli.default_socket = "/var/lib/mysql/mysql.sock" mysqli.default_host = localhost mysqli.default_user = mysqli.default_pw = mysqli.reconnect = [PostgresSQL] pgsql.allow_persistent = pgsql.auto_reset_persistent = pgsql.max_persistent = "-1" pgsql.max_links = "-1" pgsql.ignore_notice = 0 pgsql.log_notice = 0 [dbx] dbx.colnames_case = lowercase [bcmath] bcmath.scale = 0 [Session] session.save_handler = files session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = "/" session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.bug_compat_42 = 0 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 5 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [Assertion] assert.active = 1 assert.warning = 1 assert.bail = assert.callback = 0 assert.quiet_eval = 0 [Sockets] sockets.use_system_read = 1 [mbstring] mbstring.language = Neutral mbstring.internal_encoding = "EUC-JP" mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = mbstring.detect_order = auto mbstring.substitute_character = mbstring.func_overload = 0 [exif] exif.encode_unicode = "ISO-8859-15" exif.decode_unicode_motorola = "UCS-2BE" exif.decode_unicode_intel = "UCS-2LE" exif.encode_jis = exif.decode_jis_motorola = JIS exif.decode_jis_intel = JIS [soap] soap.wsdl_cache_enabled = 1 soap.wsdl_cache_dir = "/tmp" soap.wsdl_cache_ttl = 86400 [Zend] ;zend_extension="/hsphere/shared/php54/lib/php/extensions/ZendGuardLoader.so" ; zend_extension_manager.optimizer = "/usr/local/Zend/lib/Optimizer-3.3.3" ; zend_extension_manager.optimizer_ts = "/usr/local/Zend/lib/Optimizer_TS-3.3.3" ; zend_optimizer.version = "3.3.3" ; zend_extension = "/usr/local/Zend/lib/ZendExtensionManager.so" ; zend_extension_ts = "/usr/local/Zend/lib/ZendExtensionManager_TS.so" [suhosin] ; extension = suhosin.so suhosin.request.max_vars = 5000 suhosin.post.max_vars = 5000 suhosin.executor.include.max_traversal = 4 suhosin.executor.disable_emodifier = 0 suhosin.executor.include.whitelist = "http://,https://,file://,bfa://" suhosin.executor.allow_symlink = 0 suhosin.mail.protect = 1 suhosin.upload.disallow_elf = 1 suhosin.log.syslog = 511 suhosin.log.syslog.facility = 8 suhosin.log.syslog.priority = 1 suhosin.log.sapi = 511 suhosin.session.encrypt = 0 suhosin.cookie.cryptua = 0 suhosin.session.cryptdocroot = 0 suhosin.cookie.cryptdocroot = 0 suhosin.executor.include.whitelist="phar" suhosin.get.max_value_length = 10240 suhosin.request.max_array_index_length = 512 suhosin.get.max_array_index_length = 512 suhosin.post.max_array_index_length = 512 memory_limit = 128M [curl] extension=curl.so [gmp] extension=gmp.so [iconv] extension=iconv.so [imap] extension=imap.so [mysqli] extension=mysqli.so [mysql] extension=mysql.so [odbc] extension=odbc.so [pdo] extension=pdo.so [pdo_mysql] extension=pdo_mysql.so [pdo_pgsql] extension=pdo_pgsql.so [pdo_sqlite] extension=pdo_sqlite.so [pgsql] extension=pgsql.so [sqlite3] extension=sqlite3.so [htscanner] extension=htscanner.so [mongo] extension=mongo.so .DS_Store000064400000014004152532065620006234 0ustar00Bud1 eslg1Scomp_noteslg1Scompõ_notesmoDDdutcÏ -_notesmodDdutcÏ -_notesph1Scomplanglg1Scomp™ùlangmoDDdutcÐélangmodDdutcÐélangph1Scomp liblg1ScompŒulibmoDDdutcÐélibmodDdutcÐélibph1Scompðpluginslg1ScompáçpluginsmoDDdutcÐépluginsmodDdutcÐépluginsph1Scomp   @€ @€ @€ @ E DSDB `€ @€ @€ @plugins/.DS_Store000064400000014004152532065620007715 0ustar00Bud1 eslg1Scomp_noteslg1Scomp—_notesmoDDdutcÏ r_notesmodDdutcÏ r_notesph1Scompexamplelg1Scomp1#examplemoDDdutcÏ hexamplemodDdutcÏ hexampleph1ScompP  @€ @€ @€ @ E DSDB `€ @€ @€ @plugins/graphapplet.pm000064400000012123152532065620011077 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # GraphApplet AWStats plugin # Allow AWStats to replace bar graphs with an Applet (awgraphapplet) that draw # 3D graphs instead. #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # $Revision: 1.8 $ - $Author: eldy $ - $Date: 2003/12/31 21:41:00 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES # -----> 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.0"; my $PluginHooksFunctions="ShowGraph"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $DirClasses /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_graphapplet { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS $DirClasses=$InitParams; # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #------------------------------------------------------- # PLUGIN FUNCTION: ShowGraph_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # Add the code for call to applet awgraphapplet # Parameters: $title $type $showmonthstats \@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal # Input: None # Output: HTML code for awgraphapplet insertion # Return: 0 OK, 1 Error #------------------------------------------------------- sub ShowGraph_graphapplet() { my $title=shift; my $type=shift; my $showmonthstats=shift; my $blocklabel=shift; my $vallabel=shift; my $valcolor=shift; my $valmax=shift; my $valtotal=shift; my $valaverage=shift; my $valdata=shift; my $graphwidth=780; my $graphheight=400; my $blockspacing=5; my $valspacing=1; my $valwidth=5; my $barsize=0; my $blockfontsize=11; if ($type eq 'month') { $graphwidth=540; $graphheight=160; $blockspacing=8; $valspacing=0; $valwidth=6; $barsize=$BarHeight; $blockfontsize=11; } elsif ($type eq 'daysofmonth') { $graphwidth=640; $graphheight=160; $blockspacing=3; $valspacing=0; $valwidth=4; $barsize=$BarHeight; $blockfontsize=9; } elsif ($type eq 'daysofweek') { $graphwidth=300; $graphheight=160; $blockspacing=10; $valspacing=0; $valwidth=6; $barsize=$BarHeight; $blockfontsize=10; } elsif ($type eq 'hours') { $graphwidth=600; $graphheight=160; $blockspacing=4; $valspacing=0; $valwidth=6; $barsize=$BarHeight; $blockfontsize=11; } else { error("Unknown type parameter in ShowGraph_graphapplet function"); } # print "\n"; print "\n"; print < EOF print "\n"; print "\n"; foreach my $i (1..(scalar @$blocklabel)) { print "\n"; } print "\n"; foreach my $i (1..(scalar @$vallabel)) { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print < EOF foreach my $j (1..(scalar @$blocklabel)) { my $b=''; foreach my $i (0..(scalar @$vallabel)-1) { $b.=@$valdata[($j-1)*(scalar @$vallabel)+$i]." "; } $b=~s/\s$//; print "\n"; } print "
    \n"; return 0; } 1; # Do not remove this line plugins/geoip_org_maxmind.pm000064400000041034152532065620012262 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # GeoIp_Org_Maxmind AWStats plugin # This plugin allow you to add a city report. # Need the licensed ISP database from Maxmind. #----------------------------------------------------------------------------- # Perl Required Modules: Geo::IP or Geo::IP::PurePerl #----------------------------------------------------------------------------- # $Revision: 1.9 $ - $Author: eldy $ - $Date: 2008/03/15 00:17:13 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES use 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.2"; my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost SectionInitHashArray SectionProcessIp SectionProcessHostname SectionReadHistory SectionWriteHistory"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $geoip_org_maxmind %_org_p %_org_h %_org_k %_org_l $MAXNBOFSECTIONGIR $MAXLENGTH /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_geoip_org_maxmind { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); $MAXNBOFSECTIONGIR=10; $MAXLENGTH=20; # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin geoip_org_maxmind: InitParams=$InitParams",1); my ($mode,$datafile)=split(/\s+/,$InitParams,2); if (! $datafile) { $datafile="GeoIPOrg.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_org_maxmind: GeoIP initialized type=$type mode=$mode",1); if ($type eq 'geoippureperl') { $geoip_org_maxmind = Geo::IP::PurePerl->open($datafile, $mode); } else { $geoip_org_maxmind = Geo::IP->open($datafile, $mode); } # Fails on some GeoIP version # debug(" Plugin geoip_org_maxmind: GeoIP initialized database_info=".$geoip_org_maxmind->database_info()); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLMenuLink_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub AddHTMLMenuLink_geoip_org_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- if ($Debug) { debug(" Plugin geoip_org_maxmind: AddHTMLMenuLink"); } if ($categ eq 'who') { $menu->{'plugin_geoip_org_maxmind'}=0.5; # Pos $menulink->{'plugin_geoip_org_maxmind'}=2; # Type of link $menutext->{'plugin_geoip_org_maxmind'}="Organizations"; # Text } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLGraph_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub AddHTMLGraph_geoip_org_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- my $ShowISP='H'; $MinHit{'Org'}=1; my $total_p; my $total_h; my $total_k; my $rest_p; my $rest_h; my $rest_k; if ($Debug) { debug(" Plugin geoip_org_maxmind: AddHTMLGraph $categ $menu $menulink $menutext"); } my $title='Organizations'; &tab_head("$title",19,0,'org'); print "Organizations : ".((scalar keys %_org_h)-($_org_h{'unknown'}?1:0)).""; if ($ShowISP =~ /P/i) { print "$Message[56]"; } if ($ShowISP =~ /P/i) { print "$Message[15]"; } if ($ShowISP =~ /H/i) { print "$Message[57]"; } if ($ShowISP =~ /H/i) { print "$Message[15]"; } if ($ShowISP =~ /B/i) { print "$Message[75]"; } if ($ShowISP =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Org'},\%_org_h,\%_org_h); foreach my $key (@keylist) { if ($key eq 'unknown') { next; } my $p_p; my $p_h; if ($TotalPages) { $p_p=int($_org_p{$key}/$TotalPages*1000)/10; } if ($TotalHits) { $p_h=int($_org_h{$key}/$TotalHits*1000)/10; } print ""; my $org=$key; $org =~ s/_/ /g; print "".ucfirst($org).""; if ($ShowISP =~ /P/i) { print "".($_org_p{$key}?$_org_p{$key}:" ").""; } if ($ShowISP =~ /P/i) { print "".($_org_p{$key}?"$p_p %":' ').""; } if ($ShowISP =~ /H/i) { print "".($_org_h{$key}?$_org_h{$key}:" ").""; } if ($ShowISP =~ /H/i) { print "".($_org_h{$key}?"$p_h %":' ').""; } if ($ShowISP =~ /B/i) { print "".Format_Bytes($_org_k{$key}).""; } if ($ShowISP =~ /L/i) { print "".($_org_p{$key}?Format_Date($_org_l{$key},1):'-').""; } print "\n"; $total_p += $_org_p{$key}||0; $total_h += $_org_h{$key}; $total_k += $_org_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 cities # print ""; # print " "; # if ($ShowISP =~ /P/i) { print " "; } # if ($ShowISP =~ /P/i) { print " "; } # if ($ShowISP =~ /H/i) { print " "; } # if ($ShowISP =~ /H/i) { print " "; } # if ($ShowISP =~ /B/i) { print " "; } # if ($ShowISP =~ /L/i) { print " "; } # print "\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 ""; print "$Message[2]/$Message[0]"; if ($ShowISP =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowISP =~ /P/i) { print "".($rest_p?"$p_p %":' ').""; } if ($ShowISP =~ /H/i) { print "".($rest_h?$rest_h:" ").""; } if ($ShowISP =~ /H/i) { print "".($rest_h?"$p_h %":' ').""; } if ($ShowISP =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowISP =~ /L/i) { print " "; } print "\n"; } &tab_end(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoHost_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to the Hosts report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: Host name or ip #----------------------------------------------------------------------------- sub ShowInfoHost_geoip_org_maxmind { my $param="$_[0]"; # <----- if ($param eq '__title__') { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; my $NewLinkTarget=''; if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { $NewLinkParams.="&framename=mainright"; $NewLinkTarget=" target=\"mainright\""; } $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } print ""; print "GeoIP
    Org
    "; print ""; } elsif ($param) { my $ip=0; my $key; if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address $ip=4; $key=$param; } elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address $ip=6; $key=$param; } print ""; if ($key && $ip==4) { my $org; if ($type eq 'geoippureperl') { # Function org_by_addr does not exists in PurePerl but org_by_name do same $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; } else { $org=$geoip_org_maxmind->org_by_addr($param) if $geoip_org_maxmind; } if ($Debug) { debug(" Plugin geoip_org_maxmind: GetOrgByIp for $param: [$org]",5); } if ($org) { if (length($org) <= $MAXLENGTH) { print "$org"; } else { print substr($org,0,$MAXLENGTH).'...'; } } else { print "$Message[0]"; } } if ($key && $ip==6) { print "$Message[0]"; } if (! $key) { my $org; if ($type eq 'geoippureperl') { $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; } else { $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; } if ($Debug) { debug(" Plugin geoip_org_maxmind: GetOrgByHostname for $param: [$org]",5); } if ($org) { if (length($org) <= $MAXLENGTH) { print "$org"; } else { print substr($org,0,$MAXLENGTH).'...'; } } else { print "$Message[0]"; } } print ""; } else { print " "; } return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionInitHashArray_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionInitHashArray_geoip_org_maxmind { # my $param="$_[0]"; # <----- if ($Debug) { debug(" Plugin geoip_org_maxmind: Init_HashArray"); } %_org_p = %_org_h = %_org_k = %_org_l =(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessIP_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessIp_geoip_org_maxmind { my $param="$_[0]"; # Param must be an IP # <----- my $org; if ($type eq 'geoippureperl') { # Function org_by_addr does not exists in PurePerl but org_by_name do same $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; } else { $org=$geoip_org_maxmind->org_by_addr($param) if $geoip_org_maxmind; } if ($Debug) { debug(" Plugin geoip_org_maxmind: GetOrgByIp for $param: [$org]",5); } if ($org) { $org =~ s/\s/_/g; $_org_h{$org}++; } else { $_org_h{'unknown'}++; } # if ($timerecord > $_org_l{$city}) { $_org_l{$city}=$timerecord; } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessHostname_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessHostname_geoip_org_maxmind { my $param="$_[0]"; # Param must be an IP # <----- my $org; if ($type eq 'geoippureperl') { $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; } else { $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; } if ($Debug) { debug(" Plugin geoip_org_maxmind: GetOrgByHostname for $param: [$org]",5); } if ($org) { $org =~ s/\s/_/g; $_org_h{$org}++; } else { $_org_h{'unknown'}++; } # if ($timerecord > $_org_l{$city}) { $_org_l{$city}=$timerecord; } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionReadHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionReadHistory_geoip_org_maxmind { my $issectiontoload=shift; my $xmlold=shift; my $xmleb=shift; my $countlines=shift; # <----- if ($Debug) { debug(" Plugin geoip_org_maxmind: Begin of PLUGIN_geoip_org_maxmind section"); } my @field=(); my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($issectiontoload) { $countloaded++; if ($field[2]) { $_org_h{$field[0]}+=$field[2]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_PLUGIN_geoip_org_maxmind' || $field[0] eq "${xmleb}END_PLUGIN_geoip_org_maxmind" || ! $_); if ($field[0] ne 'END_PLUGIN_geoip_org_maxmind' && $field[0] ne "${xmleb}END_PLUGIN_geoip_org_maxmind") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" Plugin geoip_org_maxmind: End of PLUGIN_geoip_org_maxmind section ($count entries, $countloaded loaded)"); } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionWriteHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionWriteHistory_geoip_org_maxmind { my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); if ($Debug) { debug(" Plugin geoip_org_maxmind: SectionWriteHistory_geoip_org_maxmind start - ".(scalar keys %_org_h)); } # <----- print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MAXNBOFSECTIONGIR\n"; } print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; $ValueInFile{'plugin_geoip_org_maxmind'}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_geoip_org_maxmind${xmlbs}".(scalar keys %_org_h)."${xmlbe}\n"; &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_org_h,\%_org_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; #my $page=$_org_p{$_}||0; #my $bytes=$_org_k{$_}||0; #my $lastaccess=$_org_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_org_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } foreach (keys %_org_h) { if ($keysinkeylist{$_}) { next; } #my $page=$_org_p{$_}||0; #my $bytes=$_org_k{$_}||0; #my $lastaccess=$_org_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_org_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } print HISTORYTMP "${xmleb}END_PLUGIN_geoip_org_maxmind${xmlee}\n"; # -----> return 0; } 1; # Do not remove this line plugins/userinfo.pm000064400000007210152532065620010423 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # UserInfo AWStats plugin # This plugin allow you to add information on authenticated users chart from # a text file. Like full user name and lastname. # You must create a file called userinfo.configvalue.txt wich contains 2 # columns separated by a tab char, and store it in DirData directory. # First column is authenticated user login and second column is text you want # to add. #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # $Revision: 1.8 $ - $Author: eldy $ - $Date: 2004/06/11 21:34:32 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES #if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } # -----> 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="5.5"; my $PluginHooksFunctions="ShowInfoUser"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $userinfoloaded %UserInfo /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_userinfo { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin userinfo: InitParams=$InitParams",1); $userinfoloaded=0; %UserInfo=(); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoUser_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to Authenticated users report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell"; # Parameters: User #----------------------------------------------------------------------------- sub ShowInfoUser_userinfo { my $param="$_[0]"; # <----- my $filetoload=''; if ($param && $param ne '__title__' && ! $userinfoloaded) { # Load userinfo file if ($SiteConfig && open(USERINFOFILE,"$DirData/userinfo.$SiteConfig.txt")) { $filetoload="$DirData/userinfo.$SiteConfig.txt"; } elsif (open(USERINFOFILE,"$DirData/userinfo.txt")) { $filetoload="$DirData/userinfo.txt"; } else { error("Couldn't open UserInfo file \"$DirData/userinfo.txt\": $!"); } # This is the fastest way to load with regexp that I know %UserInfo = map(/^([^\t]+)\t+([^\t]+)/o,); close USERINFOFILE; debug(" Plugin userinfo: UserInfo file loaded: ".(scalar keys %UserInfo)." entries found."); $userinfoloaded=1; } if ($param eq '__title__') { print "$Message[114]"; } elsif ($param) { print ""; if ($UserInfo{$param}) { print "$UserInfo{$param}"; } else { print " "; } # Undefined user info print ""; } else { print " "; } return 1; # -----> } 1; # Do not remove this line plugins/ipv6.pm000064400000004717152532065620007466 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # IPv6 AWStats plugin # This plugin allow AWStats to make reverse DNS Lookup on IPv6 addresses. #----------------------------------------------------------------------------- # Perl Required Modules: Net::IP and Net::DNS #----------------------------------------------------------------------------- # $Revision: 1.4 $ - $Author: eldy $ - $Date: 2004/05/21 21:18:11 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES if (!eval ('require "Net/IP.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::IP"; } if (!eval ('require "Net/DNS.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::DNS"; } # -----> 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="5.5"; my $PluginHooksFunctions="GetResolvedIP"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $resolver /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_ipv6 { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin ipv6: InitParams=$InitParams",1); $resolver = Net::DNS::Resolver->new; # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetResolvedIP_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetResolvedIP is called to resolve an IPv6 address into a host name #----------------------------------------------------------------------------- sub GetResolvedIP_ipv6 { # <----- my $ip = new Net::IP($_[0]); my $reverseip= $ip->reverse_ip(); my $query = $resolver->query($reverseip, "PTR"); if (! defined($query)) { return; } my @result=split(/\s/, ($query->answer)[0]->string); return $result[4]; # -----> } 1; # Do not remove this line plugins/geoip_isp_maxmind.pm000064400000040773152532065620012277 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # GeoIp_Isp_Maxmind AWStats plugin # This plugin allow you to add a city report. # Need the licensed ISP database from Maxmind. #----------------------------------------------------------------------------- # Perl Required Modules: Geo::IP or Geo::IP::PurePerl #----------------------------------------------------------------------------- # $Revision: 1.10 $ - $Author: eldy $ - $Date: 2008/03/15 00:17:14 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES use 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.2"; my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost SectionInitHashArray SectionProcessIp SectionProcessHostname SectionReadHistory SectionWriteHistory"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $geoip_isp_maxmind %_isp_p %_isp_h %_isp_k %_isp_l $MAXNBOFSECTIONGIR $MAXLENGTH /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_geoip_isp_maxmind { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); $MAXNBOFSECTIONGIR=10; $MAXLENGTH=20; # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin geoip_isp_maxmind: InitParams=$InitParams",1); my ($mode,$datafile)=split(/\s+/,$InitParams,2); if (! $datafile) { $datafile="GeoIPIsp.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_isp_maxmind: GeoIP initialized type=$type mode=$mode",1); if ($type eq 'geoippureperl') { $geoip_isp_maxmind = Geo::IP::PurePerl->open($datafile, $mode); } else { $geoip_isp_maxmind = Geo::IP->open($datafile, $mode); } # Fails on some GeoIP version # debug(" Plugin geoip_isp_maxmind: GeoIP initialized database_info=".$geoip_isp_maxmind->database_info()); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLMenuLink_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub AddHTMLMenuLink_geoip_isp_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- if ($Debug) { debug(" Plugin geoip_isp_maxmind: AddHTMLMenuLink"); } if ($categ eq 'who') { $menu->{'plugin_geoip_isp_maxmind'}=0.6; # Pos $menulink->{'plugin_geoip_isp_maxmind'}=2; # Type of link $menutext->{'plugin_geoip_isp_maxmind'}="ISP"; # Text } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLGraph_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub AddHTMLGraph_geoip_isp_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- my $ShowISP='H'; $MinHit{'Isp'}=1; my $total_p; my $total_h; my $total_k; my $rest_p; my $rest_h; my $rest_k; if ($Debug) { debug(" Plugin geoip_isp_maxmind: AddHTMLGraph $categ $menu $menulink $menutext"); } my $title='ISP'; &tab_head("$title",19,0,'isp'); print "ISP : ".((scalar keys %_isp_h)-($_isp_h{'unknown'}?1:0)).""; if ($ShowISP =~ /P/i) { print "$Message[56]"; } if ($ShowISP =~ /P/i) { print "$Message[15]"; } if ($ShowISP =~ /H/i) { print "$Message[57]"; } if ($ShowISP =~ /H/i) { print "$Message[15]"; } if ($ShowISP =~ /B/i) { print "$Message[75]"; } if ($ShowISP =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Isp'},\%_isp_h,\%_isp_h); foreach my $key (@keylist) { if ($key eq 'unknown') { next; } my $p_p; my $p_h; if ($TotalPages) { $p_p=int($_isp_p{$key}/$TotalPages*1000)/10; } if ($TotalHits) { $p_h=int($_isp_h{$key}/$TotalHits*1000)/10; } print ""; my $isp=$key; $isp =~ s/_/ /g; print "".ucfirst($isp).""; if ($ShowISP =~ /P/i) { print "".($_isp_p{$key}?$_isp_p{$key}:" ").""; } if ($ShowISP =~ /P/i) { print "".($_isp_p{$key}?"$p_p %":' ').""; } if ($ShowISP =~ /H/i) { print "".($_isp_h{$key}?$_isp_h{$key}:" ").""; } if ($ShowISP =~ /H/i) { print "".($_isp_h{$key}?"$p_h %":' ').""; } if ($ShowISP =~ /B/i) { print "".Format_Bytes($_isp_k{$key}).""; } if ($ShowISP =~ /L/i) { print "".($_isp_p{$key}?Format_Date($_isp_l{$key},1):'-').""; } print "\n"; $total_p += $_isp_p{$key}||0; $total_h += $_isp_h{$key}; $total_k += $_isp_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 cities # print ""; # print " "; # if ($ShowISP =~ /P/i) { print " "; } # if ($ShowISP =~ /P/i) { print " "; } # if ($ShowISP =~ /H/i) { print " "; } # if ($ShowISP =~ /H/i) { print " "; } # if ($ShowISP =~ /B/i) { print " "; } # if ($ShowISP =~ /L/i) { print " "; } # print "\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 ""; print "$Message[2]/$Message[0]"; if ($ShowISP =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowISP =~ /P/i) { print "".($rest_p?"$p_p %":' ').""; } if ($ShowISP =~ /H/i) { print "".($rest_h?$rest_h:" ").""; } if ($ShowISP =~ /H/i) { print "".($rest_h?"$p_h %":' ').""; } if ($ShowISP =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowISP =~ /L/i) { print " "; } print "\n"; } &tab_end(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoHost_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to the Hosts report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: Host name or ip #----------------------------------------------------------------------------- sub ShowInfoHost_geoip_isp_maxmind { my $param="$_[0]"; # <----- if ($param eq '__title__') { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; my $NewLinkTarget=''; if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { $NewLinkParams.="&framename=mainright"; $NewLinkTarget=" target=\"mainright\""; } $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } print ""; print "GeoIP
    ISP
    "; print ""; } elsif ($param) { my $ip=0; my $key; if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address $ip=4; $key=$param; } elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address $ip=6; $key=$param; } print ""; if ($key && $ip==4) { my $isp; if ($type eq 'geoippureperl') { # Function isp_by_addr does not exists in PurePerl but isp_by_name do same $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; } else { $isp=$geoip_isp_maxmind->isp_by_addr($param) if $geoip_isp_maxmind; } if ($Debug) { debug(" Plugin geoip_isp_maxmind: GetIspByIp for $param: [$isp]",5); } if ($isp) { if (length($isp) <= $MAXLENGTH) { print "$isp"; } else { print substr($isp,0,$MAXLENGTH).'...'; } } else { print "$Message[0]"; } } if ($key && $ip==6) { print "$Message[0]"; } if (! $key) { my $isp; if ($type eq 'geoippureperl') { $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; } else { $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; } if ($Debug) { debug(" Plugin geoip_isp_maxmind: GetIspByHostname for $param: [$isp]",5); } if ($isp) { if (length($isp) <= $MAXLENGTH) { print "$isp"; } else { print substr($isp,0,$MAXLENGTH).'...'; } } else { print "$Message[0]"; } } print ""; } else { print " "; } return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionInitHashArray_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionInitHashArray_geoip_isp_maxmind { # my $param="$_[0]"; # <----- if ($Debug) { debug(" Plugin geoip_isp_maxmind: Init_HashArray"); } %_isp_p = %_isp_h = %_isp_k = %_isp_l =(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessIP_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessIp_geoip_isp_maxmind { my $param="$_[0]"; # Param must be an IP # <----- my $isp; if ($type eq 'geoippureperl') { # Function isp_by_addr does not exists in PurePerl but isp_by_name do same $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; } else { $isp=$geoip_isp_maxmind->isp_by_addr($param) if $geoip_isp_maxmind; } if ($Debug) { debug(" Plugin geoip_isp_maxmind: GetIspByIp for $param: [$isp]",5); } if ($isp) { $isp =~ s/\s/_/g; $_isp_h{$isp}++; } else { $_isp_h{'unknown'}++; } # if ($timerecord > $_isp_l{$city}) { $_isp_l{$city}=$timerecord; } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessHostname_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessHostname_geoip_isp_maxmind { my $param="$_[0]"; # Param must be an IP # <----- my $isp; if ($type eq 'geoippureperl') { $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; } else { $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; } if ($Debug) { debug(" Plugin geoip_isp_maxmind: GetIspByHostname for $param: [$isp]",5); } if ($isp) { $isp =~ s/\s/_/g; $_isp_h{$isp}++; } else { $_isp_h{'unknown'}++; } # if ($timerecord > $_isp_l{$city}) { $_isp_l{$city}=$timerecord; } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionReadHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionReadHistory_geoip_isp_maxmind { my $issectiontoload=shift; my $xmlold=shift; my $xmleb=shift; my $countlines=shift; # <----- if ($Debug) { debug(" Plugin geoip_isp_maxmind: Begin of PLUGIN_geoip_isp_maxmind section"); } my @field=(); my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($issectiontoload) { $countloaded++; if ($field[2]) { $_isp_h{$field[0]}+=$field[2]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_PLUGIN_geoip_isp_maxmind' || $field[0] eq "${xmleb}END_PLUGIN_geoip_isp_maxmind" || ! $_); if ($field[0] ne 'END_PLUGIN_geoip_isp_maxmind' && $field[0] ne "${xmleb}END_PLUGIN_geoip_isp_maxmind") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" Plugin geoip_isp_maxmind: End of PLUGIN_geoip_isp_maxmind section ($count entries, $countloaded loaded)"); } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionWriteHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionWriteHistory_geoip_isp_maxmind { my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); if ($Debug) { debug(" Plugin geoip_isp_maxmind: SectionWriteHistory_geoip_isp_maxmind start - ".(scalar keys %_isp_h)); } # <----- print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MAXNBOFSECTIONGIR\n"; } print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; $ValueInFile{'plugin_geoip_isp_maxmind'}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_geoip_isp_maxmind${xmlbs}".(scalar keys %_isp_h)."${xmlbe}\n"; &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_isp_h,\%_isp_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; #my $page=$_isp_p{$_}||0; #my $bytes=$_isp_k{$_}||0; #my $lastaccess=$_isp_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_isp_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } foreach (keys %_isp_h) { if ($keysinkeylist{$_}) { next; } #my $page=$_isp_p{$_}||0; #my $bytes=$_isp_k{$_}||0; #my $lastaccess=$_isp_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_isp_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } print HISTORYTMP "${xmleb}END_PLUGIN_geoip_isp_maxmind${xmlee}\n"; # -----> return 0; } 1; # Do not remove this line plugins/geoip_city_maxmind.pm000064400000334476152532065620012462 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # GeoIp_City_Maxmind AWStats plugin # This plugin allow you to add a city report. # Need the licensed city database from Maxmind. #----------------------------------------------------------------------------- # Perl Required Modules: Geo::IP or Geo::IP::PurePerl #----------------------------------------------------------------------------- # $Revision: 1.21 $ - $Author: eldy $ - $Date: 2008/03/15 00:17:14 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES use 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_city_maxmind %_city_p %_city_h %_city_k %_city_l $MAXNBOFSECTIONGIR /; my %countrylib=('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 ); # "iso 3166 country code"_"fips 10-4 region code","region name" my %regall=( "AD_02","Canillo", "AD_03","Encamp", "AD_04","La Massana", "AD_05","Ordino", "AD_06","Sant Julia de Loria", "AD_07","Andorra la Vella", "AD_08","Escaldes-Engordany", "AE_01","Abu Zaby", "AE_03","Dubay", "AE_04","Al Fujayrah", "AE_05","Ra's al Khaymah", "AE_06","Ash Shariqah", "AE_07","Umm al Qaywayn", "AF_01","Badakhshan", "AF_02","Badghis", "AF_03","Baghlan", "AF_05","Bamian", "AF_06","Farah", "AF_07","Faryab", "AF_08","Ghazni", "AF_09","Ghowr", "AF_10","Helmand", "AF_11","Herat", "AF_13","Kabol", "AF_14","Kapisa", "AF_15","Konar", "AF_16","Laghman", "AF_17","Lowgar", "AF_18","Nangarhar", "AF_19","Nimruz", "AF_20","Oruzgan", "AF_21","Paktia", "AF_22","Parvan", "AF_23","Kandahar", "AF_24","Kondoz", "AF_26","Takhar", "AF_27","Vardak", "AF_28","Zabol", "AF_29","Paktika", "AF_30","Balkh", "AF_31","Jowzjan", "AF_32","Samangan", "AF_33","Sar-e Pol", "AF_34","Konar", "AF_35","Laghman", "AF_36","Paktia", "AF_37","Khowst", "AF_38","Nurestan", "AG_01","Barbuda", "AG_03","Saint George", "AG_04","Saint John", "AG_05","Saint Mary", "AG_06","Saint Paul", "AG_07","Saint Peter", "AG_08","Saint Philip", "AL_40","Berat", "AL_41","Diber", "AL_42","Durres", "AL_43","Elbasan", "AL_44","Fier", "AL_45","Gjirokaster", "AL_46","Korce", "AL_47","Kukes", "AL_48","Lezhe", "AL_49","Shkoder", "AL_50","Tirane", "AL_51","Vlore", "AM_01","Aragatsotn", "AM_02","Ararat", "AM_03","Armavir", "AM_04","Geghark'unik'", "AM_05","Kotayk'", "AM_06","Lorri", "AM_07","Shirak", "AM_08","Syunik'", "AM_09","Tavush", "AM_10","Vayots' Dzor", "AM_11","Yerevan", "AO_01","Benguela", "AO_02","Bie", "AO_03","Cabinda", "AO_04","Cuando Cubango", "AO_05","Cuanza Norte", "AO_06","Cuanza Sul", "AO_07","Cunene", "AO_08","Huambo", "AO_09","Huila", "AO_12","Malanje", "AO_14","Moxico", "AO_15","Uige", "AO_16","Zaire", "AO_17","Lunda Norte", "AO_18","Lunda Sul", "AO_19","Bengo", "AO_20","Luanda", "AR_01","Buenos Aires", "AR_02","Catamarca", "AR_03","Chaco", "AR_04","Chubut", "AR_05","Cordoba", "AR_06","Corrientes", "AR_07","Distrito Federal", "AR_08","Entre Rios", "AR_09","Formosa", "AR_10","Jujuy", "AR_11","La Pampa", "AR_12","La Rioja", "AR_13","Mendoza", "AR_14","Misiones", "AR_15","Neuquen", "AR_16","Rio Negro", "AR_17","Salta", "AR_18","San Juan", "AR_19","San Luis", "AR_20","Santa Cruz", "AR_21","Santa Fe", "AR_22","Santiago del Estero", "AR_23","Tierra del Fuego", "AR_24","Tucuman", "AT_01","Burgenland", "AT_02","Karnten", "AT_03","Niederosterreich", "AT_04","Oberosterreich", "AT_05","Salzburg", "AT_06","Steiermark", "AT_07","Tirol", "AT_08","Vorarlberg", "AT_09","Wien", "AU_01","Australian Capital Territory", "AU_02","New South Wales", "AU_03","Northern Territory", "AU_04","Queensland", "AU_05","South Australia", "AU_06","Tasmania", "AU_07","Victoria", "AU_08","Western Australia", "AZ_01","Abseron", "AZ_02","Agcabadi", "AZ_03","Agdam", "AZ_04","Agdas", "AZ_05","Agstafa", "AZ_06","Agsu", "AZ_07","Ali Bayramli", "AZ_08","Astara", "AZ_09","Baki", "AZ_10","Balakan", "AZ_11","Barda", "AZ_12","Beylaqan", "AZ_13","Bilasuvar", "AZ_14","Cabrayil", "AZ_15","Calilabad", "AZ_16","Daskasan", "AZ_17","Davaci", "AZ_18","Fuzuli", "AZ_19","Gadabay", "AZ_20","Ganca", "AZ_21","Goranboy", "AZ_22","Goycay", "AZ_23","Haciqabul", "AZ_24","Imisli", "AZ_25","Ismayilli", "AZ_26","Kalbacar", "AZ_27","Kurdamir", "AZ_28","Lacin", "AZ_29","Lankaran", "AZ_30","Lankaran", "AZ_31","Lerik", "AZ_32","Masalli", "AZ_33","Mingacevir", "AZ_34","Naftalan", "AZ_35","Naxcivan", "AZ_36","Neftcala", "AZ_37","Oguz", "AZ_38","Qabala", "AZ_39","Qax", "AZ_40","Qazax", "AZ_41","Qobustan", "AZ_42","Quba", "AZ_43","Qubadli", "AZ_44","Qusar", "AZ_45","Saatli", "AZ_46","Sabirabad", "AZ_47","Saki", "AZ_48","Saki", "AZ_49","Salyan", "AZ_50","Samaxi", "AZ_51","Samkir", "AZ_52","Samux", "AZ_53","Siyazan", "AZ_54","Sumqayit", "AZ_55","Susa", "AZ_56","Susa", "AZ_57","Tartar", "AZ_58","Tovuz", "AZ_59","Ucar", "AZ_60","Xacmaz", "AZ_61","Xankandi", "AZ_62","Xanlar", "AZ_63","Xizi", "AZ_64","Xocali", "AZ_65","Xocavand", "AZ_66","Yardimli", "AZ_67","Yevlax", "AZ_68","Yevlax", "AZ_69","Zangilan", "AZ_70","Zaqatala", "AZ_71","Zardab", "BA_01","Federation of Bosnia and Herzegovina", "BA_02","Republika Srpska", "BB_01","Christ Church", "BB_02","Saint Andrew", "BB_03","Saint George", "BB_04","Saint James", "BB_05","Saint John", "BB_06","Saint Joseph", "BB_07","Saint Lucy", "BB_08","Saint Michael", "BB_09","Saint Peter", "BB_10","Saint Philip", "BB_11","Saint Thomas", "BD_01","Barisal", "BD_04","Bandarban", "BD_05","Comilla", "BD_12","Mymensingh", "BD_13","Noakhali", "BD_15","Patuakhali", "BD_22","Bagerhat", "BD_23","Bhola", "BD_24","Bogra", "BD_25","Barguna", "BD_26","Brahmanbaria", "BD_27","Chandpur", "BD_28","Chapai Nawabganj", "BD_29","Chattagram", "BD_30","Chuadanga", "BD_31","Cox's Bazar", "BD_32","Dhaka", "BD_33","Dinajpur", "BD_34","Faridpur", "BD_35","Feni", "BD_36","Gaibandha", "BD_37","Gazipur", "BD_38","Gopalganj", "BD_39","Habiganj", "BD_40","Jaipurhat", "BD_41","Jamalpur", "BD_42","Jessore", "BD_43","Jhalakati", "BD_44","Jhenaidah", "BD_45","Khagrachari", "BD_46","Khulna", "BD_47","Kishorganj", "BD_48","Kurigram", "BD_49","Kushtia", "BD_50","Laksmipur", "BD_51","Lalmonirhat", "BD_52","Madaripur", "BD_53","Magura", "BD_54","Manikganj", "BD_55","Meherpur", "BD_56","Moulavibazar", "BD_57","Munshiganj", "BD_58","Naogaon", "BD_59","Narail", "BD_60","Narayanganj", "BD_61","Narsingdi", "BD_62","Nator", "BD_63","Netrakona", "BD_64","Nilphamari", "BD_65","Pabna", "BD_66","Panchagar", "BD_67","Parbattya Chattagram", "BD_68","Pirojpur", "BD_69","Rajbari", "BD_70","Rajshahi", "BD_71","Rangpur", "BD_72","Satkhira", "BD_73","Shariyatpur", "BD_74","Sherpur", "BD_75","Sirajganj", "BD_76","Sunamganj", "BD_77","Sylhet", "BD_78","Tangail", "BD_79","Thakurgaon", "BE_01","Antwerpen", "BE_02","Brabant", "BE_03","Hainaut", "BE_04","Liege", "BE_05","Limburg", "BE_06","Luxembourg", "BE_07","Namur", "BE_08","Oost-Vlaanderen", "BE_09","West-Vlaanderen", "BE_10","Brabant Wallon", "BE_11","Brussels Hoofdstedelijk Gewest", "BE_12","Vlaams-Brabant", "BF_15","Bam", "BF_19","Boulkiemde", "BF_20","Ganzourgou", "BF_21","Gnagna", "BF_28","Kouritenga", "BF_33","Oudalan", "BF_34","Passore", "BF_36","Sanguie", "BF_40","Soum", "BF_42","Tapoa", "BF_44","Zoundweogo", "BF_45","Bale", "BF_46","Banwa", "BF_47","Bazega", "BF_48","Bougouriba", "BF_49","Boulgou", "BF_50","Gourma", "BF_51","Houet", "BF_52","Ioba", "BF_53","Kadiogo", "BF_54","Kenedougou", "BF_55","Komoe", "BF_56","Komondjari", "BF_57","Kompienga", "BF_58","Kossi", "BF_59","Koulpelogo", "BF_60","Kourweogo", "BF_61","Leraba", "BF_62","Loroum", "BF_63","Mouhoun", "BF_64","Namentenga", "BF_65","Naouri", "BF_66","Nayala", "BF_67","Noumbiel", "BF_68","Oubritenga", "BF_69","Poni", "BF_70","Sanmatenga", "BF_71","Seno", "BF_72","Sissili", "BF_73","Sourou", "BF_74","Tuy", "BF_75","Yagha", "BF_76","Yatenga", "BF_77","Ziro", "BF_78","Zondoma", "BG_33","Mikhaylovgrad", "BG_38","Blagoevgrad", "BG_39","Burgas", "BG_40","Dobrich", "BG_41","Gabrovo", "BG_42","Grad Sofiya", "BG_43","Khaskovo", "BG_44","Kurdzhali", "BG_45","Kyustendil", "BG_46","Lovech", "BG_47","Montana", "BG_48","Pazardzhik", "BG_49","Pernik", "BG_50","Pleven", "BG_51","Plovdiv", "BG_52","Razgrad", "BG_53","Ruse", "BG_54","Shumen", "BG_55","Silistra", "BG_56","Sliven", "BG_57","Smolyan", "BG_58","Sofiya", "BG_59","Stara Zagora", "BG_60","Turgovishte", "BG_61","Varna", "BG_62","Veliko Turnovo", "BG_63","Vidin", "BG_64","Vratsa", "BG_65","Yambol", "BH_01","Al Hadd", "BH_02","Al Manamah", "BH_03","Al Muharraq", "BH_05","Jidd Hafs", "BH_06","Sitrah", "BH_08","Al Mintaqah al Gharbiyah", "BH_09","Mintaqat Juzur Hawar", "BH_10","Al Mintaqah ash Shamaliyah", "BH_11","Al Mintaqah al Wusta", "BH_12","Madinat", "BH_13","Ar Rifa", "BH_14","Madinat Hamad", "BI_02","Bujumbura", "BI_09","Bubanza", "BI_10","Bururi", "BI_11","Cankuzo", "BI_12","Cibitoke", "BI_13","Gitega", "BI_14","Karuzi", "BI_15","Kayanza", "BI_16","Kirundo", "BI_17","Makamba", "BI_18","Muyinga", "BI_19","Ngozi", "BI_20","Rutana", "BI_21","Ruyigi", "BI_22","Muramvya", "BI_23","Mwaro", "BJ_01","Atakora", "BJ_02","Atlantique", "BJ_03","Borgou", "BJ_04","Mono", "BJ_05","Oueme", "BJ_06","Zou", "BM_01","Devonshire", "BM_02","Hamilton", "BM_03","Hamilton", "BM_04","Paget", "BM_05","Pembroke", "BM_06","Saint George", "BM_07","Saint George's", "BM_08","Sandys", "BM_09","Smiths", "BM_10","Southampton", "BM_11","Warwick", "BN_07","Alibori", "BN_08","Belait", "BN_09","Brunei and Muara", "BN_10","Temburong", "BN_11","Collines", "BN_12","Kouffo", "BN_13","Donga", "BN_14","Littoral", "BN_15","Tutong", "BN_16","Oueme", "BN_17","Plateau", "BN_18","Zou", "BO_01","Chuquisaca", "BO_02","Cochabamba", "BO_03","El Beni", "BO_04","La Paz", "BO_05","Oruro", "BO_06","Pando", "BO_07","Potosi", "BO_08","Santa Cruz", "BO_09","Tarija", "BR_01","Acre", "BR_02","Alagoas", "BR_03","Amapa", "BR_04","Amazonas", "BR_05","Bahia", "BR_06","Ceara", "BR_07","Distrito Federal", "BR_08","Espirito Santo", "BR_11","Mato Grosso do Sul", "BR_13","Maranhao", "BR_14","Mato Grosso", "BR_15","Minas Gerais", "BR_16","Para", "BR_17","Paraiba", "BR_18","Parana", "BR_20","Piaui", "BR_21","Rio de Janeiro", "BR_22","Rio Grande do Norte", "BR_23","Rio Grande do Sul", "BR_24","Rondonia", "BR_25","Roraima", "BR_26","Santa Catarina", "BR_27","Sao Paulo", "BR_28","Sergipe", "BR_29","Goias", "BR_30","Pernambuco", "BR_31","Tocantins", "BS_05","Bimini", "BS_06","Cat Island", "BS_10","Exuma", "BS_13","Inagua", "BS_15","Long Island", "BS_16","Mayaguana", "BS_18","Ragged Island", "BS_22","Harbour Island", "BS_23","New Providence", "BS_24","Acklins and Crooked Islands", "BS_25","Freeport", "BS_26","Fresh Creek", "BS_27","Governor's Harbour", "BS_28","Green Turtle Cay", "BS_29","High Rock", "BS_30","Kemps Bay", "BS_31","Marsh Harbour", "BS_32","Nichollstown and Berry Islands", "BS_33","Rock Sound", "BS_34","Sandy Point", "BS_35","San Salvador and Rum Cay", "BT_05","Bumthang", "BT_06","Chhukha", "BT_07","Chirang", "BT_08","Daga", "BT_09","Geylegphug", "BT_10","Ha", "BT_11","Lhuntshi", "BT_12","Mongar", "BT_13","Paro", "BT_14","Pemagatsel", "BT_15","Punakha", "BT_16","Samchi", "BT_17","Samdrup", "BT_18","Shemgang", "BT_19","Tashigang", "BT_20","Thimphu", "BT_21","Tongsa", "BT_22","Wangdi Phodrang", "BW_01","Central", "BW_02","Chobe", "BW_03","Ghanzi", "BW_04","Kgalagadi", "BW_05","Kgatleng", "BW_06","Kweneng", "BW_07","Ngamiland", "BW_08","North-East", "BW_09","South-East", "BW_10","Southern", "BY_01","Brestskaya Voblasts'", "BY_02","Homyel'skaya Voblasts'", "BY_03","Hrodzyenskaya Voblasts'", "BY_04","Minsk", "BY_05","Minskaya Voblasts'", "BY_06","Mahilyowskaya Voblasts'", "BY_07","Vitsyebskaya Voblasts'", "BZ_01","Belize", "BZ_02","Cayo", "BZ_03","Corozal", "BZ_04","Orange Walk", "BZ_05","Stann Creek", "BZ_06","Toledo", "CA_01","Alberta", "CA_02","British Columbia", "CA_03","Manitoba", "CA_04","New Brunswick", "CA_05","Newfoundland and Labrador", "CA_07","Nova Scotia", "CA_08","Ontario", "CA_09","Prince Edward Island", "CA_10","Quebec", "CA_11","Saskatchewan", "CA_12","Yukon Territory", "CA_13","Northwest Territories", "CA_14","Nunavut", "CF_01","Bamingui-Bangoran", "CF_02","Basse-Kotto", "CF_03","Haute-Kotto", "CF_04","Mambere-Kadei", "CF_05","Haut-Mbomou", "CF_06","Kemo", "CF_07","Lobaye", "CF_08","Mbomou", "CF_09","Nana-Mambere", "CF_11","Ouaka", "CF_12","Ouham", "CF_13","Ouham-Pende", "CF_14","Vakaga", "CF_15","Nana-Grebizi", "CF_16","Sangha-Mbaere", "CF_17","Ombella-Mpoko", "CF_18","Bangui", "CG_01","Bouenza", "CG_03","Cuvette", "CG_04","Kouilou", "CG_05","Lekoumou", "CG_06","Likouala", "CG_07","Niari", "CG_08","Plateaux", "CG_10","Sangha", "CG_11","Pool", "CG_12","Brazzaville", "CH_01","Aargau", "CH_02","Ausser-Rhoden", "CH_03","Basel-Landschaft", "CH_04","Basel-Stadt", "CH_05","Bern", "CH_06","Fribourg", "CH_07","Geneve", "CH_08","Glarus", "CH_09","Graubunden", "CH_10","Inner-Rhoden", "CH_11","Luzern", "CH_12","Neuchatel", "CH_13","Nidwalden", "CH_14","Obwalden", "CH_15","Sankt Gallen", "CH_16","Schaffhausen", "CH_17","Schwyz", "CH_18","Solothurn", "CH_19","Thurgau", "CH_20","Ticino", "CH_21","Uri", "CH_22","Valais", "CH_23","Vaud", "CH_24","Zug", "CH_25","Zurich", "CH_26","Jura", "CI_01","Abengourou", "CI_03","Dabakala", "CI_05","Adzope", "CI_06","Agboville", "CI_07","Biankouma", "CI_11","Bouna", "CI_12","Boundiali", "CI_14","Danane", "CI_16","Divo", "CI_17","Ferkessedougou", "CI_18","Gagnoa", "CI_20","Katiola", "CI_21","Korhogo", "CI_23","Odienne", "CI_25","Seguela", "CI_26","Touba", "CI_27","Bongouanou", "CI_28","Issia", "CI_29","Lakota", "CI_30","Mankono", "CI_31","Oume", "CI_32","Soubre", "CI_33","Tingrela", "CI_34","Zuenoula", "CI_36","Bangolo", "CI_37","Beoumi", "CI_38","Bondoukou", "CI_39","Bouafle", "CI_40","Bouake", "CI_41","Daloa", "CI_42","Daoukro", "CI_44","Duekoue", "CI_45","Grand-Lahou", "CI_47","Man", "CI_48","Mbahiakro", "CI_49","Sakassou", "CI_50","San Pedro", "CI_51","Sassandra", "CI_52","Sinfra", "CI_53","Tabou", "CI_54","Tanda", "CI_55","Tiassale", "CI_56","Toumodi", "CI_57","Vavoua", "CI_61","Abidjan", "CI_62","Aboisso", "CI_63","Adiake", "CI_64","Alepe", "CI_65","Bocanda", "CI_66","Dabou", "CI_67","Dimbokro", "CI_68","Grand-Bassam", "CI_69","Guiglo", "CI_70","Jacqueville", "CI_71","Tiebissou", "CI_72","Toulepleu", "CI_73","Yamoussoukro", "CL_01","Valparaiso", "CL_02","Aisen del General Carlos Ibanez del Campo", "CL_03","Antofagasta", "CL_04","Araucania", "CL_05","Atacama", "CL_06","Bio-Bio", "CL_07","Coquimbo", "CL_08","Libertador General Bernardo O'Higgins", "CL_09","Los Lagos", "CL_10","Magallanes y de la Antartica Chilena", "CL_11","Maule", "CL_12","Region Metropolitana", "CL_13","Tarapaca", "CM_04","Est", "CM_05","Littoral", "CM_07","Nord-Ouest", "CM_08","Ouest", "CM_09","Sud-Ouest", "CM_10","Adamaoua", "CM_11","Centre", "CM_12","Extreme-Nord", "CM_13","Nord", "CM_14","Sud", "CN_01","Anhui", "CN_02","Zhejiang", "CN_03","Jiangxi", "CN_04","Jiangsu", "CN_05","Jilin", "CN_06","Qinghai", "CN_07","Fujian", "CN_08","Heilongjiang", "CN_09","Henan", "CN_10","Hebei", "CN_11","Hunan", "CN_12","Hubei", "CN_13","Xinjiang", "CN_14","Xizang", "CN_15","Gansu", "CN_16","Guangxi", "CN_18","Guizhou", "CN_19","Liaoning", "CN_20","Nei Mongol", "CN_21","Ningxia", "CN_22","Beijing", "CN_23","Shanghai", "CN_24","Shanxi", "CN_25","Shandong", "CN_26","Shaanxi", "CN_27","Sichuan", "CN_28","Tianjin", "CN_29","Yunnan", "CN_30","Guangdong", "CN_31","Hainan", "CN_32","Chongqing", "CO_01","Amazonas", "CO_02","Antioquia", "CO_03","Arauca", "CO_04","Atlantico", "CO_08","Caqueta", "CO_09","Cauca", "CO_10","Cesar", "CO_11","Choco", "CO_12","Cordoba", "CO_14","Guaviare", "CO_15","Guainia", "CO_16","Huila", "CO_17","La Guajira", "CO_19","Meta", "CO_20","Narino", "CO_21","Norte de Santander", "CO_22","Putumayo", "CO_23","Quindio", "CO_24","Risaralda", "CO_25","San Andres y Providencia", "CO_26","Santander", "CO_27","Sucre", "CO_28","Tolima", "CO_29","Valle del Cauca", "CO_30","Vaupes", "CO_31","Vichada", "CO_32","Casanare", "CO_33","Cundinamarca", "CO_34","Distrito Especial", "CO_35","Bolivar", "CO_36","Boyaca", "CO_37","Caldas", "CO_38","Magdalena", "CR_01","Alajuela", "CR_02","Cartago", "CR_03","Guanacaste", "CR_04","Heredia", "CR_06","Limon", "CR_07","Puntarenas", "CR_08","San Jose", "CU_01","Pinar del Rio", "CU_02","Ciudad de la Habana", "CU_03","Matanzas", "CU_04","Isla de la Juventud", "CU_05","Camaguey", "CU_07","Ciego de Avila", "CU_08","Cienfuegos", "CU_09","Granma", "CU_10","Guantanamo", "CU_11","La Habana", "CU_12","Holguin", "CU_13","Las Tunas", "CU_14","Sancti Spiritus", "CU_15","Santiago de Cuba", "CU_16","Villa Clara", "CV_01","Boa Vista", "CV_02","Brava", "CV_04","Maio", "CV_05","Paul", "CV_07","Ribeira Grande", "CV_08","Sal", "CV_10","Sao Nicolau", "CV_11","Sao Vicente", "CV_13","Mosteiros", "CV_14","Praia", "CV_15","Santa Catarina", "CV_16","Santa Cruz", "CV_17","Sao Domingos", "CV_18","Sao Filipe", "CV_19","Sao Miguel", "CV_20","Tarrafal", "CY_01","Famagusta", "CY_02","Kyrenia", "CY_03","Larnaca", "CY_04","Nicosia", "CY_05","Limassol", "CY_06","Paphos", "CZ_52","Hlavni Mesto Praha", "CZ_78","Jihomoravsky Kraj", "CZ_79","Jihocesky Kraj", "CZ_80","Vysocina", "CZ_81","Karlovarsky Kraj", "CZ_82","Kralovehradecky Kraj", "CZ_83","Liberecky Kraj", "CZ_84","Olomoucky Kraj", "CZ_85","Moravskoslezsky Kraj", "CZ_86","Pardubicky Kraj", "CZ_87","Plzensky Kraj", "CZ_88","Stredocesky Kraj", "CZ_89","Ustecky Kraj", "CZ_90","Zlinsky Kraj", "DE_01","Baden-Wurttemberg", "DE_02","Bayern", "DE_03","Bremen", "DE_04","Hamburg", "DE_05","Hessen", "DE_06","Niedersachsen", "DE_07","Nordrhein-Westfalen", "DE_08","Rheinland-Pfalz", "DE_09","Saarland", "DE_10","Schleswig-Holstein", "DE_11","Brandenburg", "DE_12","Mecklenburg-Vorpommern", "DE_13","Sachsen", "DE_14","Sachsen-Anhalt", "DE_15","Thuringen", "DE_16","Berlin", "DJ_02","Dikhil", "DJ_03","Djibouti", "DJ_04","Obock", "DJ_05","Tadjoura", "DK_01","Arhus", "DK_02","Bornholm", "DK_03","Frederiksborg", "DK_04","Fyn", "DK_05","Kobenhavn", "DK_06","Staden Kobenhavn", "DK_07","Nordjylland", "DK_08","Ribe", "DK_09","Ringkobing", "DK_10","Roskilde", "DK_11","Sonderjylland", "DK_12","Storstrom", "DK_13","Vejle", "DK_14","Vestsjalland", "DK_15","Viborg", "DM_02","Saint Andrew", "DM_03","Saint David", "DM_04","Saint George", "DM_05","Saint John", "DM_06","Saint Joseph", "DM_07","Saint Luke", "DM_08","Saint Mark", "DM_09","Saint Patrick", "DM_10","Saint Paul", "DM_11","Saint Peter", "DO_01","Azua", "DO_02","Baoruco", "DO_03","Barahona", "DO_04","Dajabon", "DO_05","Distrito Nacional", "DO_06","Duarte", "DO_08","Espaillat", "DO_09","Independencia", "DO_10","La Altagracia", "DO_11","Elias Pina", "DO_12","La Romana", "DO_14","Maria Trinidad Sanchez", "DO_15","Monte Cristi", "DO_16","Pedernales", "DO_17","Peravia", "DO_18","Puerto Plata", "DO_19","Salcedo", "DO_20","Samana", "DO_21","Sanchez Ramirez", "DO_23","San Juan", "DO_24","San Pedro De Macoris", "DO_25","Santiago", "DO_26","Santiago Rodriguez", "DO_27","Valverde", "DO_28","El Seibo", "DO_29","Hato Mayor", "DO_30","La Vega", "DO_31","Monsenor Nouel", "DO_32","Monte Plata", "DO_33","San Cristobal", "DZ_01","Alger", "DZ_03","Batna", "DZ_04","Constantine", "DZ_06","Medea", "DZ_07","Mostaganem", "DZ_09","Oran", "DZ_10","Saida", "DZ_12","Setif", "DZ_13","Tiaret", "DZ_14","Tizi Ouzou", "DZ_15","Tlemcen", "DZ_18","Bejaia", "DZ_19","Biskra", "DZ_20","Blida", "DZ_21","Bouira", "DZ_22","Djelfa", "DZ_23","Guelma", "DZ_24","Jijel", "DZ_25","Laghouat", "DZ_26","Mascara", "DZ_27","M'sila", "DZ_29","Oum el Bouaghi", "DZ_30","Sidi Bel Abbes", "DZ_31","Skikda", "DZ_33","Tebessa", "DZ_34","Adrar", "DZ_35","Ain Defla", "DZ_36","Ain Temouchent", "DZ_37","Annaba", "DZ_38","Bechar", "DZ_39","Bordj Bou Arreridj", "DZ_40","Boumerdes", "DZ_41","Chlef", "DZ_42","El Bayadh", "DZ_43","El Oued", "DZ_44","El Tarf", "DZ_45","Ghardaia", "DZ_46","Illizi", "DZ_47","Khenchela", "DZ_48","Mila", "DZ_49","Naama", "DZ_50","Ouargla", "DZ_51","Relizane", "DZ_52","Souk Ahras", "DZ_53","Tamanghasset", "DZ_54","Tindouf", "DZ_55","Tipaza", "DZ_56","Tissemsilt", "EC_01","Galapagos", "EC_02","Azuay", "EC_03","Bolivar", "EC_04","Canar", "EC_05","Carchi", "EC_06","Chimborazo", "EC_07","Cotopaxi", "EC_08","El Oro", "EC_09","Esmeraldas", "EC_10","Guayas", "EC_11","Imbabura", "EC_12","Loja", "EC_13","Los Rios", "EC_14","Manabi", "EC_15","Morona-Santiago", "EC_17","Pastaza", "EC_18","Pichincha", "EC_19","Tungurahua", "EC_20","Zamora-Chinchipe", "EC_22","Sucumbios", "EC_23","Napo", "EC_24","Orellana", "EE_01","Harjumaa", "EE_02","Hiiumaa", "EE_03","Ida-Virumaa", "EE_04","Jarvamaa", "EE_05","Jogevamaa", "EE_06","Kohtla-Jarve", "EE_07","Laanemaa", "EE_08","Laane-Virumaa", "EE_09","Narva", "EE_10","Parnu", "EE_11","Parnumaa", "EE_12","Polvamaa", "EE_13","Raplamaa", "EE_14","Saaremaa", "EE_15","Sillamae", "EE_16","Tallinn", "EE_17","Tartu", "EE_18","Tartumaa", "EE_19","Valgamaa", "EE_20","Viljandimaa", "EE_21","Vorumaa", "EG_01","Ad Daqahliyah", "EG_02","Al Bahr al Ahmar", "EG_03","Al Buhayrah", "EG_04","Al Fayyum", "EG_05","Al Gharbiyah", "EG_06","Al Iskandariyah", "EG_07","Al Isma'iliyah", "EG_08","Al Jizah", "EG_09","Al Minufiyah", "EG_10","Al Minya", "EG_11","Al Qahirah", "EG_12","Al Qalyubiyah", "EG_13","Al Wadi al Jadid", "EG_14","Ash Sharqiyah", "EG_15","As Suways", "EG_16","Aswan", "EG_17","Asyut", "EG_18","Bani Suwayf", "EG_19","Bur Sa'id", "EG_20","Dumyat", "EG_21","Kafr ash Shaykh", "EG_22","Matruh", "EG_23","Qina", "EG_24","Suhaj", "EG_26","Janub Sina'", "EG_27","Shamal Sina'", "ES_07","Islas Baleares", "ES_27","La Rioja", "ES_29","Madrid", "ES_31","Murcia", "ES_32","Navarra", "ES_34","Asturias", "ES_39","Cantabria", "ES_51","Andalucia", "ES_52","Aragon", "ES_53","Canarias", "ES_54","Castilla-La Mancha", "ES_55","Castilla y Leon", "ES_56","Cataluna", "ES_57","Extremadura", "ES_58","Galicia", "ES_59","Pais Vasco", "ES_60","Comunidad Valenciana", "ET_02","Amhara", "ET_07","Somali", "ET_08","Gambella", "ET_10","Addis Abeba", "ET_11","Southern", "ET_12","Tigray", "ET_13","Benishangul", "ET_14","Afar", "ET_44","Adis Abeba", "ET_45","Afar", "ET_46","Amara", "ET_47","Binshangul Gumuz", "ET_48","Dire Dawa", "ET_49","Gambela Hizboch", "ET_50","Hareri Hizb", "ET_51","Oromiya", "ET_52","Sumale", "ET_53","Tigray", "ET_54","YeDebub Biheroch Bihereseboch na Hizboch", "FI_01","Åland", "FI_06","Lapland", "FI_08","Oulu", "FI_13","Southern Finland", "FI_14","Eastern Finland", "FI_15","Western Finland", "FJ_01","Central", "FJ_02","Eastern", "FJ_03","Northern", "FJ_04","Rotuma", "FJ_05","Western", "FM_01","Kosrae", "FM_02","Pohnpei", "FM_03","Chuuk", "FM_04","Yap", "FR_97","Aquitaine", "FR_98","Auvergne", "FR_99","Basse-Normandie", "FR_A1","Bourgogne", "FR_A2","Bretagne", "FR_A3","Centre", "FR_A4","Champagne-Ardenne", "FR_A5","Corse", "FR_A6","Franche-Comte", "FR_A7","Haute-Normandie", "FR_A8","Ile-de-France", "FR_A9","Languedoc-Roussillon", "FR_B1","Limousin", "FR_B2","Lorraine", "FR_B3","Midi-Pyrenees", "FR_B4","Nord-Pas-de-Calais", "FR_B5","Pays de la Loire", "FR_B6","Picardie", "FR_B7","Poitou-Charentes", "FR_B8","Provence-Alpes-Cote d'Azur", "FR_B9","Rhone-Alpes", "FR_C1","Alsace", "GA_01","Estuaire", "GA_02","Haut-Ogooue", "GA_03","Moyen-Ogooue", "GA_04","Ngounie", "GA_05","Nyanga", "GA_06","Ogooue-Ivindo", "GA_07","Ogooue-Lolo", "GA_08","Ogooue-Maritime", "GA_09","Woleu-Ntem", "GB_01","Avon", "GB_03","Berkshire", "GB_07","Cleveland", "GB_08","Cornwall", "GB_09","Cumbria", "GB_17","Greater London", "GB_18","Greater Manchester", "GB_20","Hereford and Worcester", "GB_22","Humberside", "GB_28","Merseyside", "GB_37","South Yorkshire", "GB_41","Tyne and Wear", "GB_43","West Midlands", "GB_45","West Yorkshire", "GB_79","Central", "GB_82","Grampian", "GB_84","Lothian", "GB_87","Strathclyde", "GB_88","Tayside", "GB_90","Clwyd", "GB_91","Dyfed", "GB_92","Gwent", "GB_94","Mid Glamorgan", "GB_96","South Glamorgan", "GB_97","West Glamorgan", "GB_A1","Barking and Dagenham", "GB_A2","Barnet", "GB_A3","Barnsley", "GB_A4","Bath and North East Somerset", "GB_A5","Bedfordshire", "GB_A6","Bexley", "GB_A7","Birmingham", "GB_A8","Blackburn with Darwen", "GB_A9","Blackpool", "GB_B1","Bolton", "GB_B2","Bournemouth", "GB_B3","Bracknell Forest", "GB_B4","Bradford", "GB_B5","Brent", "GB_B6","Brighton and Hove", "GB_B7","Bristol, City of", "GB_B8","Bromley", "GB_B9","Buckinghamshire", "GB_C1","Bury", "GB_C2","Calderdale", "GB_C3","Cambridgeshire", "GB_C4","Camden", "GB_C5","Cheshire", "GB_C7","Coventry", "GB_C8","Croydon", "GB_D1","Darlington", "GB_D2","Derby", "GB_D3","Derbyshire", "GB_D4","Devon", "GB_D5","Doncaster", "GB_D6","Dorset", "GB_D7","Dudley", "GB_D8","Durham", "GB_D9","Ealing", "GB_E1","East Riding of Yorkshire", "GB_E2","East Sussex", "GB_E3","Enfield", "GB_E4","Essex", "GB_E5","Gateshead", "GB_E6","Gloucestershire", "GB_E7","Greenwich", "GB_E8","Hackney", "GB_E9","Halton", "GB_F1","Hammersmith and Fulham", "GB_F2","Hampshire", "GB_F3","Haringey", "GB_F4","Harrow", "GB_F5","Hartlepool", "GB_F6","Havering", "GB_F7","Herefordshire", "GB_F8","Hertford", "GB_F9","Hillingdon", "GB_G1","Hounslow", "GB_G2","Isle of Wight", "GB_G3","Islington", "GB_G4","Kensington and Chelsea", "GB_G5","Kent", "GB_G6","Kingston upon Hull, City of", "GB_G7","Kingston upon Thames", "GB_G8","Kirklees", "GB_G9","Knowsley", "GB_H1","Lambeth", "GB_H2","Lancashire", "GB_H3","Leeds", "GB_H4","Leicester", "GB_H5","Leicestershire", "GB_H6","Lewisham", "GB_H7","Lincolnshire", "GB_H8","Liverpool", "GB_H9","London, City of", "GB_I1","Luton", "GB_I2","Manchester", "GB_I3","Medway", "GB_I4","Merton", "GB_I5","Middlesbrough", "GB_I6","Milton Keynes", "GB_I7","Newcastle upon Tyne", "GB_I8","Newham", "GB_I9","Norfolk", "GB_J1","Northamptonshire", "GB_J2","North East Lincolnshire", "GB_J3","North Lincolnshire", "GB_J4","North Somerset", "GB_J5","North Tyneside", "GB_J6","Northumberland", "GB_J7","North Yorkshire", "GB_J8","Nottingham", "GB_J9","Nottinghamshire", "GB_K1","Oldham", "GB_K2","Oxfordshire", "GB_K3","Peterborough", "GB_K4","Plymouth", "GB_K5","Poole", "GB_K6","Portsmouth", "GB_K7","Reading", "GB_K8","Redbridge", "GB_K9","Redcar and Cleveland", "GB_L1","Richmond upon Thames", "GB_L2","Rochdale", "GB_L3","Rotherham", "GB_L4","Rutland", "GB_L5","Salford", "GB_L6","Shropshire", "GB_L7","Sandwell", "GB_L8","Sefton", "GB_L9","Sheffield", "GB_M1","Slough", "GB_M2","Solihull", "GB_M3","Somerset", "GB_M4","Southampton", "GB_M5","Southend-on-Sea", "GB_M6","South Gloucestershire", "GB_M7","South Tyneside", "GB_M8","Southwark", "GB_M9","Staffordshire", "GB_N1","St. Helens", "GB_N2","Stockport", "GB_N3","Stockton-on-Tees", "GB_N4","Stoke-on-Trent", "GB_N5","Suffolk", "GB_N6","Sunderland", "GB_N7","Surrey", "GB_N8","Sutton", "GB_N9","Swindon", "GB_O1","Tameside", "GB_O2","Telford and Wrekin", "GB_O3","Thurrock", "GB_O4","Torbay", "GB_O5","Tower Hamlets", "GB_O6","Trafford", "GB_O7","Wakefield", "GB_O8","Walsall", "GB_O9","Waltham Forest", "GB_P1","Wandsworth", "GB_P2","Warrington", "GB_P3","Warwickshire", "GB_P4","West Berkshire", "GB_P5","Westminster", "GB_P6","West Sussex", "GB_P7","Wigan", "GB_P8","Wiltshire", "GB_P9","Windsor and Maidenhead", "GB_Q1","Wirral", "GB_Q2","Wokingham", "GB_Q3","Wolverhampton", "GB_Q4","Worcestershire", "GB_Q5","York", "GB_Q6","Antrim", "GB_Q7","Ards", "GB_Q8","Armagh", "GB_Q9","Ballymena", "GB_R1","Ballymoney", "GB_R2","Banbridge", "GB_R3","Belfast", "GB_R4","Carrickfergus", "GB_R5","Castlereagh", "GB_R6","Coleraine", "GB_R7","Cookstown", "GB_R8","Craigavon", "GB_R9","Down", "GB_S1","Dungannon", "GB_S2","Fermanagh", "GB_S3","Larne", "GB_S4","Limavady", "GB_S5","Lisburn", "GB_S6","Derry", "GB_S7","Magherafelt", "GB_S8","Moyle", "GB_S9","Newry and Mourne", "GB_T1","Newtownabbey", "GB_T2","North Down", "GB_T3","Omagh", "GB_T4","Strabane", "GB_T5","Aberdeen City", "GB_T6","Aberdeenshire", "GB_T7","Angus", "GB_T8","Argyll and Bute", "GB_T9","Scottish Borders, The", "GB_U1","Clackmannanshire", "GB_U2","Dumfries and Galloway", "GB_U3","Dundee City", "GB_U4","East Ayrshire", "GB_U5","East Dunbartonshire", "GB_U6","East Lothian", "GB_U7","East Renfrewshire", "GB_U8","Edinburgh, City of", "GB_U9","Falkirk", "GB_V1","Fife", "GB_V2","Glasgow City", "GB_V3","Highland", "GB_V4","Inverclyde", "GB_V5","Midlothian", "GB_V6","Moray", "GB_V7","North Ayrshire", "GB_V8","North Lanarkshire", "GB_V9","Orkney", "GB_W1","Perth and Kinross", "GB_W2","Renfrewshire", "GB_W3","Shetland Islands", "GB_W4","South Ayrshire", "GB_W5","South Lanarkshire", "GB_W6","Stirling", "GB_W7","West Dunbartonshire", "GB_W8","Eilean Siar", "GB_W9","West Lothian", "GB_X1","Isle of Anglesey", "GB_X2","Blaenau Gwent", "GB_X3","Bridgend", "GB_X4","Caerphilly", "GB_X5","Cardiff", "GB_X6","Ceredigion", "GB_X7","Carmarthenshire", "GB_X8","Conwy", "GB_X9","Denbighshire", "GB_Y1","Flintshire", "GB_Y2","Gwynedd", "GB_Y3","Merthyr Tydfil", "GB_Y4","Monmouthshire", "GB_Y5","Neath Port Talbot", "GB_Y6","Newport", "GB_Y7","Pembrokeshire", "GB_Y8","Powys", "GB_Y9","Rhondda Cynon Taff", "GB_Z1","Swansea", "GB_Z2","Torfaen", "GB_Z3","Vale of Glamorgan, The", "GB_Z4","Wrexham", "GD_01","Saint Andrew", "GD_02","Saint David", "GD_03","Saint George", "GD_04","Saint John", "GD_05","Saint Mark", "GD_06","Saint Patrick", "GE_01","Abashis Raioni", "GE_02","Abkhazia", "GE_03","Adigenis Raioni", "GE_04","Ajaria", "GE_05","Akhalgoris Raioni", "GE_06","Akhalk'alak'is Raioni", "GE_07","Akhalts'ikhis Raioni", "GE_08","Akhmetis Raioni", "GE_09","Ambrolauris Raioni", "GE_10","Aspindzis Raioni", "GE_11","Baghdat'is Raioni", "GE_12","Bolnisis Raioni", "GE_13","Borjomis Raioni", "GE_14","Chiat'ura", "GE_15","Ch'khorotsqus Raioni", "GE_16","Ch'okhatauris Raioni", "GE_17","Dedop'listsqaros Raioni", "GE_18","Dmanisis Raioni", "GE_19","Dushet'is Raioni", "GE_20","Gardabanis Raioni", "GE_21","Gori", "GE_22","Goris Raioni", "GE_23","Gurjaanis Raioni", "GE_24","Javis Raioni", "GE_25","K'arelis Raioni", "GE_26","Kaspis Raioni", "GE_27","Kharagaulis Raioni", "GE_28","Khashuris Raioni", "GE_29","Khobis Raioni", "GE_30","Khonis Raioni", "GE_31","K'ut'aisi", "GE_32","Lagodekhis Raioni", "GE_33","Lanch'khut'is Raioni", "GE_34","Lentekhis Raioni", "GE_35","Marneulis Raioni", "GE_36","Martvilis Raioni", "GE_37","Mestiis Raioni", "GE_38","Mts'khet'is Raioni", "GE_39","Ninotsmindis Raioni", "GE_40","Onis Raioni", "GE_41","Ozurget'is Raioni", "GE_42","P'ot'i", "GE_43","Qazbegis Raioni", "GE_44","Qvarlis Raioni", "GE_45","Rust'avi", "GE_46","Sach'kheris Raioni", "GE_47","Sagarejos Raioni", "GE_48","Samtrediis Raioni", "GE_49","Senakis Raioni", "GE_50","Sighnaghis Raioni", "GE_51","T'bilisi", "GE_52","T'elavis Raioni", "GE_53","T'erjolis Raioni", "GE_54","T'et'ritsqaros Raioni", "GE_55","T'ianet'is Raioni", "GE_56","Tqibuli", "GE_57","Ts'ageris Raioni", "GE_58","Tsalenjikhis Raioni", "GE_59","Tsalkis Raioni", "GE_60","Tsqaltubo", "GE_61","Vanis Raioni", "GE_62","Zestap'onis Raioni", "GE_63","Zugdidi", "GE_64","Zugdidis Raioni", "GH_01","Greater Accra", "GH_02","Ashanti", "GH_03","Brong-Ahafo", "GH_04","Central", "GH_05","Eastern", "GH_06","Northern", "GH_08","Volta", "GH_09","Western", "GH_10","Upper East", "GH_11","Upper West", "GL_01","Nordgronland", "GL_02","Ostgronland", "GL_03","Vestgronland", "GM_01","Banjul", "GM_02","Lower River", "GM_03","MacCarthy Island", "GM_04","Upper River", "GM_05","Western", "GM_07","North Bank", "GN_01","Beyla", "GN_02","Boffa", "GN_03","Boke", "GN_04","Conakry", "GN_05","Dabola", "GN_06","Dalaba", "GN_07","Dinguiraye", "GN_09","Faranah", "GN_10","Forecariah", "GN_11","Fria", "GN_12","Gaoual", "GN_13","Gueckedou", "GN_15","Kerouane", "GN_16","Kindia", "GN_17","Kissidougou", "GN_18","Koundara", "GN_19","Kouroussa", "GN_21","Macenta", "GN_22","Mali", "GN_23","Mamou", "GN_25","Pita", "GN_27","Telimele", "GN_28","Tougue", "GN_29","Yomou", "GN_30","Coyah", "GN_31","Dubreka", "GN_32","Kankan", "GN_33","Koubia", "GN_34","Labe", "GN_35","Lelouma", "GN_36","Lola", "GN_37","Mandiana", "GN_38","Nzerekore", "GN_39","Siguiri", "GQ_03","Annobon", "GQ_04","Bioko Norte", "GQ_05","Bioko Sur", "GQ_06","Centro Sur", "GQ_07","Kie-Ntem", "GQ_08","Litoral", "GQ_09","Wele-Nzas", "GR_01","Evros", "GR_02","Rodhopi", "GR_03","Xanthi", "GR_04","Drama", "GR_05","Serrai", "GR_06","Kilkis", "GR_07","Pella", "GR_08","Florina", "GR_09","Kastoria", "GR_10","Grevena", "GR_11","Kozani", "GR_12","Imathia", "GR_13","Thessaloniki", "GR_14","Kavala", "GR_15","Khalkidhiki", "GR_16","Pieria", "GR_17","Ioannina", "GR_18","Thesprotia", "GR_19","Preveza", "GR_20","Arta", "GR_21","Larisa", "GR_22","Trikala", "GR_23","Kardhitsa", "GR_24","Magnisia", "GR_25","Kerkira", "GR_26","Levkas", "GR_27","Kefallinia", "GR_28","Zakinthos", "GR_29","Fthiotis", "GR_30","Evritania", "GR_31","Aitolia kai Akarnania", "GR_32","Fokis", "GR_33","Voiotia", "GR_34","Evvoia", "GR_35","Attiki", "GR_36","Argolis", "GR_37","Korinthia", "GR_38","Akhaia", "GR_39","Ilia", "GR_40","Messinia", "GR_41","Arkadhia", "GR_42","Lakonia", "GR_43","Khania", "GR_44","Rethimni", "GR_45","Iraklion", "GR_46","Lasithi", "GR_47","Dhodhekanisos", "GR_48","Samos", "GR_49","Kikladhes", "GR_50","Khios", "GR_51","Lesvos", "GT_01","Alta Verapaz", "GT_02","Baja Verapaz", "GT_03","Chimaltenango", "GT_04","Chiquimula", "GT_05","El Progreso", "GT_06","Escuintla", "GT_07","Guatemala", "GT_08","Huehuetenango", "GT_09","Izabal", "GT_10","Jalapa", "GT_11","Jutiapa", "GT_12","Peten", "GT_13","Quetzaltenango", "GT_14","Quiche", "GT_15","Retalhuleu", "GT_16","Sacatepequez", "GT_17","San Marcos", "GT_18","Santa Rosa", "GT_19","Solola", "GT_20","Suchitepequez", "GT_21","Totonicapan", "GT_22","Zacapa", "GW_01","Bafata", "GW_02","Quinara", "GW_04","Oio", "GW_05","Bolama", "GW_06","Cacheu", "GW_07","Tombali", "GW_10","Gabu", "GW_11","Bissau", "GW_12","Biombo", "GY_10","Barima-Waini", "GY_11","Cuyuni-Mazaruni", "GY_12","Demerara-Mahaica", "GY_13","East Berbice-Corentyne", "GY_14","Essequibo Islands-West Demerara", "GY_15","Mahaica-Berbice", "GY_16","Pomeroon-Supenaam", "GY_17","Potaro-Siparuni", "GY_18","Upper Demerara-Berbice", "GY_19","Upper Takutu-Upper Essequibo", "HN_01","Atlantida", "HN_02","Choluteca", "HN_03","Colon", "HN_04","Comayagua", "HN_05","Copan", "HN_06","Cortes", "HN_07","El Paraiso", "HN_08","Francisco Morazan", "HN_09","Gracias a Dios", "HN_10","Intibuca", "HN_11","Islas de la Bahia", "HN_12","La Paz", "HN_13","Lempira", "HN_14","Ocotepeque", "HN_15","Olancho", "HN_16","Santa Barbara", "HN_17","Valle", "HN_18","Yoro", "HR_01","Bjelovarsko-Bilogorska", "HR_02","Brodsko-Posavska", "HR_03","Dubrovacko-Neretvanska", "HR_04","Istarska", "HR_05","Karlovacka", "HR_06","Koprivnicko-Krizevacka", "HR_07","Krapinsko-Zagorska", "HR_08","Licko-Senjska", "HR_09","Medimurska", "HR_10","Osjecko-Baranjska", "HR_11","Pozesko-Slavonska", "HR_12","Primorsko-Goranska", "HR_13","Sibensko-Kninska", "HR_14","Sisacko-Moslavacka", "HR_15","Splitsko-Dalmatinska", "HR_16","Varazdinska", "HR_17","Viroviticko-Podravska", "HR_18","Vukovarsko-Srijemska", "HR_19","Zadarska", "HR_20","Zagrebacka", "HR_21","Grad Zagreb", "HT_03","Nord-Ouest", "HT_06","Artibonite", "HT_07","Centre", "HT_08","Grand' Anse", "HT_09","Nord", "HT_10","Nord-Est", "HT_11","Ouest", "HT_12","Sud", "HT_13","Sud-Est", "HU_01","Bacs-Kiskun", "HU_02","Baranya", "HU_03","Bekes", "HU_04","Borsod-Abauj-Zemplen", "HU_05","Budapest", "HU_06","Csongrad", "HU_07","Debrecen", "HU_08","Fejer", "HU_09","Gyor-Moson-Sopron", "HU_10","Hajdu-Bihar", "HU_11","Heves", "HU_12","Komarom-Esztergom", "HU_13","Miskolc", "HU_14","Nograd", "HU_15","Pecs", "HU_16","Pest", "HU_17","Somogy", "HU_18","Szabolcs-Szatmar-Bereg", "HU_19","Szeged", "HU_20","Jasz-Nagykun-Szolnok", "HU_21","Tolna", "HU_22","Vas", "HU_23","Veszprem", "HU_24","Zala", "HU_25","Gyor", "HU_26","Bekescsaba", "HU_27","Dunaujvaros", "HU_28","Eger", "HU_29","Hodmezovasarhely", "HU_30","Kaposvar", "HU_31","Kecskemet", "HU_32","Nagykanizsa", "HU_33","Nyiregyhaza", "HU_34","Sopron", "HU_35","Szekesfehervar", "HU_36","Szolnok", "HU_37","Szombathely", "HU_38","Tatabanya", "HU_39","Veszprem", "HU_40","Zalaegerszeg", "ID_01","Aceh", "ID_02","Bali", "ID_03","Bengkulu", "ID_04","Jakarta Raya", "ID_05","Jambi", "ID_07","Jawa Tengah", "ID_08","Jawa Timur", "ID_09","Papua", "ID_10","Yogyakarta", "ID_11","Kalimantan Barat", "ID_12","Kalimantan Selatan", "ID_13","Kalimantan Tengah", "ID_14","Kalimantan Timur", "ID_15","Lampung", "ID_17","Nusa Tenggara Barat", "ID_18","Nusa Tenggara Timur", "ID_19","Riau", "ID_20","Sulawesi Selatan", "ID_21","Sulawesi Tengah", "ID_22","Sulawesi Tenggara", "ID_24","Sumatera Barat", "ID_26","Sumatera Utara", "ID_28","Maluku", "ID_29","Maluku Utara", "ID_30","Jawa Barat", "ID_31","Sulawesi Utara", "ID_32","Sumatera Selatan", "ID_33","Banten", "ID_34","Gorontalo", "ID_35","Kepulauan Bangka Belitung", "IE_01","Carlow", "IE_02","Cavan", "IE_03","Clare", "IE_04","Cork", "IE_06","Donegal", "IE_07","Dublin", "IE_10","Galway", "IE_11","Kerry", "IE_12","Kildare", "IE_13","Kilkenny", "IE_14","Leitrim", "IE_15","Laois", "IE_16","Limerick", "IE_18","Longford", "IE_19","Louth", "IE_20","Mayo", "IE_21","Meath", "IE_22","Monaghan", "IE_23","Offaly", "IE_24","Roscommon", "IE_25","Sligo", "IE_26","Tipperary", "IE_27","Waterford", "IE_29","Westmeath", "IE_30","Wexford", "IE_31","Wicklow", "IL_01","HaDarom", "IL_02","HaMerkaz", "IL_03","HaZafon", "IL_04","Hefa", "IL_05","Tel Aviv", "IL_06","Yerushalayim", "IN_01","Andaman and Nicobar Islands", "IN_02","Andhra Pradesh", "IN_03","Assam", "IN_05","Chandigarh", "IN_06","Dadra and Nagar Haveli", "IN_07","Delhi", "IN_09","Gujarat", "IN_10","Haryana", "IN_11","Himachal Pradesh", "IN_12","Jammu and Kashmir", "IN_13","Kerala", "IN_14","Lakshadweep", "IN_16","Maharashtra", "IN_17","Manipur", "IN_18","Meghalaya", "IN_19","Karnataka", "IN_20","Nagaland", "IN_21","Orissa", "IN_22","Pondicherry", "IN_23","Punjab", "IN_24","Rajasthan", "IN_25","Tamil Nadu", "IN_26","Tripura", "IN_28","West Bengal", "IN_29","Sikkim", "IN_30","Arunachal Pradesh", "IN_31","Mizoram", "IN_32","Daman and Diu", "IN_33","Goa", "IN_34","Bihar", "IN_35","Madhya Pradesh", "IN_36","Uttar Pradesh", "IN_37","Chhattisgarh", "IN_38","Jharkhand", "IN_39","Uttaranchal", "IQ_01","Al Anbar", "IQ_02","Al Basrah", "IQ_03","Al Muthanna", "IQ_04","Al Qadisiyah", "IQ_05","As Sulaymaniyah", "IQ_06","Babil", "IQ_07","Baghdad", "IQ_08","Dahuk", "IQ_09","Dhi Qar", "IQ_10","Diyala", "IQ_11","Arbil", "IQ_12","Karbala'", "IQ_13","At Ta'mim", "IQ_14","Maysan", "IQ_15","Ninawa", "IQ_16","Wasit", "IQ_17","An Najaf", "IQ_18","Salah ad Din", "IR_01","Azarbayjan-e Bakhtari", "IR_02","Azarbayjan-e Khavari", "IR_03","Chahar Mahall va Bakhtiari", "IR_04","Sistan va Baluchestan", "IR_05","Kohkiluyeh va Buyer Ahmadi", "IR_07","Fars", "IR_08","Gilan", "IR_09","Hamadan", "IR_10","Ilam", "IR_11","Hormozgan", "IR_13","Bakhtaran", "IR_15","Khuzestan", "IR_16","Kordestan", "IR_22","Bushehr", "IR_23","Lorestan", "IR_25","Semnan", "IR_26","Tehran", "IR_28","Esfahan", "IR_29","Kerman", "IR_30","Khorasan", "IR_31","Yazd", "IR_34","Markazi", "IR_35","Mazandaran", "IR_36","Zanjan", "IR_37","Golestan", "IR_38","Qazvin", "IR_39","Qom", "IS_01","Akranes", "IS_02","Akureyri", "IS_03","Arnessysla", "IS_04","Austur-Bardastrandarsysla", "IS_05","Austur-Hunavatnssysla", "IS_06","Austur-Skaftafellssysla", "IS_07","Borgarfjardarsysla", "IS_08","Dalasysla", "IS_09","Eyjafjardarsysla", "IS_10","Gullbringusysla", "IS_11","Hafnarfjordur", "IS_12","Husavik", "IS_13","Isafjordur", "IS_14","Keflavik", "IS_15","Kjosarsysla", "IS_16","Kopavogur", "IS_17","Myrasysla", "IS_18","Neskaupstadur", "IS_19","Nordur-Isafjardarsysla", "IS_20","Nordur-Mulasysla", "IS_21","Nordur-Tingeyjarsysla", "IS_22","Olafsfjordur", "IS_23","Rangarvallasysla", "IS_24","Reykjavik", "IS_25","Saudarkrokur", "IS_26","Seydisfjordur", "IS_27","Siglufjordur", "IS_28","Skagafjardarsysla", "IS_29","Snafellsnes- og Hnappadalssysla", "IS_30","Strandasysla", "IS_31","Sudur-Mulasysla", "IS_32","Sudur-Tingeyjarsysla", "IS_33","Vestmannaeyjar", "IS_34","Vestur-Bardastrandarsysla", "IS_35","Vestur-Hunavatnssysla", "IS_36","Vestur-Isafjardarsysla", "IS_37","Vestur-Skaftafellssysla", "IT_01","Abruzzi", "IT_02","Basilicata", "IT_03","Calabria", "IT_04","Campania", "IT_05","Emilia-Romagna", "IT_06","Friuli-Venezia Giulia", "IT_07","Lazio", "IT_08","Liguria", "IT_09","Lombardia", "IT_10","Marche", "IT_11","Molise", "IT_12","Piemonte", "IT_13","Puglia", "IT_14","Sardegna", "IT_15","Sicilia", "IT_16","Toscana", "IT_17","Trentino-Alto Adige", "IT_18","Umbria", "IT_19","Valle d'Aosta", "IT_20","Veneto", "JM_01","Clarendon", "JM_02","Hanover", "JM_04","Manchester", "JM_07","Portland", "JM_08","Saint Andrew", "JM_09","Saint Ann", "JM_10","Saint Catherine", "JM_11","Saint Elizabeth", "JM_12","Saint James", "JM_13","Saint Mary", "JM_14","Saint Thomas", "JM_15","Trelawny", "JM_16","Westmoreland", "JM_17","Kingston", "JO_02","Al Balqa'", "JO_07","Ma", "JO_09","Al Karak", "JO_10","Al Mafraq", "JO_12","At Tafilah", "JO_13","Az Zarqa", "JO_14","Irbid", "JP_01","Aichi", "JP_02","Akita", "JP_03","Aomori", "JP_04","Chiba", "JP_05","Ehime", "JP_06","Fukui", "JP_07","Fukuoka", "JP_08","Fukushima", "JP_09","Gifu", "JP_10","Gumma", "JP_11","Hiroshima", "JP_12","Hokkaido", "JP_13","Hyogo", "JP_14","Ibaraki", "JP_15","Ishikawa", "JP_16","Iwate", "JP_17","Kagawa", "JP_18","Kagoshima", "JP_19","Kanagawa", "JP_20","Kochi", "JP_21","Kumamoto", "JP_22","Kyoto", "JP_23","Mie", "JP_24","Miyagi", "JP_25","Miyazaki", "JP_26","Nagano", "JP_27","Nagasaki", "JP_28","Nara", "JP_29","Niigata", "JP_30","Oita", "JP_31","Okayama", "JP_32","Osaka", "JP_33","Saga", "JP_34","Saitama", "JP_35","Shiga", "JP_36","Shimane", "JP_37","Shizuoka", "JP_38","Tochigi", "JP_39","Tokushima", "JP_40","Tokyo", "JP_41","Tottori", "JP_42","Toyama", "JP_43","Wakayama", "JP_44","Yamagata", "JP_45","Yamaguchi", "JP_46","Yamanashi", "JP_47","Okinawa", "KE_01","Central", "KE_02","Coast", "KE_03","Eastern", "KE_05","Nairobi Area", "KE_06","North-Eastern", "KE_07","Nyanza", "KE_08","Rift Valley", "KE_09","Western", "KG_09","Batken", "KH_02","Kampong Cham", "KH_03","Kampong Chhnang", "KH_04","Kampong Spoe", "KH_05","Kampong Thum", "KH_06","Kampot", "KH_07","Kandal", "KH_08","Kaoh Kong", "KH_09","Kracheh", "KH_10","Mondol Kiri", "KH_11","Phnum Penh", "KH_12","Pouthisat", "KH_13","Preah Vihear", "KH_14","Prey Veng", "KH_15","Rotanokiri", "KH_16","Siemreab-Otdar Meanchey", "KH_17","Stoeng Treng", "KH_18","Svay Rieng", "KH_19","Takev", "KH_29","Batdambang", "KH_30","Pailin", "KI_01","Gilbert Islands", "KI_02","Line Islands", "KI_03","Phoenix Islands", "KM_01","Anjouan", "KM_02","Grande Comore", "KM_03","Moheli", "KN_01","Christ Church Nichola Town", "KN_02","Saint Anne Sandy Point", "KN_03","Saint George Basseterre", "KN_04","Saint George Gingerland", "KN_05","Saint James Windward", "KN_06","Saint John Capisterre", "KN_07","Saint John Figtree", "KN_08","Saint Mary Cayon", "KN_09","Saint Paul Capisterre", "KN_10","Saint Paul Charlestown", "KN_11","Saint Peter Basseterre", "KN_12","Saint Thomas Lowland", "KN_13","Saint Thomas Middle Island", "KN_15","Trinity Palmetto Point", "KP_01","Chagang-do", "KP_03","Hamgyong-namdo", "KP_06","Hwanghae-namdo", "KP_07","Hwanghae-bukto", "KP_08","Kaesong-si", "KP_09","Kangwon-do", "KP_11","P'yongan-bukto", "KP_12","P'yongyang-si", "KP_13","Yanggang-do", "KP_14","Namp'o-si", "KP_15","P'yongan-namdo", "KP_17","Hamgyong-bukto", "KP_18","Najin Sonbong-si", "KR_01","Cheju-do", "KR_03","Cholla-bukto", "KR_05","Ch'ungch'ong-bukto", "KR_06","Kangwon-do", "KR_10","Pusan-jikhalsi", "KR_11","Seoul-t'ukpyolsi", "KR_12","Inch'on-jikhalsi", "KR_13","Kyonggi-do", "KR_14","Kyongsang-bukto", "KR_15","Taegu-jikhalsi", "KR_16","Cholla-namdo", "KR_17","Ch'ungch'ong-namdo", "KR_18","Kwangju-jikhalsi", "KR_19","Taejon-jikhalsi", "KR_20","Kyongsang-namdo", "KR_21","Ulsan-gwangyoksi", "KW_01","Al Ahmadi", "KW_02","Al Kuwayt", "KW_03","Hawalli", "KY_01","Creek", "KY_02","Eastern", "KY_03","Midland", "KY_04","South Town", "KY_05","Spot Bay", "KY_06","Stake Bay", "KY_07","West End", "KY_08","Western", "KZ_01","Almaty", "KZ_02","Almaty City", "KZ_03","Aqmola", "KZ_04","Aqtöbe", "KZ_05","Astana", "KZ_06","Atyrau", "KZ_07","West Kazakhstan", "KZ_08","Bayqonyr", "KZ_09","Mangghystau", "KZ_10","South Kazakhstan", "KZ_11","Pavlodar", "KZ_12","Qaraghandy", "KZ_13","Qostanay", "KZ_14","Qyzylorda", "KZ_15","East Kazakhstan", "KZ_16","North Kazakhstan", "KZ_17","Zhambyl", "LA_01","Attapu", "LA_02","Champasak", "LA_03","Houaphan", "LA_04","Khammouan", "LA_05","Louang Namtha", "LA_06","Louangphrabang", "LA_07","Oudomxai", "LA_08","Phongsali", "LA_09","Saravan", "LA_10","Savannakhet", "LA_11","Vientiane", "LA_13","Xaignabouri", "LA_14","Xiangkhoang", "LB_01","Beqaa", "LB_03","Liban-Nord", "LB_04","Beyrouth", "LB_05","Mont-Liban", "LB_06","Liban-Sud", "LB_07","Nabatiye", "LC_01","Anse-la-Raye", "LC_02","Dauphin", "LC_03","Castries", "LC_04","Choiseul", "LC_05","Dennery", "LC_06","Gros-Islet", "LC_07","Laborie", "LC_08","Micoud", "LC_09","Soufriere", "LC_10","Vieux-Fort", "LC_11","Praslin", "LI_01","Balzers", "LI_02","Eschen", "LI_03","Gamprin", "LI_04","Mauren", "LI_05","Planken", "LI_06","Ruggell", "LI_07","Schaan", "LI_08","Schellenberg", "LI_09","Triesen", "LI_10","Triesenberg", "LI_11","Vaduz", "LK_01","Amparai", "LK_02","Anuradhapura", "LK_03","Badulla", "LK_04","Batticaloa", "LK_06","Galle", "LK_07","Hambantota", "LK_09","Kalutara", "LK_10","Kandy", "LK_11","Kegalla", "LK_12","Kurunegala", "LK_14","Matale", "LK_15","Matara", "LK_16","Moneragala", "LK_17","Nuwara Eliya", "LK_18","Polonnaruwa", "LK_19","Puttalam", "LK_20","Ratnapura", "LK_21","Trincomalee", "LK_23","Colombo", "LK_24","Gampaha", "LK_25","Jaffna", "LK_26","Mannar", "LK_27","Mullaittivu", "LK_28","Vavuniya", "LR_01","Bong", "LR_02","Grand Jide", "LR_03","Grand Bassa", "LR_04","Grand Cape Mount", "LR_05","Lofa", "LR_06","Maryland", "LR_07","Monrovia", "LR_08","Montserrado", "LR_09","Nimba", "LR_10","Sino", "LS_10","Berea", "LS_11","Butha-Buthe", "LS_12","Leribe", "LS_13","Mafeteng", "LS_14","Maseru", "LS_15","Mohales Hoek", "LS_16","Mokhotlong", "LS_17","Qachas Nek", "LS_18","Quthing", "LS_19","Thaba-Tseka", "LT_56","Alytaus Apskritis", "LT_57","Kauno Apskritis", "LT_58","Klaipedos Apskritis", "LT_59","Marijampoles Apskritis", "LT_60","Panevezio Apskritis", "LT_61","Siauliu Apskritis", "LT_62","Taurages Apskritis", "LT_63","Telsiu Apskritis", "LT_64","Utenos Apskritis", "LT_65","Vilniaus Apskritis", "LU_01","Diekirch", "LU_02","Grevenmacher", "LU_03","Luxembourg", "LV_01","Aizkraukles", "LV_02","Aluksnes", "LV_03","Balvu", "LV_04","Bauskas", "LV_05","Césu", "LV_06","Daugavpils", "LV_07","Daugavpils", "LV_08","Dobeles", "LV_09","Gulbenes", "LV_10","Jékabpils", "LV_11","Jelgava", "LV_12","Jelgavas", "LV_13","Jurmala", "LV_14","Kráslavas", "LV_15","Kuldigas", "LV_16","Liepája", "LV_17","Liepájas", "LV_18","Limbazu", "LV_19","Ludzas", "LV_20","Madonas", "LV_21","Ogres", "LV_22","Preilu", "LV_23","Rézekne", "LV_24","Rézeknes", "LV_25","Riga", "LV_26","Rigas", "LV_27","Saldus", "LV_28","Talsu", "LV_29","Tukuma", "LV_30","Valkas", "LV_31","Valmieras", "LV_32","Ventspils", "LV_33","Ventspils", "LY_03","Al", "LY_05","Al Jufrah", "LY_08","Al Kufrah", "LY_13","Ash Shati'", "LY_30","Murzuq", "LY_34","Sabha", "LY_41","Tarhunah", "LY_42","Tubruq", "LY_45","Zlitan", "LY_47","Ajdabiya", "LY_48","Al Fatih", "LY_49","Al Jabal al Akhdar", "LY_50","Al Khums", "LY_51","An Nuqat al Khams", "LY_52","Awbari", "LY_53","Az Zawiyah", "LY_54","Banghazi", "LY_55","Darnah", "LY_56","Ghadamis", "LY_57","Gharyan", "LY_58","Misratah", "LY_59","Sawfajjin", "LY_60","Surt", "LY_61","Tarabulus", "LY_62","Yafran", "MA_01","Agadir", "MA_02","Al Hoceima", "MA_03","Azilal", "MA_04","Ben Slimane", "MA_05","Beni Mellal", "MA_06","Boulemane", "MA_07","Casablanca", "MA_08","Chaouen", "MA_09","El Jadida", "MA_10","El Kelaa des Srarhna", "MA_11","Er Rachidia", "MA_12","Essaouira", "MA_13","Fes", "MA_14","Figuig", "MA_15","Kenitra", "MA_16","Khemisset", "MA_17","Khenifra", "MA_18","Khouribga", "MA_19","Marrakech", "MA_20","Meknes", "MA_21","Nador", "MA_22","Ouarzazate", "MA_23","Oujda", "MA_24","Rabat-Sale", "MA_25","Safi", "MA_26","Settat", "MA_27","Tanger", "MA_29","Tata", "MA_30","Taza", "MA_32","Tiznit", "MA_33","Guelmim", "MA_34","Ifrane", "MA_35","Laayoune", "MA_36","Tan-Tan", "MA_37","Taounate", "MA_38","Sidi Kacem", "MA_39","Taroudannt", "MA_40","Tetouan", "MA_41","Larache", "MC_01","La Condamine", "MC_02","Monaco", "MC_03","Monte-Carlo", "MD_46","Balti", "MD_47","Cahul", "MD_48","Chisinau", "MD_49","Stinga Nistrului", "MD_50","Edinet", "MD_51","Gagauzia", "MD_52","Lapusna", "MD_53","Orhei", "MD_54","Soroca", "MD_55","Tighina", "MD_56","Ungheni", "MG_01","Antsiranana", "MG_02","Fianarantsoa", "MG_03","Mahajanga", "MG_04","Toamasina", "MG_05","Antananarivo", "MG_06","Toliara", "MK_01","Aracinovo", "MK_02","Bac", "MK_03","Belcista", "MK_04","Berovo", "MK_05","Bistrica", "MK_06","Bitola", "MK_07","Blatec", "MK_08","Bogdanci", "MK_09","Bogomila", "MK_10","Bogovinje", "MK_11","Bosilovo", "MK_12","Brvenica", "MK_13","Cair", "MK_14","Capari", "MK_15","Caska", "MK_16","Cegrane", "MK_17","Centar", "MK_18","Centar Zupa", "MK_19","Cesinovo", "MK_20","Cucer-Sandevo", "MK_21","Debar", "MK_22","Delcevo", "MK_23","Delogozdi", "MK_24","Demir Hisar", "MK_25","Demir Kapija", "MK_26","Dobrusevo", "MK_27","Dolna Banjica", "MK_28","Dolneni", "MK_29","Dorce Petrov", "MK_30","Drugovo", "MK_31","Dzepciste", "MK_32","Gazi Baba", "MK_33","Gevgelija", "MK_34","Gostivar", "MK_35","Gradsko", "MK_36","Ilinden", "MK_37","Izvor", "MK_38","Jegunovce", "MK_39","Kamenjane", "MK_40","Karbinci", "MK_41","Karpos", "MK_42","Kavadarci", "MK_43","Kicevo", "MK_44","Kisela Voda", "MK_45","Klecevce", "MK_46","Kocani", "MK_47","Konce", "MK_48","Kondovo", "MK_49","Konopiste", "MK_50","Kosel", "MK_51","Kratovo", "MK_52","Kriva Palanka", "MK_53","Krivogastani", "MK_54","Krusevo", "MK_55","Kuklis", "MK_56","Kukurecani", "MK_57","Kumanovo", "MK_58","Labunista", "MK_59","Lipkovo", "MK_60","Lozovo", "MK_61","Lukovo", "MK_62","Makedonska Kamenica", "MK_63","Makedonski Brod", "MK_64","Mavrovi Anovi", "MK_65","Meseista", "MK_66","Miravci", "MK_67","Mogila", "MK_68","Murtino", "MK_69","Negotino", "MK_70","Negotino-Polosko", "MK_71","Novaci", "MK_72","Novo Selo", "MK_73","Oblesevo", "MK_74","Ohrid", "MK_75","Orasac", "MK_76","Orizari", "MK_77","Oslomej", "MK_78","Pehcevo", "MK_79","Petrovec", "MK_80","Plasnica", "MK_81","Podares", "MK_82","Prilep", "MK_83","Probistip", "MK_84","Radovis", "MK_85","Rankovce", "MK_86","Resen", "MK_87","Rosoman", "MK_88","Rostusa", "MK_89","Samokov", "MK_90","Saraj", "MK_91","Sipkovica", "MK_92","Sopiste", "MK_93","Sopotnica", "MK_94","Srbinovo", "MK_95","Staravina", "MK_96","Star Dojran", "MK_97","Staro Nagoricane", "MK_98","Stip", "MK_99","Struga", "MK_A1","Strumica", "MK_A2","Studenicani", "MK_A3","Suto Orizari", "MK_A4","Sveti Nikole", "MK_A5","Tearce", "MK_A6","Tetovo", "MK_A7","Topolcani", "MK_A8","Valandovo", "MK_A9","Vasilevo", "MK_B1","Veles", "MK_B2","Velesta", "MK_B3","Vevcani", "MK_B4","Vinica", "MK_B5","Vitoliste", "MK_B6","Vranestica", "MK_B7","Vrapciste", "MK_B8","Vratnica", "MK_B9","Vrutok", "MK_C1","Zajas", "MK_C2","Zelenikovo", "MK_C3","Zelino", "MK_C4","Zitose", "MK_C5","Zletovo", "MK_C6","Zrnovci", "ML_01","Bamako", "ML_03","Kayes", "ML_04","Mopti", "ML_05","Segou", "ML_06","Sikasso", "ML_07","Koulikoro", "ML_08","Tombouctou", "ML_09","Gao", "ML_10","Kidal", "MM_01","Rakhine State", "MM_02","Chin State", "MM_03","Irrawaddy", "MM_04","Kachin State", "MM_05","Karan State", "MM_06","Kayah State", "MM_07","Magwe", "MM_08","Mandalay", "MM_09","Pegu", "MM_10","Sagaing", "MM_11","Shan State", "MM_12","Tenasserim", "MM_13","Mon State", "MM_14","Rangoon", "MN_01","Arhangay", "MN_02","Bayanhongor", "MN_03","Bayan-Olgiy", "MN_05","Darhan", "MN_06","Dornod", "MN_07","Dornogovi", "MN_08","Dundgovi", "MN_09","Dzavhan", "MN_10","Govi-Altay", "MN_11","Hentiy", "MN_12","Hovd", "MN_13","Hovsgol", "MN_14","Omnogovi", "MN_15","Ovorhangay", "MN_16","Selenge", "MN_17","Suhbaatar", "MN_18","Tov", "MN_19","Uvs", "MN_20","Ulaanbaatar", "MN_21","Bulgan", "MN_22","Erdenet", "MN_23","Darhan Uul", "MN_24","Govi-Sumber", "MN_25","Orhon", "MO_01","Ilhas", "MO_02","Macau", "MR_01","Hodh Ech Chargui", "MR_02","Hodh El Gharbi", "MR_03","Assaba", "MR_04","Gorgol", "MR_05","Brakna", "MR_06","Trarza", "MR_07","Adrar", "MR_08","Dakhlet Nouadhibou", "MR_09","Tagant", "MR_10","Guidimaka", "MR_11","Tiris Zemmour", "MR_12","Inchiri", "MS_01","Saint Anthony", "MS_02","Saint Georges", "MS_03","Saint Peter", "MU_12","Black River", "MU_13","Flacq", "MU_14","Grand Port", "MU_15","Moka", "MU_16","Pamplemousses", "MU_17","Plaines Wilhems", "MU_18","Port Louis", "MU_19","Riviere du Rempart", "MU_20","Savanne", "MU_21","Agalega Islands", "MU_22","Cargados Carajos", "MU_23","Rodrigues", "MV_01","Seenu", "MV_02","Aliff", "MV_03","Laviyani", "MV_04","Waavu", "MV_05","Laamu", "MV_07","Haa Aliff", "MV_08","Thaa", "MV_12","Meemu", "MV_13","Raa", "MV_14","Faafu", "MV_17","Daalu", "MV_20","Baa", "MV_23","Haa Daalu", "MV_24","Shaviyani", "MV_25","Noonu", "MV_26","Kaafu", "MV_27","Gaafu Aliff", "MV_28","Gaafu Daalu", "MV_29","Naviyani", "MW_02","Chikwawa", "MW_03","Chiradzulu", "MW_04","Chitipa", "MW_05","Thyolo", "MW_06","Dedza", "MW_07","Dowa", "MW_08","Karonga", "MW_09","Kasungu", "MW_11","Lilongwe", "MW_12","Mangochi", "MW_13","Mchinji", "MW_15","Mzimba", "MW_16","Ntcheu", "MW_17","Nkhata Bay", "MW_18","Nkhotakota", "MW_19","Nsanje", "MW_20","Ntchisi", "MW_21","Rumphi", "MW_22","Salima", "MW_23","Zomba", "MW_24","Blantyre", "MW_25","Mwanza", "MW_26","Balaka", "MW_27","Likoma", "MW_28","Machinga", "MW_29","Mulanje", "MW_30","Phalombe", "MX_01","Aguascalientes", "MX_02","Baja California", "MX_03","Baja California Sur", "MX_04","Campeche", "MX_05","Chiapas", "MX_06","Chihuahua", "MX_07","Coahuila de Zaragoza", "MX_08","Colima", "MX_09","Distrito Federal", "MX_10","Durango", "MX_11","Guanajuato", "MX_12","Guerrero", "MX_13","Hidalgo", "MX_14","Jalisco", "MX_15","Mexico", "MX_16","Michoacan de Ocampo", "MX_17","Morelos", "MX_18","Nayarit", "MX_19","Nuevo Leon", "MX_20","Oaxaca", "MX_21","Puebla", "MX_22","Queretaro de Arteaga", "MX_23","Quintana Roo", "MX_24","San Luis Potosi", "MX_25","Sinaloa", "MX_26","Sonora", "MX_27","Tabasco", "MX_28","Tamaulipas", "MX_29","Tlaxcala", "MX_30","Veracruz-Llave", "MX_31","Yucatan", "MX_32","Zacatecas", "MY_01","Johor", "MY_02","Kedah", "MY_03","Kelantan", "MY_04","Melaka", "MY_05","Negeri Sembilan", "MY_06","Pahang", "MY_07","Perak", "MY_08","Perlis", "MY_09","Pulau Pinang", "MY_11","Sarawak", "MY_12","Selangor", "MY_13","Terengganu", "MY_14","Wilayah Persekutuan", "MY_15","Labuan", "MY_16","Sabah", "MZ_01","Cabo Delgado", "MZ_02","Gaza", "MZ_03","Inhambane", "MZ_04","Maputo", "MZ_05","Sofala", "MZ_06","Nampula", "MZ_07","Niassa", "MZ_08","Tete", "MZ_09","Zambezia", "MZ_10","Manica", "NA_01","Bethanien", "NA_02","Caprivi Oos", "NA_03","Boesmanland", "NA_04","Gobabis", "NA_05","Grootfontein", "NA_06","Kaokoland", "NA_07","Karibib", "NA_08","Keetmanshoop", "NA_09","Luderitz", "NA_10","Maltahohe", "NA_11","Okahandja", "NA_12","Omaruru", "NA_13","Otjiwarongo", "NA_14","Outjo", "NA_15","Owambo", "NA_16","Rehoboth", "NA_17","Swakopmund", "NA_18","Tsumeb", "NA_20","Karasburg", "NA_21","Windhoek", "NA_22","Damaraland", "NA_23","Hereroland Oos", "NA_24","Hereroland Wes", "NA_25","Kavango", "NA_26","Mariental", "NA_27","Namaland", "NE_01","Agadez", "NE_02","Diffa", "NE_03","Dosso", "NE_04","Maradi", "NE_05","Niamey", "NE_06","Tahoua", "NE_07","Zinder", "NG_05","Lagos", "NG_11","Abuja Capital Territory", "NG_16","Ogun", "NG_21","Akwa Ibom", "NG_22","Cross River", "NG_23","Kaduna", "NG_24","Katsina", "NG_25","Anambra", "NG_26","Benue", "NG_27","Borno", "NG_28","Imo", "NG_29","Kano", "NG_30","Kwara", "NG_31","Niger", "NG_32","Oyo", "NG_35","Adamawa", "NG_36","Delta", "NG_37","Edo", "NG_39","Jigawa", "NG_40","Kebbi", "NG_41","Kogi", "NG_42","Osun", "NG_43","Taraba", "NG_44","Yobe", "NG_45","Abia", "NG_46","Bauchi", "NG_47","Enugu", "NG_48","Ondo", "NG_49","Plateau", "NG_50","Rivers", "NG_51","Sokoto", "NG_52","Bayelsa", "NG_53","Ebonyi", "NG_54","Ekiti", "NG_55","Gombe", "NG_56","Nassarawa", "NG_57","Zamfara", "NI_01","Boaco", "NI_02","Carazo", "NI_03","Chinandega", "NI_04","Chontales", "NI_05","Esteli", "NI_06","Granada", "NI_07","Jinotega", "NI_08","Leon", "NI_09","Madriz", "NI_10","Managua", "NI_11","Masaya", "NI_12","Matagalpa", "NI_13","Nueva Segovia", "NI_14","Rio San Juan", "NI_15","Rivas", "NI_16","Zelaya", "NL_01","Drenthe", "NL_02","Friesland", "NL_03","Gelderland", "NL_04","Groningen", "NL_05","Limburg", "NL_06","Noord-Brabant", "NL_07","Noord-Holland", "NL_08","Overijssel", "NL_09","Utrecht", "NL_10","Zeeland", "NL_11","Zuid-Holland", "NL_12","Dronten", "NL_13","Zuidelijke IJsselmeerpolders", "NL_14","Lelystad", "NL_15","Overijssel", "NL_16","Flevoland", "NO_01","Akershus", "NO_02","Aust-Agder", "NO_04","Buskerud", "NO_05","Finnmark", "NO_06","Hedmark", "NO_07","Hordaland", "NO_08","More og Romsdal", "NO_09","Nordland", "NO_10","Nord-Trondelag", "NO_11","Oppland", "NO_12","Oslo", "NO_13","Ostfold", "NO_14","Rogaland", "NO_15","Sogn og Fjordane", "NO_16","Sor-Trondelag", "NO_17","Telemark", "NO_18","Troms", "NO_19","Vest-Agder", "NO_20","Vestfold", "NP_01","Bagmati", "NP_02","Bheri", "NP_03","Dhawalagiri", "NP_04","Gandaki", "NP_05","Janakpur", "NP_06","Karnali", "NP_07","Kosi", "NP_08","Lumbini", "NP_09","Mahakali", "NP_10","Mechi", "NP_11","Narayani", "NP_12","Rapti", "NP_13","Sagarmatha", "NP_14","Seti", "NR_01","Aiwo", "NR_02","Anabar", "NR_03","Anetan", "NR_04","Anibare", "NR_05","Baiti", "NR_06","Boe", "NR_07","Buada", "NR_08","Denigomodu", "NR_09","Ewa", "NR_10","Ijuw", "NR_11","Meneng", "NR_12","Nibok", "NR_13","Uaboe", "NR_14","Yaren", "NZ_01","Akaroa", "NZ_03","Amuri", "NZ_04","Ashburton", "NZ_07","Bay of Islands", "NZ_08","Bruce", "NZ_09","Buller", "NZ_10","Chatham Islands", "NZ_11","Cheviot", "NZ_12","Clifton", "NZ_13","Clutha", "NZ_14","Cook", "NZ_16","Dannevirke", "NZ_17","Egmont", "NZ_18","Eketahuna", "NZ_19","Ellesmere", "NZ_20","Eltham", "NZ_21","Eyre", "NZ_22","Featherston", "NZ_24","Franklin", "NZ_26","Golden Bay", "NZ_27","Great Barrier Island", "NZ_28","Grey", "NZ_29","Hauraki Plains", "NZ_30","Hawera", "NZ_31","Hawke's Bay", "NZ_32","Heathcote", "NZ_33","Hobson", "NZ_34","Hokianga", "NZ_35","Horowhenua", "NZ_36","Hutt", "NZ_37","Inangahua", "NZ_38","Inglewood", "NZ_39","Kaikoura", "NZ_40","Kairanga", "NZ_41","Kiwitea", "NZ_43","Lake", "NZ_45","Mackenzie", "NZ_46","Malvern", "NZ_47","Manawatu", "NZ_48","Mangonui", "NZ_49","Maniototo", "NZ_50","Marlborough", "NZ_51","Masterton", "NZ_52","Matamata", "NZ_53","Mount Herbert", "NZ_54","Ohinemuri", "NZ_55","Opotiki", "NZ_56","Oroua", "NZ_57","Otamatea", "NZ_58","Otorohanga", "NZ_59","Oxford", "NZ_60","Pahiatua", "NZ_61","Paparua", "NZ_63","Patea", "NZ_65","Piako", "NZ_66","Pohangina", "NZ_67","Raglan", "NZ_68","Rangiora", "NZ_69","Rangitikei", "NZ_70","Rodney", "NZ_71","Rotorua", "NZ_72","Southland", "NZ_73","Stewart Island", "NZ_74","Stratford", "NZ_76","Taranaki", "NZ_77","Taumarunui", "NZ_78","Taupo", "NZ_79","Tauranga", "NZ_81","Tuapeka", "NZ_82","Vincent", "NZ_83","Waiapu", "NZ_84","Waihemo", "NZ_85","Waikato", "NZ_86","Waikohu", "NZ_88","Waimairi", "NZ_89","Waimarino", "NZ_90","Waimate", "NZ_91","Waimate West", "NZ_92","Waimea", "NZ_93","Waipa", "NZ_95","Waipawa", "NZ_96","Waipukurau", "NZ_97","Wairarapa South", "NZ_98","Wairewa", "NZ_99","Wairoa", "NZ_A1","Whangarei", "NZ_A2","Whangaroa", "NZ_A3","Woodville", "NZ_A4","Waitaki", "NZ_A6","Waitomo", "NZ_A8","Waitotara", "NZ_B2","Wanganui", "NZ_B3","Westland", "NZ_B4","Whakatane", "NZ_D4","Hurunui", "NZ_D5","Silverpeaks", "NZ_D6","Strathallan", "NZ_D8","Waiheke", "NZ_D9","Hikurangi", "NZ_E1","Manaia", "NZ_E2","Runanga", "NZ_E3","Saint Kilda", "NZ_E4","Thames-Coromandel", "NZ_E5","Waverley", "NZ_E6","Wallace", "OM_01","Ad Dakhiliyah", "OM_02","Al Batinah", "OM_03","Al Wusta", "OM_04","Ash Sharqiyah", "OM_05","Az Zahirah", "OM_06","Masqat", "OM_07","Musandam", "OM_08","Zufar", "PA_01","Bocas del Toro", "PA_02","Chiriqui", "PA_03","Cocle", "PA_04","Colon", "PA_05","Darien", "PA_06","Herrera", "PA_07","Los Santos", "PA_08","Panama", "PA_09","San Blas", "PA_10","Veraguas", "PE_01","Amazonas", "PE_02","Ancash", "PE_03","Apurimac", "PE_04","Arequipa", "PE_05","Ayacucho", "PE_06","Cajamarca", "PE_07","Callao", "PE_08","Cusco", "PE_09","Huancavelica", "PE_10","Huanuco", "PE_11","Ica", "PE_12","Junin", "PE_13","La Libertad", "PE_14","Lambayeque", "PE_15","Lima", "PE_16","Loreto", "PE_17","Madre de Dios", "PE_18","Moquegua", "PE_19","Pasco", "PE_20","Piura", "PE_21","Puno", "PE_22","San Martin", "PE_23","Tacna", "PE_24","Tumbes", "PE_25","Ucayali", "PG_01","Central", "PG_02","Gulf", "PG_03","Milne Bay", "PG_04","Northern", "PG_05","Southern Highlands", "PG_06","Western", "PG_07","North Solomons", "PG_08","Chimbu", "PG_09","Eastern Highlands", "PG_10","East New Britain", "PG_11","East Sepik", "PG_12","Madang", "PG_13","Manus", "PG_14","Morobe", "PG_15","New Ireland", "PG_16","Western Highlands", "PG_17","West New Britain", "PG_18","Sandaun", "PG_19","Enga", "PG_20","National Capital", "PH_01","Abra", "PH_02","Agusan del Norte", "PH_03","Agusan del Sur", "PH_04","Aklan", "PH_05","Albay", "PH_06","Antique", "PH_07","Bataan", "PH_08","Batanes", "PH_09","Batangas", "PH_10","Benguet", "PH_11","Bohol", "PH_12","Bukidnon", "PH_13","Bulacan", "PH_14","Cagayan", "PH_15","Camarines Norte", "PH_16","Camarines Sur", "PH_17","Camiguin", "PH_18","Capiz", "PH_19","Catanduanes", "PH_20","Cavite", "PH_21","Cebu", "PH_22","Basilan", "PH_23","Eastern Samar", "PH_24","Davao", "PH_25","Davao del Sur", "PH_26","Davao Oriental", "PH_27","Ifugao", "PH_28","Ilocos Norte", "PH_29","Ilocos Sur", "PH_30","Iloilo", "PH_31","Isabela", "PH_32","Kalinga-Apayao", "PH_33","Laguna", "PH_34","Lanao del Norte", "PH_35","Lanao del Sur", "PH_36","La Union", "PH_37","Leyte", "PH_38","Marinduque", "PH_39","Masbate", "PH_40","Mindoro Occidental", "PH_41","Mindoro Oriental", "PH_42","Misamis Occidental", "PH_43","Misamis Oriental", "PH_44","Mountain", "PH_46","Negros Oriental", "PH_47","Nueva Ecija", "PH_48","Nueva Vizcaya", "PH_49","Palawan", "PH_50","Pampanga", "PH_51","Pangasinan", "PH_53","Rizal", "PH_54","Romblon", "PH_55","Samar", "PH_56","Maguindanao", "PH_57","North Cotabato", "PH_58","Sorsogon", "PH_59","Southern Leyte", "PH_60","Sulu", "PH_61","Surigao del Norte", "PH_62","Surigao del Sur", "PH_63","Tarlac", "PH_64","Zambales", "PH_65","Zamboanga del Norte", "PH_66","Zamboanga del Sur", "PH_67","Northern Samar", "PH_68","Quirino", "PH_69","Siquijor", "PH_70","South Cotabato", "PH_71","Sultan Kudarat", "PH_72","Tawitawi", "PH_A1","Angeles", "PH_A2","Bacolod", "PH_A3","Bago", "PH_A4","Baguio", "PH_A5","Bais", "PH_A6","Basilan City", "PH_A7","Batangas City", "PH_A8","Butuan", "PH_A9","Cabanatuan", "PH_B1","Cadiz", "PH_B2","Cagayan de Oro", "PH_B3","Calbayog", "PH_B4","Caloocan", "PH_B5","Canlaon", "PH_B6","Cavite City", "PH_B7","Cebu City", "PH_B8","Cotabato", "PH_B9","Dagupan", "PH_C1","Danao", "PH_C2","Dapitan", "PH_C3","Davao City", "PH_C4","Dipolog", "PH_C5","Dumaguete", "PH_C6","General Santos", "PH_C7","Gingoog", "PH_C8","Iligan", "PH_C9","Iloilo City", "PH_D1","Iriga", "PH_D2","La Carlota", "PH_D3","Laoag", "PH_D4","Lapu-Lapu", "PH_D5","Legaspi", "PH_D6","Lipa", "PH_D7","Lucena", "PH_D8","Mandaue", "PH_D9","Manila", "PH_E1","Marawi", "PH_E2","Naga", "PH_E3","Olongapo", "PH_E4","Ormoc", "PH_E5","Oroquieta", "PH_E6","Ozamis", "PH_E7","Pagadian", "PH_E8","Palayan", "PH_E9","Pasay", "PH_F1","Puerto Princesa", "PH_F2","Quezon City", "PH_F3","Roxas", "PH_F4","San Carlos", "PH_F5","San Carlos", "PH_F6","San Jose", "PH_F7","San Pablo", "PH_F8","Silay", "PH_F9","Surigao", "PH_G1","Tacloban", "PH_G2","Tagaytay", "PH_G3","Tagbilaran", "PH_G4","Tangub", "PH_G5","Toledo", "PH_G6","Trece Martires", "PH_G7","Zamboanga", "PH_G8","Aurora", "PH_H2","Quezon", "PH_H3","Negros Occidental", "PK_01","Federally Administered Tribal Areas", "PK_02","Balochistan", "PK_03","North-West Frontier", "PK_04","Punjab", "PK_05","Sindh", "PK_06","Azad Kashmir", "PK_07","Northern Areas", "PK_08","Islamabad", "PL_23","Biala Podlaska", "PL_24","Bialystok", "PL_25","Bielsko", "PL_26","Bydgoszcz", "PL_27","Chelm", "PL_28","Ciechanow", "PL_29","Czestochowa", "PL_30","Elblag", "PL_31","Gdansk", "PL_32","Gorzow", "PL_33","Jelenia Gora", "PL_34","Kalisz", "PL_35","Katowice", "PL_36","Kielce", "PL_37","Konin", "PL_38","Koszalin", "PL_39","Krakow", "PL_40","Krosno", "PL_41","Legnica", "PL_42","Leszno", "PL_43","Lodz", "PL_44","Lomza", "PL_45","Lublin", "PL_46","Nowy Sacz", "PL_47","Olsztyn", "PL_48","Opole", "PL_49","Ostroleka", "PL_50","Pila", "PL_51","Piotrkow", "PL_52","Plock", "PL_53","Poznan", "PL_54","Przemysl", "PL_55","Radom", "PL_56","Rzeszow", "PL_57","Siedlce", "PL_58","Sieradz", "PL_59","Skierniewice", "PL_60","Slupsk", "PL_61","Suwalki", "PL_62","Szczecin", "PL_63","Tarnobrzeg", "PL_64","Tarnow", "PL_65","Torun", "PL_66","Walbrzych", "PL_67","Warszawa", "PL_68","Wloclawek", "PL_69","Wroclaw", "PL_70","Zamosc", "PL_71","Zielona Gora", "PL_72","Dolnoslaskie", "PL_73","Kujawsko-Pomorskie", "PL_74","Lodzkie", "PL_75","Lubelskie", "PL_76","Lubuskie", "PL_77","Malopolskie", "PL_78","Mazowieckie", "PL_79","Opolskie", "PL_80","Podkarpackie", "PL_81","Podlaskie", "PL_82","Pomorskie", "PL_83","Slaskie", "PL_84","Swietokrzyskie", "PL_85","Warminsko-Mazurskie", "PL_86","Wielkopolskie", "PL_87","Zachodniopomorskie", "PT_02","Aveiro", "PT_03","Beja", "PT_04","Braga", "PT_05","Braganca", "PT_06","Castelo Branco", "PT_07","Coimbra", "PT_08","Evora", "PT_09","Faro", "PT_10","Madeira", "PT_11","Guarda", "PT_13","Leiria", "PT_14","Lisboa", "PT_16","Portalegre", "PT_17","Porto", "PT_18","Santarem", "PT_19","Setubal", "PT_20","Viana do Castelo", "PT_21","Vila Real", "PT_22","Viseu", "PT_23","Azores", "PY_01","Alto Parana", "PY_02","Amambay", "PY_03","Boqueron", "PY_04","Caaguazu", "PY_05","Caazapa", "PY_06","Central", "PY_07","Concepcion", "PY_08","Cordillera", "PY_10","Guaira", "PY_11","Itapua", "PY_12","Misiones", "PY_13","Neembucu", "PY_15","Paraguari", "PY_16","Presidente Hayes", "PY_17","San Pedro", "PY_18","Alto Paraguay", "PY_19","Canindeyu", "PY_20","Chaco", "PY_21","Nueva Asuncion", "QA_01","Ad Dawhah", "QA_02","Al Ghuwariyah", "QA_03","Al Jumaliyah", "QA_04","Al Khawr", "QA_06","Ar Rayyan", "QA_08","Madinat ach Shamal", "QA_09","Umm Salal", "QA_10","Al Wakrah", "QA_11","Jariyan al Batnah", "QA_12","Umm Sa'id", "RO_01","Alba", "RO_02","Arad", "RO_03","Arges", "RO_04","Bacau", "RO_05","Bihor", "RO_06","Bistrita-Nasaud", "RO_07","Botosani", "RO_08","Braila", "RO_09","Brasov", "RO_10","Bucuresti", "RO_11","Buzau", "RO_12","Caras-Severin", "RO_13","Cluj", "RO_14","Constanta", "RO_15","Covasna", "RO_16","Dambovita", "RO_17","Dolj", "RO_18","Galati", "RO_19","Gorj", "RO_20","Harghita", "RO_21","Hunedoara", "RO_22","Ialomita", "RO_23","Iasi", "RO_25","Maramures", "RO_26","Mehedinti", "RO_27","Mures", "RO_28","Neamt", "RO_29","Olt", "RO_30","Prahova", "RO_31","Salaj", "RO_32","Satu Mare", "RO_33","Sibiu", "RO_34","Suceava", "RO_35","Teleorman", "RO_36","Timis", "RO_37","Tulcea", "RO_38","Vaslui", "RO_39","Valcea", "RO_40","Vrancea", "RO_41","Calarasi", "RO_42","Giurgiu", "RO_43","Ilfov", "RU_01","Adygey", "RU_02","Aga Buryat", "RU_03","Gorno-Altay", "RU_04","Altay", "RU_05","Amur", "RU_06","Arkhangel'sk", "RU_07","Astrakhan'", "RU_08","Bashkortostan", "RU_09","Belgorod", "RU_10","Bryansk", "RU_11","Buryat", "RU_12","Chechnya", "RU_13","Chelyabinsk", "RU_14","Chita", "RU_15","Chukot", "RU_16","Chuvash", "RU_17","Dagestan", "RU_18","Evenk", "RU_19","Ingush", "RU_20","Irkutsk", "RU_21","Ivanovo", "RU_22","Kabardin-Balkar", "RU_23","Kaliningrad", "RU_24","Kalmyk", "RU_25","Kaluga", "RU_26","Kamchatka", "RU_27","Karachay-Cherkess", "RU_28","Karelia", "RU_29","Kemerovo", "RU_30","Khabarovsk", "RU_31","Khakass", "RU_32","Khanty-Mansiy", "RU_33","Kirov", "RU_34","Komi", "RU_35","Komi-Permyak", "RU_36","Koryak", "RU_37","Kostroma", "RU_38","Krasnodar", "RU_39","Krasnoyarsk", "RU_40","Kurgan", "RU_41","Kursk", "RU_42","Leningrad", "RU_43","Lipetsk", "RU_44","Magadan", "RU_45","Mariy-El", "RU_46","Mordovia", "RU_47","Moskva", "RU_48","Moscow City", "RU_49","Murmansk", "RU_50","Nenets", "RU_51","Nizhegorod", "RU_52","Novgorod", "RU_53","Novosibirsk", "RU_54","Omsk", "RU_55","Orenburg", "RU_56","Orel", "RU_57","Penza", "RU_58","Perm'", "RU_59","Primor'ye", "RU_60","Pskov", "RU_61","Rostov", "RU_62","Ryazan'", "RU_63","Sakha", "RU_64","Sakhalin", "RU_65","Samara", "RU_66","Saint Petersburg City", "RU_67","Saratov", "RU_68","North Ossetia", "RU_69","Smolensk", "RU_70","Stavropol'", "RU_71","Sverdlovsk", "RU_72","Tambov", "RU_73","Tatarstan", "RU_74","Taymyr", "RU_75","Tomsk", "RU_76","Tula", "RU_77","Tver'", "RU_78","Tyumen'", "RU_79","Tuva", "RU_80","Udmurt", "RU_81","Ul'yanovsk", "RU_82","Ust-Orda Buryat", "RU_83","Vladimir", "RU_84","Volgograd", "RU_85","Vologda", "RU_86","Voronezh", "RU_87","Yamal-Nenets", "RU_88","Yaroslavl'", "RU_89","Yevrey", "RW_01","Butare", "RW_02","Byumba", "RW_03","Cyangugu", "RW_04","Gikongoro", "RW_05","Gisenyi", "RW_06","Gitarama", "RW_07","Kibungo", "RW_08","Kibuye", "RW_09","Kigali", "RW_10","Ruhengeri", "SA_02","Al Bahah", "SA_03","Al Jawf", "SA_05","Al Madinah", "SA_06","Ash Sharqiyah", "SA_08","Al Qasim", "SA_09","Al Qurayyat", "SA_10","Ar Riyad", "SA_13","Ha'il", "SA_14","Makkah", "SA_15","Al Hudud ash Shamaliyah", "SA_16","Najran", "SA_17","Jizan", "SA_19","Tabuk", "SB_03","Malaita", "SB_04","Western", "SB_05","Central", "SB_06","Guadalcanal", "SB_07","Isabel", "SB_08","Makira", "SB_09","Temotu", "SC_01","Anse aux Pins", "SC_02","Anse Boileau", "SC_03","Anse Etoile", "SC_04","Anse Louis", "SC_05","Anse Royale", "SC_06","Baie Lazare", "SC_07","Baie Sainte Anne", "SC_08","Beau Vallon", "SC_09","Bel Air", "SC_10","Bel Ombre", "SC_11","Cascade", "SC_12","Glacis", "SC_13","Grand' Anse", "SC_14","Grand' Anse", "SC_15","La Digue", "SC_16","La Riviere Anglaise", "SC_17","Mont Buxton", "SC_18","Mont Fleuri", "SC_19","Plaisance", "SC_20","Pointe La Rue", "SC_21","Port Glaud", "SC_22","Saint Louis", "SC_23","Takamaka", "SD_27","Al Wusta", "SD_28","Al Istiwa'iyah", "SD_29","Al Khartum", "SD_30","Ash Shamaliyah", "SD_31","Ash Sharqiyah", "SD_32","Bahr al Ghazal", "SD_33","Darfur", "SD_34","Kurdufan", "SE_01","Alvsborgs Lan", "SE_02","Blekinge Lan", "SE_03","Gavleborgs Lan", "SE_04","Goteborgs och Bohus Lan", "SE_05","Gotlands Lan", "SE_06","Hallands Lan", "SE_07","Jamtlands Lan", "SE_08","Jonkopings Lan", "SE_09","Kalmar Lan", "SE_10","Dalarnas Lan", "SE_11","Kristianstads Lan", "SE_12","Kronobergs Lan", "SE_13","Malmohus Lan", "SE_14","Norrbottens Lan", "SE_15","Orebro Lan", "SE_16","Ostergotlands Lan", "SE_17","Skaraborgs Lan", "SE_18","Sodermanlands Lan", "SE_21","Uppsala Lan", "SE_22","Varmlands Lan", "SE_23","Vasterbottens Lan", "SE_24","Vasternorrlands Lan", "SE_25","Vastmanlands Lan", "SE_26","Stockholms Lan", "SE_27","Skane Lan", "SE_28","Vastra Gotaland", "SH_01","Ascension", "SH_02","Saint Helena", "SH_03","Tristan da Cunha", "SI_01","Ajdovscina", "SI_02","Beltinci", "SI_03","Bled", "SI_04","Bohinj", "SI_05","Borovnica", "SI_06","Bovec", "SI_07","Brda", "SI_08","Brezice", "SI_09","Brezovica", "SI_11","Celje", "SI_12","Cerklje na Gorenjskem", "SI_13","Cerknica", "SI_14","Cerkno", "SI_15","Crensovci", "SI_16","Crna na Koroskem", "SI_17","Crnomelj", "SI_19","Divaca", "SI_20","Dobrepolje", "SI_22","Dol pri Ljubljani", "SI_24","Dornava", "SI_25","Dravograd", "SI_26","Duplek", "SI_27","Gorenja Vas-Poljane", "SI_28","Gorisnica", "SI_29","Gornja Radgona", "SI_30","Gornji Grad", "SI_31","Gornji Petrovci", "SI_32","Grosuplje", "SI_34","Hrastnik", "SI_35","Hrpelje-Kozina", "SI_36","Idrija", "SI_37","Ig", "SI_38","Ilirska Bistrica", "SI_39","Ivancna Gorica", "SI_40","Izola-Isola", "SI_42","Jursinci", "SI_44","Kanal", "SI_45","Kidricevo", "SI_46","Kobarid", "SI_47","Kobilje", "SI_49","Komen", "SI_50","Koper-Capodistria", "SI_51","Kozje", "SI_52","Kranj", "SI_53","Kranjska Gora", "SI_54","Krsko", "SI_55","Kungota", "SI_57","Lasko", "SI_61","Ljubljana", "SI_62","Ljubno", "SI_64","Logatec", "SI_66","Loski Potok", "SI_68","Lukovica", "SI_71","Medvode", "SI_72","Menges", "SI_73","Metlika", "SI_74","Mezica", "SI_76","Mislinja", "SI_77","Moravce", "SI_78","Moravske Toplice", "SI_79","Mozirje", "SI_80","Murska Sobota", "SI_81","Muta", "SI_82","Naklo", "SI_83","Nazarje", "SI_84","Nova Gorica", "SI_86","Odranci", "SI_87","Ormoz", "SI_88","Osilnica", "SI_89","Pesnica", "SI_91","Pivka", "SI_92","Podcetrtek", "SI_94","Postojna", "SI_97","Puconci", "SI_98","Racam", "SI_99","Radece", "SI_A1","Radenci", "SI_A2","Radlje ob Dravi", "SI_A3","Radovljica", "SI_A6","Rogasovci", "SI_A7","Rogaska Slatina", "SI_A8","Rogatec", "SI_B1","Semic", "SI_B2","Sencur", "SI_B3","Sentilj", "SI_B4","Sentjernej", "SI_B6","Sevnica", "SI_B7","Sezana", "SI_B8","Skocjan", "SI_B9","Skofja Loka", "SI_C1","Skofljica", "SI_C2","Slovenj Gradec", "SI_C4","Slovenske Konjice", "SI_C5","Smarje pri Jelsah", "SI_C6","Smartno ob Paki", "SI_C7","Sostanj", "SI_C8","Starse", "SI_C9","Store", "SI_D1","Sveti Jurij", "SI_D2","Tolmin", "SI_D3","Trbovlje", "SI_D4","Trebnje", "SI_D5","Trzic", "SI_D6","Turnisce", "SI_D7","Velenje", "SI_D8","Velike Lasce", "SI_E1","Vipava", "SI_E2","Vitanje", "SI_E3","Vodice", "SI_E5","Vrhnika", "SI_E6","Vuzenica", "SI_E7","Zagorje ob Savi", "SI_E9","Zavrc", "SI_F1","Zelezniki", "SI_F2","Ziri", "SI_F3","Zrece", "SI_G4","Dobrova-Horjul-Polhov Gradec", "SI_G7","Domzale", "SI_H4","Jesenice", "SI_H6","Kamnik", "SI_H7","Kocevje", "SI_I2","Kuzma", "SI_I3","Lenart", "SI_I5","Litija", "SI_I6","Ljutomer", "SI_I7","Loska Dolina", "SI_I9","Luce", "SI_J1","Majsperk", "SI_J2","Maribor", "SI_J5","Miren-Kostanjevica", "SI_J7","Novo Mesto", "SI_J9","Piran", "SI_K5","Preddvor", "SI_K7","Ptuj", "SI_L1","Ribnica", "SI_L3","Ruse", "SI_L7","Sentjur pri Celju", "SI_L8","Slovenska Bistrica", "SI_N2","Videm", "SI_N3","Vojnik", "SI_N5","Zalec", "SK_01","Banska Bystrica", "SK_02","Bratislava", "SK_03","Kosice", "SK_04","Nitra", "SK_05","Presov", "SK_06","Trencin", "SK_07","Trnava", "SK_08","Zilina", "SL_01","Eastern", "SL_02","Northern", "SL_03","Southern", "SL_04","Western Area", "SM_01","Acquaviva", "SM_02","Chiesanuova", "SM_03","Domagnano", "SM_04","Faetano", "SM_05","Fiorentino", "SM_06","Borgo Maggiore", "SM_07","San Marino", "SM_08","Monte Giardino", "SM_09","Serravalle", "SN_01","Dakar", "SN_03","Diourbel", "SN_04","Saint-Louis", "SN_05","Tambacounda", "SN_07","Thies", "SN_08","Louga", "SN_09","Fatick", "SN_10","Kaolack", "SN_11","Kolda", "SN_12","Ziguinchor", "SO_01","Bakool", "SO_02","Banaadir", "SO_03","Bari", "SO_04","Bay", "SO_05","Galguduud", "SO_06","Gedo", "SO_07","Hiiraan", "SO_08","Jubbada Dhexe", "SO_09","Jubbada Hoose", "SO_10","Mudug", "SO_11","Nugaal", "SO_12","Sanaag", "SO_13","Shabeellaha Dhexe", "SO_14","Shabeellaha Hoose", "SO_15","Togdheer", "SO_16","Woqooyi Galbeed", "SR_10","Brokopondo", "SR_11","Commewijne", "SR_12","Coronie", "SR_13","Marowijne", "SR_14","Nickerie", "SR_15","Para", "SR_16","Paramaribo", "SR_17","Saramacca", "SR_18","Sipaliwini", "SR_19","Wanica", "ST_01","Principe", "ST_02","Sao Tome", "SV_01","Ahuachapan", "SV_02","Cabanas", "SV_03","Chalatenango", "SV_04","Cuscatlan", "SV_05","La Libertad", "SV_06","La Paz", "SV_07","La Union", "SV_08","Morazan", "SV_09","San Miguel", "SV_10","San Salvador", "SV_11","Santa Ana", "SV_12","San Vicente", "SV_13","Sonsonate", "SV_14","Usulutan", "SY_01","Al Hasakah", "SY_02","Al Ladhiqiyah", "SY_03","Al Qunaytirah", "SY_04","Ar Raqqah", "SY_05","As Suwayda'", "SY_06","Dar", "SY_07","Dayr az Zawr", "SY_08","Rif Dimashq", "SY_09","Halab", "SY_10","Hamah", "SY_11","Hims", "SY_12","Idlib", "SY_13","Dimashq", "SY_14","Tartus", "SZ_01","Hhohho", "SZ_02","Lubombo", "SZ_03","Manzini", "SZ_04","Shiselweni", "SZ_05","Praslin", "TD_01","Batha", "TD_02","Biltine", "TD_03","Borkou-Ennedi-Tibesti", "TD_04","Chari-Baguirmi", "TD_05","Guera", "TD_06","Kanem", "TD_07","Lac", "TD_08","Logone Occidental", "TD_09","Logone Oriental", "TD_10","Mayo-Kebbi", "TD_11","Moyen-Chari", "TD_12","Ouaddai", "TD_13","Salamat", "TD_14","Tandjile", "TG_01","Amlame", "TG_02","Aneho", "TG_03","Atakpame", "TG_04","Bafilo", "TG_05","Bassar", "TG_06","Dapaong", "TG_07","Kante", "TG_08","Klouto", "TG_09","Lama-Kara", "TG_10","Lome", "TG_11","Mango", "TG_12","Niamtougou", "TG_13","Notse", "TG_14","Kpagouda", "TG_15","Badou", "TG_16","Sotouboua", "TG_17","Tabligbo", "TG_18","Tsevie", "TG_19","Tchamba", "TG_20","Tchaoudjo", "TG_21","Vogan", "TH_01","Mae Hong Son", "TH_02","Chiang Mai", "TH_03","Chiang Rai", "TH_04","Nan", "TH_05","Lamphun", "TH_06","Lampang", "TH_07","Phrae", "TH_08","Tak", "TH_09","Sukhothai", "TH_10","Uttaradit", "TH_11","Kamphaeng Phet", "TH_12","Phitsanulok", "TH_13","Phichit", "TH_14","Phetchabun", "TH_15","Uthai Thani", "TH_16","Nakhon Sawan", "TH_17","Nong Khai", "TH_18","Loei", "TH_19","Udon Thani", "TH_20","Sakon Nakhon", "TH_21","Nakhon Phanom", "TH_22","Khon Kaen", "TH_23","Kalasin", "TH_24","Maha Sarakham", "TH_25","Roi Et", "TH_26","Chaiyaphum", "TH_27","Nakhon Ratchasima", "TH_28","Buriram", "TH_29","Surin", "TH_30","Sisaket", "TH_31","Narathiwat", "TH_32","Chai Nat", "TH_33","Sing Buri", "TH_34","Lop Buri", "TH_35","Ang Thong", "TH_36","Phra Nakhon Si Ayutthaya", "TH_37","Saraburi", "TH_38","Nonthaburi", "TH_39","Pathum Thani", "TH_40","Krung Thep", "TH_41","Phayao", "TH_42","Samut Prakan", "TH_43","Nakhon Nayok", "TH_44","Chachoengsao", "TH_45","Prachin Buri", "TH_46","Chon Buri", "TH_47","Rayong", "TH_48","Chanthaburi", "TH_49","Trat", "TH_50","Kanchanaburi", "TH_51","Suphan Buri", "TH_52","Ratchaburi", "TH_53","Nakhon Pathom", "TH_54","Samut Songkhram", "TH_55","Samut Sakhon", "TH_56","Phetchaburi", "TH_57","Prachuap Khiri Khan", "TH_58","Chumphon", "TH_59","Ranong", "TH_60","Surat Thani", "TH_61","Phangnga", "TH_62","Phuket", "TH_63","Krabi", "TH_64","Nakhon Si Thammarat", "TH_65","Trang", "TH_66","Phatthalung", "TH_67","Satun", "TH_68","Songkhla", "TH_69","Pattani", "TH_70","Yala", "TH_71","Ubon Ratchathani", "TH_72","Yasothon", "TJ_01","Kuhistoni Badakhshon", "TJ_02","Khatlon", "TJ_03","Sughd", "TM_01","Ahal", "TM_02","Balkan", "TM_03","Dashoguz", "TM_04","Lebap", "TM_05","Mary", "TN_02","Al Qasrayn", "TN_03","Al Qayrawan", "TN_06","Jundubah", "TN_10","Qafsah", "TN_14","Kef", "TN_15","Al Mahdiyah", "TN_16","Al Munastir", "TN_17","Bajah", "TN_18","Banzart", "TN_19","Nabul", "TN_22","Silyanah", "TN_23","Susah", "TN_27","Bin", "TN_28","Madanin", "TN_29","Qabis", "TN_31","Qibili", "TN_32","Safaqis", "TN_33","Sidi Bu Zayd", "TN_34","Tatawin", "TN_35","Tawzar", "TN_36","Tunis", "TN_37","Zaghwan", "TN_38","Ariana", "TN_39","Manouba", "TO_01","Ha", "TO_02","Tongatapu", "TO_03","Vava", "TR_02","Adiyaman", "TR_03","Afyon", "TR_04","Agri", "TR_05","Amasya", "TR_07","Antalya", "TR_08","Artvin", "TR_09","Aydin", "TR_10","Balikesir", "TR_11","Bilecik", "TR_12","Bingol", "TR_13","Bitlis", "TR_14","Bolu", "TR_15","Burdur", "TR_16","Bursa", "TR_17","Canakkale", "TR_19","Corum", "TR_20","Denizli", "TR_21","Diyarbakir", "TR_22","Edirne", "TR_23","Elazig", "TR_24","Erzincan", "TR_25","Erzurum", "TR_26","Eskisehir", "TR_28","Giresun", "TR_31","Hatay", "TR_32","Icel", "TR_33","Isparta", "TR_34","Istanbul", "TR_35","Izmir", "TR_37","Kastamonu", "TR_38","Kayseri", "TR_39","Kirklareli", "TR_40","Kirsehir", "TR_41","Kocaeli", "TR_43","Kutahya", "TR_44","Malatya", "TR_45","Manisa", "TR_46","Kahramanmaras", "TR_48","Mugla", "TR_49","Mus", "TR_50","Nevsehir", "TR_52","Ordu", "TR_53","Rize", "TR_54","Sakarya", "TR_55","Samsun", "TR_57","Sinop", "TR_58","Sivas", "TR_59","Tekirdag", "TR_60","Tokat", "TR_61","Trabzon", "TR_62","Tunceli", "TR_63","Sanliurfa", "TR_64","Usak", "TR_65","Van", "TR_66","Yozgat", "TR_68","Ankara", "TR_69","Gumushane", "TR_70","Hakkari", "TR_71","Konya", "TR_72","Mardin", "TR_73","Nigde", "TR_74","Siirt", "TR_75","Aksaray", "TR_76","Batman", "TR_77","Bayburt", "TR_78","Karaman", "TR_79","Kirikkale", "TR_80","Sirnak", "TR_81","Adana", "TR_82","Cankiri", "TR_83","Gaziantep", "TR_84","Kars", "TR_85","Zonguldak", "TR_86","Ardahan", "TR_87","Bartin", "TR_88","Igdir", "TR_89","Karabuk", "TR_90","Kilis", "TR_91","Osmaniye", "TR_92","Yalova", "TR_93","Duzce", "TT_01","Arima", "TT_02","Caroni", "TT_03","Mayaro", "TT_04","Nariva", "TT_05","Port-of-Spain", "TT_06","Saint Andrew", "TT_07","Saint David", "TT_08","Saint George", "TT_09","Saint Patrick", "TT_10","San Fernando", "TT_11","Tobago", "TT_12","Victoria", "TW_01","Fu-chien", "TW_02","Kao-hsiung", "TW_03","T'ai-pei", "TW_04","T'ai-wan", "TZ_01","Arusha", "TZ_02","Pwani", "TZ_03","Dodoma", "TZ_04","Iringa", "TZ_05","Kigoma", "TZ_06","Kilimanjaro", "TZ_07","Lindi", "TZ_08","Mara", "TZ_09","Mbeya", "TZ_10","Morogoro", "TZ_11","Mtwara", "TZ_12","Mwanza", "TZ_13","Pemba North", "TZ_14","Ruvuma", "TZ_15","Shinyanga", "TZ_16","Singida", "TZ_17","Tabora", "TZ_18","Tanga", "TZ_19","Kagera", "TZ_20","Pemba South", "TZ_21","Zanzibar Central", "TZ_22","Zanzibar North", "TZ_23","Dar es Salaam", "TZ_24","Rukwa", "TZ_25","Zanzibar Urban", "UA_01","Cherkas'ka Oblast'", "UA_02","Chernihivs'ka Oblast'", "UA_03","Chernivets'ka Oblast'", "UA_04","Dnipropetrovs'ka Oblast'", "UA_05","Donets'ka Oblast'", "UA_06","Ivano-Frankivs'ka Oblast'", "UA_07","Kharkivs'ka Oblast'", "UA_08","Khersons'ka Oblast'", "UA_09","Khmel'nyts'ka Oblast'", "UA_10","Kirovohrads'ka Oblast'", "UA_11","Krym", "UA_12","Kyyiv", "UA_13","Kyyivs'ka Oblast'", "UA_14","Luhans'ka Oblast'", "UA_15","L'vivs'ka Oblast'", "UA_16","Mykolayivs'ka Oblast'", "UA_17","Odes'ka Oblast'", "UA_18","Poltavs'ka Oblast'", "UA_19","Rivnens'ka Oblast'", "UA_20","Sevastopol'", "UA_21","Sums'ka Oblast'", "UA_22","Ternopil's'ka Oblast'", "UA_23","Vinnyts'ka Oblast'", "UA_24","Volyns'ka Oblast'", "UA_25","Zakarpats'ka Oblast'", "UA_26","Zaporiz'ka Oblast'", "UA_27","Zhytomyrs'ka Oblast'", "UG_05","Busoga", "UG_08","Karamoja", "UG_12","South Buganda", "UG_18","Central", "UG_20","Eastern", "UG_21","Nile", "UG_22","North Buganda", "UG_23","Northern", "UG_24","Southern", "UG_25","Western", "UG_65","Adjumani", "UG_66","Bugiri", "UG_67","Busia", "UG_69","Katakwi", "UG_73","Nakasongola", "UG_74","Sembabule", "UG_77","Arua", "UG_78","Iganga", "UG_79","Kabarole", "UG_80","Kaberamaido", "UG_81","Kamwenge", "UG_82","Kanungu", "UG_83","Kayunga", "UG_84","Kitgum", "UG_85","Kyenjojo", "UG_86","Mayuge", "UG_87","Mbale", "UG_88","Moroto", "UG_89","Mpigi", "UG_90","Mukono", "UG_91","Nakapiripirit", "UG_92","Pader", "UG_93","Rukungiri", "UG_94","Sironko", "UG_95","Soroti", "UG_96","Wakiso", "UG_97","Yumbe", "US_01","Alabama", "US_02","Alaska", "US_04","Arizona", "US_05","Arkansas", "US_06","California", "US_08","Colorado", "US_09","Connecticut", "US_10","Delaware", "US_11","District of Columbia", "US_12","Florida", "US_13","Georgia", "US_15","Hawaii", "US_16","Idaho", "US_17","Illinois", "US_18","Indiana", "US_19","Iowa", "US_20","Kansas", "US_21","Kentucky", "US_22","Louisiana", "US_23","Maine", "US_24","Maryland", "US_25","Massachusetts", "US_26","Michigan", "US_27","Minnesota", "US_28","Mississippi", "US_29","Missouri", "US_30","Montana", "US_31","Nebraska", "US_32","Nevada", "US_33","New Hampshire", "US_34","New Jersey", "US_35","New Mexico", "US_36","New York", "US_37","North Carolina", "US_38","North Dakota", "US_39","Ohio", "US_40","Oklahoma", "US_41","Oregon", "US_42","Pennyslvania", "US_44","Rhode Island", "US_45","South Carolina", "US_46","South Dakota", "US_47","Tennessee", "US_48","Texas", "US_49","Utah", "US_50","Vermont", "US_51","Virginia", "US_53","Washington", "US_54","West Virginia", "US_55","Wisconsin", "US_56","Wyoming", "UY_01","Artigas", "UY_02","Canelones", "UY_03","Cerro Largo", "UY_04","Colonia", "UY_05","Durazno", "UY_06","Flores", "UY_07","Florida", "UY_08","Lavalleja", "UY_09","Maldonado", "UY_10","Montevideo", "UY_11","Paysandu", "UY_12","Rio Negro", "UY_13","Rivera", "UY_14","Rocha", "UY_15","Salto", "UY_16","San Jose", "UY_17","Soriano", "UY_18","Tacuarembo", "UY_19","Treinta y Tres", "UZ_01","Andijon", "UZ_02","Bukhoro", "UZ_03","Farghona", "UZ_04","Jizzakh", "UZ_05","Khorazm", "UZ_06","Namangan", "UZ_07","Nawoiy", "UZ_08","Qashqadaryo", "UZ_09","Qoraqalpoghiston", "UZ_10","Samarqand", "UZ_11","Sirdaryo", "UZ_12","Surkhondaryo", "UZ_13","Toshkent", "UZ_14","Toshkent", "VC_01","Charlotte", "VC_02","Saint Andrew", "VC_03","Saint David", "VC_04","Saint George", "VC_05","Saint Patrick", "VC_06","Grenadines", "VE_01","Amazonas", "VE_02","Anzoategui", "VE_03","Apure", "VE_04","Aragua", "VE_05","Barinas", "VE_06","Bolivar", "VE_07","Carabobo", "VE_08","Cojedes", "VE_09","Delta Amacuro", "VE_11","Falcon", "VE_12","Guarico", "VE_13","Lara", "VE_14","Merida", "VE_15","Miranda", "VE_16","Monagas", "VE_17","Nueva Esparta", "VE_18","Portuguesa", "VE_19","Sucre", "VE_20","Tachira", "VE_21","Trujillo", "VE_22","Yaracuy", "VE_23","Zulia", "VE_24","Dependencias Federales", "VE_25","Distrito Federal", "VE_26","Vargas", "VN_02","Bac Thai", "VN_03","Ben Tre", "VN_05","Cao Bang", "VN_11","Ha Bac", "VN_12","Hai Hung", "VN_13","Hai Phong", "VN_22","Lai Chau", "VN_23","Lam Dong", "VN_24","Long An", "VN_29","Quang Nam-Da Nang", "VN_30","Quang Ninh", "VN_32","Son La", "VN_33","Tay Ninh", "VN_34","Thanh Hoa", "VN_35","Thai Binh", "VN_37","Tien Giang", "VN_39","Lang Son", "VN_43","An Giang", "VN_44","Dac Lac", "VN_45","Dong Nai", "VN_46","Dong Thap", "VN_47","Kien Giang", "VN_48","Minh Hai", "VN_49","Song Be", "VN_50","Vinh Phu", "VN_51","Ha Noi", "VN_52","Ho Chi Minh", "VN_53","Ba Ria-Vung Tau", "VN_54","Binh Dinh", "VN_55","Binh Thuan", "VN_56","Can Tho", "VN_57","Gia Lai", "VN_58","Ha Giang", "VN_59","Ha Tay", "VN_60","Ha Tinh", "VN_61","Hoa Binh", "VN_62","Khanh Hoa", "VN_63","Kon Tum", "VN_64","Lao Cai", "VN_65","Nam Ha", "VN_66","Nghe An", "VN_67","Ninh Binh", "VN_68","Ninh Thuan", "VN_69","Phu Yen", "VN_70","Quang Binh", "VN_71","Quang Ngai", "VN_72","Quang Tri", "VN_73","Soc Trang", "VN_74","Thua Thien", "VN_75","Tra Vinh", "VN_76","Tuyen Quang", "VN_77","Vinh Long", "VN_78","Yen Bai", "VU_05","Ambrym", "VU_06","Aoba", "VU_07","Torba", "VU_08","Efate", "VU_09","Epi", "VU_10","Malakula", "VU_11","Paama", "VU_12","Pentecote", "VU_13","Sanma", "VU_14","Shepherd", "VU_15","Tafea", "VU_16","Malampa", "VU_17","Penama", "VU_18","Shefa", "WS_02","Aiga-i-le-Tai", "WS_03","Atua", "WS_04","Fa", "WS_05","Gaga", "WS_06","Va", "WS_07","Gagaifomauga", "WS_08","Palauli", "WS_09","Satupa", "WS_10","Tuamasaga", "WS_11","Vaisigano", "YE_01","Abyan", "YE_03","Al Mahrah", "YE_04","Hadramawt", "YE_05","Shabwah", "YE_08","Al Hudaydah", "YE_10","Al Mahwit", "YE_11","Dhamar", "YE_14","Ma'rib", "YE_15","Sa", "YE_16","San", "YE_20","Al Bayda'", "YE_21","Al Jawf", "YE_22","Hajjah", "YE_23","Ibb", "YE_24","Lahij", "YE_25","Ta", "ZA_02","KwaZulu-Natal", "ZA_03","Free State", "ZA_05","Eastern Cape", "ZA_06","Gauteng", "ZA_07","Mpumalanga", "ZA_08","Northern Cape", "ZA_09","Limpopo", "ZA_10","North-West", "ZA_11","Western Cape", "ZM_01","Western", "ZM_02","Central", "ZM_03","Eastern", "ZM_04","Luapula", "ZM_05","Northern", "ZM_06","North-Western", "ZM_07","Southern", "ZM_08","Copperbelt", "ZM_09","Lusaka", "ZR_01","Bandundu", "ZR_02","Equateur", "ZR_03","Kasai-Occidental", "ZR_04","Kasai-Oriental", "ZR_05","Katanga", "ZR_06","Kinshasa", "ZR_07","Kivu", "ZR_08","Bas-Congo", "ZR_09","Orientale", "ZR_10","Maniema", "ZR_11","Nord-Kivu", "ZR_12","Sud-Kivu", "ZW_01","Manicaland", "ZW_02","Midlands", "ZW_03","Mashonaland Central", "ZW_04","Mashonaland East", "ZW_05","Mashonaland West", "ZW_06","Matabeleland North", "ZW_07","Matabeleland South", "ZW_08","Masvingo", "ZW_09","Bulawayo", "ZW_10","Harare" ); # -----> sub RegionName($$) { my $countrycode = shift || ""; my $regioncode = shift || ""; if ($countrycode eq "us") { return $regus{uc $regioncode} || ""; } if ($countrycode eq "ca") { return $regca{uc $regioncode} || ""; } return $regall{uc($countrycode."_".$regioncode)} || ""; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_geoip_city_maxmind { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); $MAXNBOFSECTIONGIR=10; # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin geoip_city_maxmind: InitParams=$InitParams",1); my ($mode,$datafile)=split(/\s+/,$InitParams,2); if (! $datafile) { $datafile="GeoIPCity.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_city_maxmind: GeoIP initialized type=$type mode=$mode",1); if ($type eq 'geoippureperl') { $geoip_city_maxmind = Geo::IP::PurePerl->open($datafile, $mode); } else { $geoip_city_maxmind = Geo::IP->open($datafile, $mode); } # Fails on some GeoIP version # debug(" Plugin geoip_city_maxmind: GeoIP initialized database_info=".$geoip_city_maxmind->database_info()); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLMenuLink_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub AddHTMLMenuLink_geoip_city_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- if ($Debug) { debug(" Plugin geoip_city_maxmind: AddHTMLMenuLink"); } if ($categ eq 'who') { $menu->{'plugin_geoip_city_maxmind'}=2.2; # Pos $menulink->{'plugin_geoip_city_maxmind'}=2; # Type of link $menutext->{'plugin_geoip_city_maxmind'}=$Message[172]; # Text } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLGraph_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub AddHTMLGraph_geoip_city_maxmind { my $categ=$_[0]; my $menu=$_[1]; my $menulink=$_[2]; my $menutext=$_[3]; # <----- my $ShowCities='H'; $MinHit{'Cities'}=1; my $total_p; my $total_h; my $total_k; my $rest_p; my $rest_h; my $rest_k; if ($Debug) { debug(" Plugin geoip_city_maxmind: AddHTMLGraph $categ $menu $menulink $menutext"); } my $title="GeoIP Cities"; &tab_head($title,19,0,'cities'); print ""; print "".$Message[148].""; print "".$Message[171].""; print "".$Message[172].": ".((scalar keys %_city_h)-($_city_h{'unknown'}?1:0)).""; if ($ShowCities =~ /P/i) { print "$Message[56]"; } if ($ShowCities =~ /P/i) { print "$Message[15]"; } if ($ShowCities =~ /H/i) { print "$Message[57]"; } if ($ShowCities =~ /H/i) { print "$Message[15]"; } if ($ShowCities =~ /B/i) { print "$Message[75]"; } if ($ShowCities =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Cities'},\%_city_h,\%_city_h); # Group by country # my @countrylist=('ca','us'); # foreach my $country (@countrylist) { # print ""; # print "".$countrylib{$country}.""; # if ($ShowCities =~ /P/i) { print " "; } # if ($ShowCities =~ /P/i) { print " "; } # if ($ShowCities =~ /H/i) { print " "; } # if ($ShowCities =~ /H/i) { print " "; } # if ($ShowCities =~ /B/i) { print " "; } # if ($ShowCities =~ /L/i) { print " "; } # print "\n"; foreach my $key (@keylist) { if ($key eq 'unknown') { next; } my ($countrycode,$city,$regioncode)=split('_',$key,3); $city=~s/%20/ /g; # if ($countrycode ne $country) { next; } my $p_p; my $p_h; if ($TotalPages) { $p_p=int(($_city_p{$key}||0)/$TotalPages*1000)/10; } if ($TotalHits) { $p_h=int($_city_h{$key}/$TotalHits*1000)/10; } print ""; print "".$DomainsHashIDLib{$countrycode}.""; my $regionlib=RegionName($countrycode, $regioncode); print "".($regionlib?$regionlib:' ').""; print "".ucfirst($city).""; if ($ShowCities =~ /P/i) { print "".($_city_p{$key}?$_city_p{$key}:" ").""; } if ($ShowCities =~ /P/i) { print "".($_city_p{$key}?"$p_p %":' ').""; } if ($ShowCities =~ /H/i) { print "".($_city_h{$key}?$_city_h{$key}:" ").""; } if ($ShowCities =~ /H/i) { print "".($_city_h{$key}?"$p_h %":' ').""; } if ($ShowCities =~ /B/i) { print "".Format_Bytes($_city_k{$key}).""; } if ($ShowCities =~ /L/i) { print "".($_city_p{$key}?Format_Date($_city_l{$key},1):'-').""; } print "\n"; $total_p += $_city_p{$key}||0; $total_h += $_city_h{$key}; $total_k += $_city_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 cities # print ""; # print " "; # if ($ShowCities =~ /P/i) { print " "; } # if ($ShowCities =~ /P/i) { print " "; } # if ($ShowCities =~ /H/i) { print " "; } # if ($ShowCities =~ /H/i) { print " "; } # if ($ShowCities =~ /B/i) { print " "; } # if ($ShowCities =~ /L/i) { print " "; } # print "\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 ""; print "$Message[2]/$Message[0]"; if ($ShowCities =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowCities =~ /P/i) { print "".($rest_p?"$p_p %":' ').""; } if ($ShowCities =~ /H/i) { print "".($rest_h?$rest_h:" ").""; } if ($ShowCities =~ /H/i) { print "".($rest_h?"$p_h %":' ').""; } if ($ShowCities =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowCities =~ /L/i) { print " "; } print "\n"; } &tab_end(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByAddr is called to translate an ip into a country code in lower case. #----------------------------------------------------------------------------- # Rem: not used sub GetCountryCodeByAddr_geoip_city_maxmind { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if ($type eq 'geoippureperl') { if (! $res) { my @record = (); @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; my $country; $country=$record[0] if @record; $res=lc($country) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByAddr for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } } else { if (! $res) { my $record=(); $record=$geoip_city_maxmind->record_by_addr($param) if $geoip_city_maxmind; my $country; $country=$record->country if $record; $res=lc($country) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByAddr for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } } # -----> return $res; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByName_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByName is called to translate a host name into a country code in lower case. #----------------------------------------------------------------------------- # Rem: not used sub GetCountryCodeByName_geoip_city_maxmind { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if ($type eq 'geoippureperl') { if (! $res) { my @record = (); @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; my $country; $country=$record[0] if @record; $res=lc($country) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByName for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByName for $param: Already resolved to [$res]",5); } } else { if (! $res) { my $record=(); $record=$geoip_city_maxmind->record_by_name($param) if $geoip_city_maxmind; my $country; $country=$record->country if $record; $res=lc($country) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByName for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByName for $param: Already resolved to [$res]",5); } } # -----> return $res; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoHost_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to the Hosts report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: Host name or ip #----------------------------------------------------------------------------- sub ShowInfoHost_geoip_city_maxmind { my $param="$_[0]"; # <----- if ($param eq '__title__') { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; my $NewLinkTarget=''; if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { $NewLinkParams.="&framename=mainright"; $NewLinkTarget=" target=\"mainright\""; } $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } # print ""; # print "GeoIP
    Country
    "; # print ""; print ""; print "GeoIP
    City
    "; print ""; } elsif ($param) { my $ip=0; my $key; if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address $ip=4; $key=$param; } elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address $ip=6; $key=$param; } if ($key && $ip==4) { my $country; my $city; if ($type eq 'geoippureperl') { my @record = (); @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByIp for $param: [@record]",5); } $country=$record[0] if @record; $city=$record[4] if @record; } else { my $record=(); $record=$geoip_city_maxmind->record_by_addr($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByIp for $param: [$record]",5); } $country=$record->country_code if $record; $city=$record->city if $record; } # print ""; # if ($country) { print $DomainsHashIDLib{$country}?$DomainsHashIDLib{$country}:"$Message[0]"; } # else { print "$Message[0]"; } # print ""; print ""; if ($city) { print "$city"; } else { print "$Message[0]"; } print ""; } if ($key && $ip==6) { # print ""; # print "$Message[0]"; # print ""; print ""; print "$Message[0]"; print ""; } if (! $key) { my $country; my $city; if ($type eq 'geoippureperl') { my @record = (); @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByHostname for $param: [@record]",5); } $country=$record[0] if @record; $city=$record[4] if @record; } else { my $record=(); $record=$geoip_city_maxmind->record_by_name($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByHostname for $param: [$record]",5); } $country=$record->country_code if $record; $city=$record->city if $record; } # print ""; # if ($country) { print $DomainsHashIDLib{$country}?$DomainsHashIDLib{$country}:"$Message[0]"; } # else { print "$Message[0]"; } # print ""; print ""; if ($city) { print "$city"; } else { print "$Message[0]"; } print ""; } } else { # print " "; print " "; } return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionInitHashArray_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionInitHashArray_geoip_city_maxmind { # my $param="$_[0]"; # <----- if ($Debug) { debug(" Plugin geoip_city_maxmind: Init_HashArray"); } %_city_p = %_city_h = %_city_k = %_city_l =(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessIP_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessIp_geoip_city_maxmind { my $param="$_[0]"; # Param must be an IP # <----- if ($type eq 'geoippureperl') { my @record = (); @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByName for $param: [@record]",5); } if (@record) { my $city=$record[4]; if ($city) { my $countrycity=$record[0].'_'.$city; $countrycity=~s/ /%20/g; if ($record[3]) { $countrycity.='_'.$record[3]; } $_city_h{lc($countrycity)}++; } else { $_city_h{'unknown'}++; } } else { $_city_h{'unknown'}++; } } else { my $record=(); $record=$geoip_city_maxmind->record_by_addr($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByIp for $param: [$record]",5); } if ($record) { my $city=$record->city; # if ($PageBool) { $_city_p{$city}++; } if ($city) { my $countrycity=($record->country_code).'_'.$city; $countrycity=~s/ /%20/g; if ($record->region) { $countrycity.='_'.$record->region; } $_city_h{lc($countrycity)}++; } else { $_city_h{'unknown'}++; } # if ($timerecord > $_city_l{$city}) { $_city_l{$city}=$timerecord; } } else { $_city_h{'unknown'}++; } } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessHostname_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessHostname_geoip_city_maxmind { my $param="$_[0]"; # Param must be an IP # <----- if ($type eq 'geoippureperl') { my @record = (); @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByName for $param: [@record]",5); } if (@record) { my $city=$record[4]; if ($city) { my $countrycity=$record[0].'_'.$city; $countrycity=~s/ /%20/g; if ($record[3]) { $countrycity.='_'.$record[3]; } $_city_h{lc($countrycity)}++; } else { $_city_h{'unknown'}++; } } else { $_city_h{'unknown'}++; } } else { my $record=(); $record=$geoip_city_maxmind->record_by_name($param) if $geoip_city_maxmind; if ($Debug) { debug(" Plugin geoip_city_maxmind: GetCityByName for $param: [$record]",5); } if ($record) { my $city=$record->city; # if ($PageBool) { $_city_p{$city}++; } if ($city) { my $countrycity=($record->country_code).'_'.$city; $countrycity=~s/ /%20/g; if ($record->region) { $countrycity.='_'.$record->region; } $_city_h{lc($countrycity)}++; } else { $_city_h{'unknown'}++; } # if ($timerecord > $_city_l{$city}) { $_city_l{$city}=$timerecord; } } else { $_city_h{'unknown'}++; } } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionReadHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionReadHistory_geoip_city_maxmind { my $issectiontoload=shift; my $xmlold=shift; my $xmleb=shift; my $countlines=shift; # <----- if ($Debug) { debug(" Plugin geoip_city_maxmind: Begin of PLUGIN_geoip_city_maxmind section"); } my @field=(); my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($issectiontoload) { $countloaded++; if ($field[2]) { $_city_h{$field[0]}+=$field[2]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_PLUGIN_geoip_city_maxmind' || $field[0] eq "${xmleb}END_PLUGIN_geoip_city_maxmind" || ! $_); if ($field[0] ne 'END_PLUGIN_geoip_city_maxmind' && $field[0] ne "${xmleb}END_PLUGIN_geoip_city_maxmind") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" Plugin geoip_city_maxmind: End of PLUGIN_geoip_city_maxmind section ($count entries, $countloaded loaded)"); } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionWriteHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionWriteHistory_geoip_city_maxmind { my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); if ($Debug) { debug(" Plugin geoip_city_maxmind: SectionWriteHistory_geoip_city_maxmind start - ".(scalar keys %_city_h)); } # <----- print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MAXNBOFSECTIONGIR\n"; } print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; $ValueInFile{'plugin_geoip_city_maxmind'}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_geoip_city_maxmind${xmlbs}".(scalar keys %_city_h)."${xmlbe}\n"; &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_city_h,\%_city_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; #my $page=$_city_p{$_}||0; #my $bytes=$_city_k{$_}||0; #my $lastaccess=$_city_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_city_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } foreach (keys %_city_h) { if ($keysinkeylist{$_}) { next; } #my $page=$_city_p{$_}||0; #my $bytes=$_city_k{$_}||0; #my $lastaccess=$_city_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_city_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } print HISTORYTMP "${xmleb}END_PLUGIN_geoip_city_maxmind${xmlee}\n"; # -----> return 0; } 1; # Do not remove this line plugins/geoip_region_maxmind.pm000064400000053420152532065620012760 0ustar00#!/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.13 $ - $Author: eldy $ - $Date: 2008/03/15 00:17:13 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES use 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 "US and CA Regions : ".((scalar keys %_region_h)-($_region_h{'unknown'}?1:0)).""; if ($ShowRegions =~ /P/i) { print "$Message[56]"; } if ($ShowRegions =~ /P/i) { print "$Message[15]"; } if ($ShowRegions =~ /H/i) { print "$Message[57]"; } if ($ShowRegions =~ /H/i) { print "$Message[15]"; } if ($ShowRegions =~ /B/i) { print "$Message[75]"; } if ($ShowRegions =~ /L/i) { print "$Message[9]"; } print "\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 "".$countryregionlib{$country}.""; if ($ShowRegions =~ /P/i) { print " "; } if ($ShowRegions =~ /P/i) { print " "; } if ($ShowRegions =~ /H/i) { print " "; } if ($ShowRegions =~ /H/i) { print " "; } if ($ShowRegions =~ /B/i) { print " "; } if ($ShowRegions =~ /L/i) { print " "; } print "\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 "".$region{$countrycode}{uc($regioncode)}." ($regioncode)"; if ($ShowRegions =~ /P/i) { print "".($_region_p{$key}?$_region_p{$key}:" ").""; } if ($ShowRegions =~ /P/i) { print "".($_region_p{$key}?"$p_p %":' ').""; } if ($ShowRegions =~ /H/i) { print "".($_region_h{$key}?$_region_h{$key}:" ").""; } if ($ShowRegions =~ /H/i) { print "".($_region_h{$key}?"$p_h %":' ').""; } if ($ShowRegions =~ /B/i) { print "".Format_Bytes($_region_k{$key}).""; } if ($ShowRegions =~ /L/i) { print "".($_region_p{$key}?Format_Date($_region_l{$key},1):'-').""; } print "\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 " "; if ($ShowRegions =~ /P/i) { print " "; } if ($ShowRegions =~ /P/i) { print " "; } if ($ShowRegions =~ /H/i) { print " "; } if ($ShowRegions =~ /H/i) { print " "; } if ($ShowRegions =~ /B/i) { print " "; } if ($ShowRegions =~ /L/i) { print " "; } print "\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 "$Message[2]/$Message[0]"; if ($ShowRegions =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowRegions =~ /P/i) { print "".($rest_p?"$p_p %":' ').""; } if ($ShowRegions =~ /H/i) { print "".($rest_h?$rest_h:" ").""; } if ($ShowRegions =~ /H/i) { print "".($rest_h?"$p_h %":' ').""; } if ($ShowRegions =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowRegions =~ /L/i) { print " "; } print "\n"; } &tab_end(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByAddr is called to translate an ip into a country code in lower case. #----------------------------------------------------------------------------- # Rem: Not used sub GetCountryCodeByAddr_geoip_region_maxmind { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if (! $res) { my ($res1,$res2,$countryregion)=(); ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; $res=lc($res1) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByAddr for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } # -----> return $res; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByName_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByName is called to translate a host name into a country code in lower case. #----------------------------------------------------------------------------- # Rem: Not used sub GetCountryCodeByName_geoip_region_maxmind { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if (! $res) { my ($res1,$res2,$countryregion)=(); ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; $res=lc($res1) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByName for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip_region_maxmind: GetCountryCodeByName for $param: Already resolved to [$res]",5); } # -----> return $res; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoHost_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to the Hosts report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: Host name or ip #----------------------------------------------------------------------------- sub ShowInfoHost_geoip_region_maxmind { my $param="$_[0]"; # <----- if ($param eq '__title__') { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; my $NewLinkTarget=''; if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { $NewLinkParams.="&framename=mainright"; $NewLinkTarget=" target=\"mainright\""; } $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } print ""; print "GeoIP
    Region
    "; print ""; } elsif ($param) { my $ip=0; my $key; if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address $ip=4; $key=$param; } elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address $ip=6; $key=$param; } print ""; if ($key && $ip==4) { my ($res1,$res2,$countryregion)=(); ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetRegionByIp for $param: [${res1}_${res2}]",5); } if (! $PluginsLoaded{'init'}{'geoip'}) { # Show country if ($res1 =~ /\w\w/) { print $DomainsHashIDLib{lc($res1)}||uc($res1); } else { print "$Message[0]"; } # Show region if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { print " ("; print $region{lc($res1)}{uc($res2)}; print ")"; } } else { # Show region if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { print $region{lc($res1)}{uc($res2)}; } else { print "$Message[0]"; } } } if ($key && $ip==6) { print "$Message[0]"; } if (! $key) { my ($res1,$res2,$countryregion)=(); ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetRegionByName for $param: [${res1}_${res2}]",5); } if (! $PluginsLoaded{'init'}{'geoip'}) { # Show country if ($res1 =~ /\w\w/) { print $DomainsHashIDLib{lc($res1)}||uc($res1); } else { print "$Message[0]"; } # Show region if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { print " ("; print $region{lc($res1)}{uc($res2)}; print ")"; } } else { # Show region if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { print $region{lc($res1)}{uc($res2)}; } else { print "$Message[0]"; } } } print ""; } else { print " "; } return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionInitHashArray_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionInitHashArray_geoip_region_maxmind { # my $param="$_[0]"; # <----- if ($Debug) { debug(" Plugin geoip_region_maxmind: Init_HashArray"); } %_region_p = %_region_h = %_region_k = %_region_l =(); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessHostname_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessIp_geoip_region_maxmind { my $param="$_[0]"; # Param must be an IP # <----- my ($res1,$res2,$countryregion)=(); ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetRegionByIp for $param: [${res1}_${res2}]",5); } if ($res2 =~ /\w\w/) { $countryregion=lc("${res1}_${res2}"); } else { $countryregion='unknown'; } # if ($PageBool) { $_region_p{$countryregion}++; } $_region_h{$countryregion}++; # if ($timerecord > $_region_l{$countryregion}) { $_region_l{$countryregion}=$timerecord; } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessHostname_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessHostname_geoip_region_maxmind { my $param="$_[0]"; # Param must be a hostname # <----- my ($res1,$res2,$countryregion)=(); ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; if ($Debug) { debug(" Plugin geoip_region_maxmind: GetRegionByName for $param: [${res1}_${res2}]",5); } if ($res2 =~ /\w\w/) { $countryregion=lc("${res1}_${res2}"); } else { $countryregion='unknown'; } # if ($PageBool) { $_region_p{$countryregion}++; } $_region_h{$countryregion}++; # if ($timerecord > $_region_l{$countryregion}) { $_region_l{$countryregion}=$timerecord; } # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionReadHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionReadHistory_geoip_region_maxmind { my $issectiontoload=shift; my $xmlold=shift; my $xmleb=shift; my $countlines=shift; # <----- if ($Debug) { debug(" Plugin geoip_region_maxmind: Begin of PLUGIN_geoip_region_maxmind section"); } my @field=(); my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($issectiontoload) { $countloaded++; if ($field[2]) { $_region_h{$field[0]}+=$field[2]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_PLUGIN_geoip_region_maxmind' || $field[0] eq "${xmleb}END_PLUGIN_geoip_region_maxmind" || ! $_); if ($field[0] ne 'END_PLUGIN_geoip_region_maxmind' && $field[0] ne "${xmleb}END_PLUGIN_geoip_region_maxmind") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" Plugin geoip_region_maxmind: End of PLUGIN_geoip_region_maxmind section ($count entries, $countloaded loaded)"); } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionWriteHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionWriteHistory_geoip_region_maxmind { my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); if ($Debug) { debug(" Plugin geoip_region_maxmind: SectionWriteHistory_geoip_region_maxmind start - ".(scalar keys %_region_h)); } # <----- print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MAXNBOFSECTIONGIR\n"; } print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; $ValueInFile{'plugin_geoip_region_maxmind'}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_geoip_region_maxmind${xmlbs}".(scalar keys %_region_h)."${xmlbe}\n"; &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_region_h,\%_region_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; #my $page=$_region_p{$_}||0; #my $bytes=$_region_k{$_}||0; #my $lastaccess=$_region_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_region_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } foreach (keys %_region_h) { if ($keysinkeylist{$_}) { next; } #my $page=$_region_p{$_}||0; #my $bytes=$_region_k{$_}||0; #my $lastaccess=$_region_l{$_}||''; print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_region_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; } print HISTORYTMP "${xmleb}END_PLUGIN_geoip_region_maxmind${xmlee}\n"; # -----> return 0; } 1; # Do not remove this line plugins/timehires.pm000064400000003633152532065620010567 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # TimeHires AWStats plugin # Change time accuracy in showsteps option from seconds to milliseconds #----------------------------------------------------------------------------- # Perl Required Modules: Time::HiRes #----------------------------------------------------------------------------- # $Revision: 1.10 $ - $Author: eldy $ - $Date: 2003/07/26 15:32:31 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES if (!eval ('require "Time/HiRes.pm"')) { return $@?"Error: $@":"Error: Need Perl module Time::HiRes"; } # -----> 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="5.1"; my $PluginHooksFunctions="GetTime"; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_timehires { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetTime_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) #----------------------------------------------------------------------------- sub GetTime_timehires { my ($sec,$msec)=Time::HiRes::gettimeofday(); $_[0]=$sec; $_[1]=$msec; } 1; # Do not remove this line plugins/timezone.pm000064400000005732152532065620010432 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # TimeZone AWStats plugin # Allow AWStats to correct a bad timezone for user of IIS that use strange # log format. #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # $Revision: 1.10 $ - $Author: eldy $ - $Date: 2004/07/11 10:44:41 $ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # !!!!! This plugin reduces AWStats speed by 40% !!!!! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES #use Time::Local 'timelocal_nocheck'; # -----> 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="5.1"; my $PluginHooksFunctions="ChangeTime GetTimeZoneTitle"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $PluginTimeZoneSeconds /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_timezone { my $InitParams=shift; # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS if (! $InitParams || int($InitParams) == 0) { return "Error: Disable plugin if TimeZone is 0 (Plugin useless)"; } # We do not need this plugin if TZ=0 $PluginTimeZoneSeconds=(int($InitParams)*3600); # -----> my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ChangeTime_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) #----------------------------------------------------------------------------- sub ChangeTime_timezone { my $dateparts=shift; my ($nsec,$nmin,$nhour,$nmday,$nmon,$nyear,$nwday) = localtime(Time::Local::timelocal(int(@$dateparts[5]), int(@$dateparts[4]), int(@$dateparts[3]), int(@$dateparts[0]), int(@$dateparts[1])-1, int(@$dateparts[2])-1900) + $PluginTimeZoneSeconds); return ($nmday, $nmon+1, $nyear+1900, $nhour, $nmin, $nsec); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetTimeZoneTitle_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) #----------------------------------------------------------------------------- sub GetTimeZoneTitle_timezone { return ($PluginTimeZoneSeconds/3600); } 1; # Do not remove this line plugins/decodeutfkeys.pm000064400000005734152532065620011440 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # decodeUTFKeys AWStats plugin # Allow AWStats to convert keywords strings coded by some search engines in # UTF8 coding to a common string in a local charset. #----------------------------------------------------------------------------- # Perl Required Modules: Encode and URI::Escape #----------------------------------------------------------------------------- # $Revision: 1.4 $ - $Author: eldy $ - $Date: 2004/08/14 14:49:09 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES if (!eval ('require "Encode.pm"')) { return $@?"Error: $@":"Error: Need Perl module Encode"; } if (!eval ('require "URI/Escape.pm"')) { return $@?"Error: $@":"Error: Need Perl module URI::Escape"; } #if (!eval ('require "HTML/Entities.pm"')) { return $@?"Error: $@":"Error: Need Perl module HTML::Entities"; } # -----> 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.0"; my $PluginHooksFunctions="DecodeKey"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_decodeutfkeys { my $InitParams=shift; # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS # -----> my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #------------------------------------------------------------------------------ # Function: Converts an UTF8 string to specified Charset # Parameters: utfstringtodecode charsettoencode # Return: newencodedstring #------------------------------------------------------------------------------ sub DecodeKey_decodeutfkeys { my $string = shift; my $encoding = shift; if (! $encoding) { error("Function DecodeKey from plugin decodeutfkeys was called but AWStats don't know language code required to output new value."); } $string =~ s/\\x(\w\w)/%$1/gi; # Change "\xc4\xbe\xd7\xd3\xc3\xc0" into "%c4%be%d7%d3%c3%c0" $string=URI::Escape::uri_unescape($string); if ( $string =~ m/^(?:[\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf])*$/ ) { $string=Encode::encode($encoding, Encode::decode("utf-8", $string)); } #$string=HTML::Entities::encode_entities($string); $string =~ s/[;+]/ /g; return $string; } 1; # Do not remove this line plugins/example/example.pm000064400000030222152532065620011656 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # Example AWStats plugin # <----- # THIS IS A SAMPLE OF AN EMPTY PLUGIN FILE WITH INSTRUCTIONS TO HELP YOU TO # WRITE YOUR OWN WORKING PLUGIN. REPLACE THIS SENTENCE WITH THE PLUGIN GOAL. # NOTE THAT A PLUGIN FILE example.pm MUST BE IN LOWER CASE. # -----> #----------------------------------------------------------------------------- # Perl Required Modules: Put here list of all required plugins #----------------------------------------------------------------------------- # $Revision: 1.14 $ - $Author: eldy $ - $Date: 2008/03/15 00:17:14 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES #if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } # -----> 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. # EACH POSSIBLE FUNCTION AND GOAL ARE DESCRIBED LATER. my $PluginNeedAWStatsVersion="6.7"; my $PluginHooksFunctions="xxx"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $PluginVariable1 /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_example { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" InitParams=$InitParams",1); $PluginVariable1=""; # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } # HERE ARE ALL POSSIBLE HOOK FUNCTIONS. YOU MUST CHANGE THE NAME OF THE # FUNCTION xxx_example INTO xxx_pluginname (pluginname in lower case). # NOTE THAT IN PLUGINS' FUNCTIONS, YOU CAN USE ANY AWSTATS GLOBAL VARIALES. #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLStyles_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML styles at beginning of BODY section. # Parameters: None #----------------------------------------------------------------------------- sub AddHTMLStyles_example { # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLBodyHeader_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code at beginning of BODY section (top of page). # Parameters: None #----------------------------------------------------------------------------- sub AddHTMLBodyHeader_example { # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLBodyFooter_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code at end of BODY section (bottom of page). # Parameters: None #----------------------------------------------------------------------------- sub AddHTMLBodyFooter_example { # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLMenuHeader_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code just before the menu section # Parameters: None #----------------------------------------------------------------------------- sub AddHTMLMenuHeader_example { # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLMenuFooter_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code just after the menu section # Parameters: None #----------------------------------------------------------------------------- sub AddHTMLMenuFooter_example { # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLContentHeader_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code just before the first report # Parameters: None #----------------------------------------------------------------------------- sub AddHTMLContentHeader_example { # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNTION: BuildFullHTMLOutput_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to output an HTML page completely built by plugin instead # of AWStats output #----------------------------------------------------------------------------- sub BuildFullHTMLOutput_example { # <----- print "This is an output for plugin example
    \n"; return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoHost_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to the Hosts report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: Host name or ip #----------------------------------------------------------------------------- sub ShowInfoHost_example { my $param="$_[0]"; # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowPagesAddField_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function used to add additionnal columns to the Top Pages-URL report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: URL #----------------------------------------------------------------------------- sub ShowPagesAddField_example { my $param="$_[0]"; # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoURL_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal information for URLs in URLs' report. # This function is called after writing the URL value in the URL cell of the # Top Pages-URL report. # Parameters: URL #----------------------------------------------------------------------------- sub ShowInfoURL_example { my $param="$_[0]"; # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoUser_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to Authenticated users report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: User #----------------------------------------------------------------------------- sub ShowInfoUser_example { my $param="$_[0]"; # <----- # PERL CODE HERE # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionInitHashArray_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionInitHashArray_example { # <----- if ($Debug) { debug(" Plugin example: Init_HashArray"); } %_myarray_p = %_myarray_h = %_myarray_k = %_myarray_l = (); # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessIP_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessIp_example { my $param="$_[0]"; # Param is IP of record # <----- # PERL CODE HERE # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionProcessHostname_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionProcessHostname_example { my $param="$_[0]"; # Param is hostname of record # <----- # PERL CODE HERE # -----> return; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionReadHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionReadHistory_example { my $issectiontoload=shift; my $xmlold=shift; my $xmleb=shift; my $countlines=shift; # <----- # if ($Debug) { debug(" Plugin example: Begin of PLUGIN_example section"); } # my @field=(); # my $count=0;my $countloaded=0; # do { # if ($field[0]) { # $count++; # if ($issectiontoload) { # $countloaded++; # if ($field[1]) { $_myarray_p{$field[0]}+=$field[1]; } # if ($field[2]) { $_myarray_h{$field[0]}+=$field[2]; } # if ($field[3]) { $_myarray_k{$field[0]}+=$field[3]; } # if ($field[4]) { $_myarray_l{$field[0]}+=$field[4]; } # } # } # $_=; # chomp $_; s/\r//; # @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); # $countlines++; # } # until ($field[0] eq 'END_PLUGIN_example' || $field[0] eq "${xmleb}END_PLUGIN_example" || ! $_); # if ($field[0] ne 'END_PLUGIN_example' && $field[0] ne "${xmleb}END_PLUGIN_example") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } # if ($Debug) { debug(" Plugin example: End of PLUGIN_example section ($count entries, $countloaded loaded)"); } # -----> return 0; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SectionWriteHistory_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) #----------------------------------------------------------------------------- sub SectionWriteHistory_example { my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); if ($Debug) { debug(" Plugin example: SectionWriteHistory_example start - ".(scalar keys %_myarray_h)); } # <----- # print HISTORYTMP "\n"; # if ($xml) { print HISTORYTMP "
    $MAXNBOFSECTIONGIR\n"; } # print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; # $ValueInFile{'plugin_example'}=tell HISTORYTMP; # print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_example${xmlbs}".(scalar keys %_myarray_h)."${xmlbe}\n"; # &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_myarray_h,\%_myarray_h); # my %keysinkeylist=(); # foreach (@keylist) { # $keysinkeylist{$_}=1; # my $page=$_myarray_p{$_}||0; # my $bytes=$_myarray_k{$_}||0; # my $lastaccess=$_myarray_l{$_}||''; # print HISTORYTMP "${xmlrb}$_${xmlrs}", $_myarray_p{$_}, "${xmlrs}", $_myarray_h{$_}, "${xmlrs}", $_myarray_k{$_}, "${xmlrs}", $_myarray_l{$_}, "${xmlre}\n"; next; # } # foreach (keys %_myarray_h) { # if ($keysinkeylist{$_}) { next; } # my $page=$_myarray_p{$_}||0; # my $bytes=$_myarray_k{$_}||0; # my $lastaccess=$_myarray_l{$_}||''; # print HISTORYTMP "${xmlrb}$_${xmlrs}", $_myarray_p{$_}, "${xmlrs}", $_myarray_h{$_}, "${xmlrs}", $_myarray_k{$_}, "${xmlrs}", $_myarray_l{$_}, "${xmlre}\n"; next; # } # print HISTORYTMP "${xmleb}END_PLUGIN_example${xmlee}\n"; # -----> return 0; } 1; # Do not remove this line plugins/geoip.pm000064400000016043152532065620007700 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # GeoIp Maxmind AWStats plugin # This plugin allow you to get country report with countries detected # from a Geographical database (GeoIP internal database) instead of domain # hostname suffix. # Need the country database from Maxmind (free). #----------------------------------------------------------------------------- # Perl Required Modules: Geo::IP or Geo::IP::PurePerl #----------------------------------------------------------------------------- # $Revision: 1.24 $ - $Author: eldy $ - $Date: 2006/05/06 02:51:34 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES use 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="5.4"; my $PluginHooksFunctions="GetCountryCodeByAddr GetCountryCodeByName ShowInfoHost"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ %TmpDomainLookup $gi /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_geoip { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin geoip: InitParams=$InitParams",1); my ($mode,$datafile)=split(/\s+/,$InitParams,2); if (! $datafile) { $datafile="GeoIP.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: GeoIP initialized type=$type mode=$mode",1); if ($type eq 'geoippureperl') { $gi = Geo::IP::PurePerl->open($datafile, $mode); } else { $gi = Geo::IP->open($datafile, $mode); } # Fails on some GeoIP version # debug(" Plugin geoip: GeoIP initialized database_info=".$gi->database_info()); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByAddr is called to translate an ip into a country code in lower case. #----------------------------------------------------------------------------- sub GetCountryCodeByAddr_geoip { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if (! $res) { $res=lc($gi->country_code_by_addr($param)) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip: GetCountryCodeByAddr for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } # -----> return $res; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByName_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByName is called to translate a host name into a country code in lower case. #----------------------------------------------------------------------------- sub GetCountryCodeByName_geoip { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if (! $res) { $res=lc($gi->country_code_by_name($param)) || 'unknown'; $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoip: GetCountryCodeByName for $param: [$res]",5); } } elsif ($Debug) { debug(" Plugin geoip: GetCountryCodeByName for $param: Already resolved to [$res]",5); } # -----> return $res; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoHost_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to the Hosts report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: Host name or ip #----------------------------------------------------------------------------- sub ShowInfoHost_geoip { my $param="$_[0]"; # <----- if ($param eq '__title__') { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&)output(=\w*|$)//i; $NewLinkParams =~ s/(^|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&)framename=[^&]*//i; my $NewLinkTarget=''; if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { $NewLinkParams.="&framename=mainright"; $NewLinkTarget=" target=\"mainright\""; } $NewLinkParams =~ tr/&/&/s; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } print ""; print "GeoIP
    Country
    "; print ""; } elsif ($param) { my $ip=0; my $key; if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address $ip=4; $key=$param; } elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address $ip=6; $key=$param; } print ""; if ($key && $ip==4) { my $res=lc($gi->country_code_by_addr($param)) if $gi; if ($Debug) { debug(" Plugin geoip: GetCountryByIp for $param: [$res]",5); } if ($res) { print $DomainsHashIDLib{$res}?$DomainsHashIDLib{$res}:"$Message[0]"; } else { print "$Message[0]"; } } if ($key && $ip==6) { print "$Message[0]"; } if (! $key) { my $res=lc($gi->country_code_by_name($param)) if $gi; if ($Debug) { debug(" Plugin geoip: GetCountryByHostname for $param: [$res]",5); } if ($res) { print $DomainsHashIDLib{$res}?$DomainsHashIDLib{$res}:"$Message[0]"; } else { print "$Message[0]"; } } print ""; } else { print " "; } return 1; # -----> } 1; # Do not remove this line plugins/urlalias.pm000064400000011511152532065620010404 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # UrlAlias AWStats plugin # This plugin allow you to report all URL links with a text title instead of # URL value. # You must create a file called urlalias.cnfigvalue.txt and store it in # plugin directory that contains 2 columns separated by a tab char. # First column is URL value and second column is text title to use instead of. #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # $Revision: 1.17 $ - $Author: eldy $ - $Date: 2004/05/21 21:22:52 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES #if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } # -----> 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="5.5"; my $PluginHooksFunctions="ShowInfoURL"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $urlinfoloaded %UrlAlias @UrlMatch /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_urlalias { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin urlalias: InitParams=$InitParams",1); $urlinfoloaded=0; %UrlAlias=(); @UrlMatch=(); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoURL_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal information for URLs in URLs' report. # This function is called after writing the URL value in the URL cell of the # Top Pages-URL report. # Parameters: URL #----------------------------------------------------------------------------- sub ShowInfoURL_urlalias { my $param="$_[0]"; # <----- my $found = 0; # flag for testing for whether a match occurs. unused at present my $filetoload=''; my $filetoload2=''; if ($param && ! $urlinfoloaded) { # Load urlalias and match files if ($SiteConfig && open(URLALIASFILE,"$DirData/urlalias.$SiteConfig.txt")) { $filetoload2="$DirData/urlalias.$SiteConfig.txt"; } elsif (open(URLALIASFILE,"$DirData/urlalias.txt")) { $filetoload2="$DirData/urlalias.txt"; } else { error("Couldn't open UrlAlias file \"$DirData/urlalias.txt\": $!"); } if ($SiteConfig && open(URLMATCHFILE,"$DirData/urlmatch.$SiteConfig.txt")) { $filetoload="$DirData/urlmatch.$SiteConfig.txt"; } elsif (open(URLMATCHFILE,"$DirData/urlmatch.txt")) { $filetoload="$DirData/urlmatch.txt"; } # Load UrlAlias %UrlAlias = map(/^([^\t]+)\t+([^\t]+)/o,); # Load UrlMatch my $iter = 0; foreach my $key () { $key =~ /^([^\t]+)\t+([^\t]+)/o; $UrlMatch[$iter][0] = $1; $UrlMatch[$iter][1] = $2; $iter++; } close URLALIASFILE; close URLMATCHFILE; debug(" Plugin urlalias: UrlAlias file loaded: ".(scalar keys %UrlAlias)." entries found."); debug(" Plugin urlalias: UrlMatch file loaded: ".(scalar @UrlMatch)." entries found."); $urlinfoloaded=1; } if ($param) { if ($UrlAlias{$param}) { print "$UrlAlias{$param}
    "; $found=1; } else { foreach my $iter (0..@UrlMatch-1) { my $key = $UrlMatch[$iter][0]; if ( $param =~ /$key/ ) { print "$UrlMatch[$iter][1]
    "; $found = 1; # $UrlAlias{$param} = $UrlMatch[$iter][1]; # if ($SiteConfig && open(URLALIASFILE,">> $DirData/urlalias.$SiteConfig.txt")) { # $filetoload="$DirData/urlalias.$SiteConfig.txt"; # } # elsif (open(URLALIASFILE,">> $DirData/urlalias.txt")) { # $filetoload="$DirData/urlalias.txt"; # } # else { # error("Couldn't open UrlAlias file \"$DirData/urlalias.txt\": $!"); # } # print URLALIASFILE "$param\t$UrlAlias{$param}"; # close URLALIASFILE; last; } } } if (!$found) { # does nothing right now print ""; } } else { print ""; } # Url info title return 1; # -----> } 1; # Do not remove this line plugins/rawlog.pm000064400000011325152532065620010066 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # Rawlog AWStats plugin # This plugin adds a form in AWStats main page to allow users to see raw # content of current log files. A filter is also available. #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # $Revision: 1.16 $ - $Author: eldy $ - $Date: 2005/04/24 23:51:11 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES. # -----> 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="5.7"; my $PluginHooksFunctions="AddHTMLBodyHeader BuildFullHTMLOutput"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $MAXLINE /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_rawlog { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin rawlog: InitParams=$InitParams",1); if ($QueryString =~ /rawlog_maxlines=(\d+)/i) { $MAXLINE=&DecodeEncodedString("$1"); } else { $MAXLINE=5000; } # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNTION: AddHTMLBodyHeader_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code at beginning of BODY section. #----------------------------------------------------------------------------- sub AddHTMLBodyHeader_rawlog { # <----- # Show form only if option -staticlinks not used if (! $StaticLinks) { &_ShowForm(''); } return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNTION: BuildFullHTMLOutput_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to output an HTML page completely built by plugin instead # of AWStats output #----------------------------------------------------------------------------- sub BuildFullHTMLOutput_rawlog { # <----- my $Filter=''; if ($QueryString =~ /filterrawlog=([^&]+)/i) { $Filter=&DecodeEncodedString("$1"); } # A security check if ($QueryString =~ /logfile=/i) { print "
    Option logfile is not allowed while building rawlog output.
    "; return 0; } # Show form &_ShowForm($Filter); # Precompiled regex Filter to speed up scan if ($Filter) { $Filter=qr/$Filter/i; } print "
    \n"; # Show raws my $xml=($BuildReportFormat eq 'xhtml'); open(LOG,"$LogFile") || error("Couldn't open server log file \"$LogFile\" : $!"); binmode LOG; # Avoid premature EOF due to log files corrupted with \cZ or bin chars my $i=0; print "
    ";
    	while () {
    		chomp $_; $_ =~ s/\r//;
    		if ($Filter && $_ !~ /$Filter/o) { next; }
    		print ($xml?XMLEncode("$_"):"$_");
    		print "\n";
    		if (++$i >= $MAXLINE) { last; }
    	}
    	print "

    \n$i lines.
    "; return 1; # -----> } sub _ShowForm { my $Filter=shift||''; print "
    \n"; print "
    \n"; print "\n"; print "
    "; print "\n"; print "\n"; print "\n"; print "
    Show content of file '$LogFile' ($MAXLINE first lines):
    $Message[79]:       Max Number of Lines:       \n"; print ""; print "
    \n"; print "
    \n"; print "
    \n"; } 1; # Do not remove this line plugins/clusterinfo.pm000064400000007311152532065620011130 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # ClusterInfo AWStats plugin # This plugin allow you to add information on cluster chart from # a text file. Like full cluster hostname. # You must create a file called clusterinfo.configvalue.txt wich contains 2 # columns separated by a tab char, and store it in DirData directory. # First column is cluster number and second column is text you want to add. #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # $Revision: 1.1 $ - $Author: eldy $ - $Date: 2004/06/11 21:34:32 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES #if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } # -----> 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.2"; my $PluginHooksFunctions="ShowInfoCluster"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $clusterinfoloaded %ClusterInfo /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_clusterinfo { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin clusterinfo: InitParams=$InitParams",1); $clusterinfoloaded=0; %ClusterInfo=(); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoCluster_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to Cluster report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell"; # Parameters: Cluster number #----------------------------------------------------------------------------- sub ShowInfoCluster_clusterinfo { my $param="$_[0]"; # <----- my $filetoload=''; if ($param && $param ne '__title__' && ! $clusterinfoloaded) { # Load clusterinfo file if ($SiteConfig && open(CLUSTERINFOFILE,"$DirData/clusterinfo.$SiteConfig.txt")) { $filetoload="$DirData/clusterinfo.$SiteConfig.txt"; } elsif (open(CLUSTERINFOFILE,"$DirData/clusterinfo.txt")) { $filetoload="$DirData/clusterinfo.txt"; } else { error("Couldn't open ClusterInfo file \"$DirData/clusterinfo.txt\": $!"); } # This is the fastest way to load with regexp that I know %ClusterInfo = map(/^([^\s]+)\s+(.+)/o,); close CLUSTERINFOFILE; debug(" Plugin clusterinfo: ClusterInfo file loaded: ".(scalar keys %ClusterInfo)." entries found."); $clusterinfoloaded=1; } if ($param eq '__title__') { print "$Message[114]"; } elsif ($param) { print ""; if ($ClusterInfo{$param}) { print "$ClusterInfo{$param}"; } else { print " "; } # Undefined cluster info print ""; } else { print " "; } return 1; # -----> } 1; # Do not remove this line plugins/geoipfree.pm000064400000007405152532065620010544 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # GeoIpFree AWStats plugin # This plugin allow you to get AWStats country report with countries detected # from a Geographical database (GeoIP internal database) instead of domain # hostname suffix. #----------------------------------------------------------------------------- # Perl Required Modules: Geo::IPfree (version 0.2+) #----------------------------------------------------------------------------- # $Revision: 1.11 $ - $Author: eldy $ - $Date: 2004/05/21 21:11:52 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES push @INC, "${DIR}/plugins"; if (!eval ('require "Geo/IPfree.pm";')) { return $@?"Error: $@":"Error: Need Perl module Geo::IPfree"; } # -----> 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="5.5"; my $PluginHooksFunctions="GetCountryCodeByAddr GetCountryCodeByName"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ %TmpDomainLookup $gi /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_geoipfree { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin geoipfree: InitParams=$InitParams",1); %TmpDomainLookup=(); $gi = Geo::IPfree::new(); # $gi->Faster; # Do not enable Faster as the Memoize module is rarely available # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByName_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByName is called to translate a host name into a country name. #----------------------------------------------------------------------------- sub GetCountryCodeByName_geoipfree { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if (! $res) { ($res,undef)=$gi->LookUp($param); if ($res !~ /\w\w/) { $res='ip'; } else { $res=lc($res); } $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByName for $param: $res",5); } } elsif ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByName for $param: Already resolved to $res",5); } # -----> return $res; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByAddr is called to translate an ip into a country name. #----------------------------------------------------------------------------- sub GetCountryCodeByAddr_geoipfree { my $param="$_[0]"; # <----- my $res=$TmpDomainLookup{$param}||''; if (! $res) { ($res,undef)=$gi->LookUp($param); if ($res !~ /\w\w/) { $res='ip'; } else { $res=lc($res); } $TmpDomainLookup{$param}=$res; if ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByAddr for $param: $res",5); } } elsif ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByAddr for $param: Already resolved to $res",5); } # -----> return $res; } 1; # Do not remove this line # Internal IP address: # 10.x.x.x # 192.168.x.x plugins/hostinfo.pm000064400000016304152532065620010426 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # HostInfo AWStats plugin # This plugin allow you to add information on hosts, like whois fields. #----------------------------------------------------------------------------- # Perl Required Modules: XWhois #----------------------------------------------------------------------------- # $Revision: 1.17 $ - $Author: eldy $ - $Date: 2005/02/19 13:50:06 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES push @INC, "${DIR}/plugins"; if (!eval ('require "Net/XWhois.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::XWhois"; } if (!eval ('require "Digest/MD5.pm";')) { return $@?"Error: $@":"Error: Need Perl module Digest::MD5"; } # -----> 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.0"; my $PluginHooksFunctions="ShowInfoHost AddHTMLBodyHeader BuildFullHTMLOutput"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_hostinfo { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin hostinfo: InitParams=$InitParams",1); # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLBodyHeader_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code at beginning of BODY section. # Parameters: None #----------------------------------------------------------------------------- sub AddHTMLBodyHeader_hostinfo { # <----- my $WIDTHINFO=640; my $HEIGHTINFO=480; my $urlparam="pluginmode=hostinfo&config=$SiteConfig"; $urlparam.=($DirConfig?"&configdir=$DirConfig":""); print < function neww(a,b) { var wfeatures="directories=0,menubar=1,status=0,resizable=1,scrollbars=1,toolbar=0,width=$WIDTHINFO,height=$HEIGHTINFO,left=" + eval("(screen.width - $WIDTHINFO)/2") + ",top=" + eval("(screen.height - $HEIGHTINFO)/2"); EOF print "fen=window.open('".XMLEncode("$AWScript?$urlparam&host")."='+a+'".XMLEncode("&key")."='+b,'whois',wfeatures);\n"; print < EOF return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: ShowInfoHost_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to add additionnal columns to the Hosts report. # This function is called when building rows of the report (One call for each # row). So it allows you to add a column in report, for example with code : # print "This is a new cell for $param"; # Parameters: Host name or ip #----------------------------------------------------------------------------- sub ShowInfoHost_hostinfo { my $param="$_[0]"; # <----- if ($param eq '__title__') { print "$Message[114]"; } elsif ($param) { my $keyforwhois; if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address $keyforwhois=$param; } elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address $keyforwhois=$param; } else { # Hostname $param =~ /([-\w]+\.[-\w]+\.(?:au|uk|jp|nz))$/ or $param =~ /([-\w]+\.[-\w]+)$/; $keyforwhois=$1; } print ""; # if ($keyforwhois) { print "?"; } if ($keyforwhois) { print "?"; } else { print " " } print ""; } else { print " "; } return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNTION: BuildFullHTMLOutput_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to output an HTML page completely built by plugin instead # of AWStats output #----------------------------------------------------------------------------- sub BuildFullHTMLOutput_hostinfo { # <----- my $Host=''; if ($QueryString =~ /host=([^&]+)/i) { $Host=lc(&DecodeEncodedString("$1")); } my $ip=''; my $HostResolved=''; # my $regipv4=qr/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; # my $regipv6=qr/^[0-9A-F]*:/i; # if ($Host =~ /$regipv4/o) { $ip=4; } # elsif ($Host =~ /$regipv6/o) { $ip=6; } # if ($ip == 4) { # my $lookupresult=lc(gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET)); # This is very slow, may spend 20 seconds # if (! $lookupresult || $lookupresult =~ /$regipv4/o || ! IsAscii($lookupresult)) { # $HostResolved='*'; # } # else { # $HostResolved=$lookupresult; # } # if ($Debug) { debug(" Reverse DNS lookup for $Host done: $HostResolved",4); } # } if (! $ip) { $HostResolved=$Host; } if ($Debug) { debug(" Plugin hostinfo: DirData=$DirData Host=$Host HostResolved=$HostResolved ",4); } my $w = new Net::XWhois Verbose=>$Debug, Cache=>$DirData, NoCache=>0, Timeout=>10, Domain=>$HostResolved; print "
    \n"; if ($w && $w->response()) { &tab_head("Common Whois Fields",0,0,'whois'); print "Common field infoValue\n"; print "Name".($w->name())." "; print "Status".($w->status())." "; print "NameServers".($w->nameservers())." "; print "Registrant".($w->registrant())." "; print "Contact Admin".($w->contact_admin())." "; print "Contact Tech".($w->contact_tech())." "; print "Contact Billing".($w->contact_billing())." "; print "Contact Zone".($w->contact_zone())." "; print "Contact Emails".($w->contact_emails())." "; print "Contact Handles".($w->contact_handles())." "; print "Domain Handles".($w->domain_handles())." "; &tab_end; } &tab_head("Full Whois Field",0,0,'whois'); if ($w && $w->response()) { print "
    ".($w->response())."
    \n"; } else { print "
    The Whois command failed.
    Did the server running AWStats is allowed to send WhoIs queries (If a firewall is running, port 43 should be opened from inside to outside) ?

    \n"; } &tab_end; return 1; # -----> } 1; # Do not remove this line plugins/hashfiles.pm000064400000012342152532065620010541 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # HashFiles AWStats plugin # Allows AWStats to read/save its data file as native hash files. # This increase read andwrite files operations. #----------------------------------------------------------------------------- # Perl Required Modules: Storable #----------------------------------------------------------------------------- # $Revision: 1.12 $ - $Author: eldy $ - $Date: 2005/10/09 14:49:42 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES if (!eval ('require "Storable.pm";')) { return $@?"Error: $@":"Error: Need Perl module Storable"; } # -----> 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="5.1"; my $PluginHooksFunctions="SearchFile LoadCache SaveHash"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $PluginHashfilesUpToDate /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_hashfiles { my $InitParams=shift; # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS $PluginHashfilesUpToDate=1; # -----> my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNTION: SearchFile_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) #----------------------------------------------------------------------------- sub SearchFile_hashfiles { my ($searchdir,$dnscachefile,$filesuffix,$dnscacheext,$filetoload)=@_; # Get params sent by ref if (-f "${searchdir}$dnscachefile$filesuffix.hash") { my ($tmp1a,$tmp2a,$tmp3a,$tmp4a,$tmp5a,$tmp6a,$tmp7a,$tmp8a,$tmp9a,$datesource,$tmp10a,$tmp11a,$tmp12a) = stat("${searchdir}$dnscachefile$filesuffix$dnscacheext"); my ($tmp1b,$tmp2b,$tmp3b,$tmp4b,$tmp5b,$tmp6b,$tmp7b,$tmp8b,$tmp9b,$datehash,$tmp10b,$tmp11b,$tmp12b) = stat("${searchdir}$dnscachefile$filesuffix.hash"); if ($datesource && $datehash < $datesource) { $PluginHashfilesUpToDate=0; debug(" Plugin hashfiles: Hash file not up to date. Will use source file $filetoload instead."); } else { # There is no source file or there is and hash file is up to date. We can just load hash file $filetoload="${searchdir}$dnscachefile$filesuffix.hash"; } } elsif ($filetoload) { $PluginHashfilesUpToDate=0; debug(" Plugin hashfiles: Hash file not found. Will use source file $filetoload instead."); } # Change calling params $_[4]=$filetoload; } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: LoadCache_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) #----------------------------------------------------------------------------- sub LoadCache_hashfiles { my ($filetoload,$hashtoload)=@_; if ($filetoload =~ /\.hash$/) { # There is no source file or there is and hash file is up to date. We can just load hash file eval('%$hashtoload = %{ Storable::retrieve("$filetoload") };') || warning("Warning: Error while retrieving hashfile: $@"); } } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: SaveHash_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) #----------------------------------------------------------------------------- sub SaveHash_hashfiles { my ($filetosave,$hashtosave,$testifuptodate,$nbmaxofelemtosave,$nbofelemsaved)=@_; if (! $testifuptodate || ! $PluginHashfilesUpToDate) { $filetosave =~ s/(\.\w+)$//; $filetosave.=".hash"; debug(" Plugin hashfiles: Save data ".($nbmaxofelemtosave?"($nbmaxofelemtosave records max)":"(all records)")." into hash file $filetosave"); if (! $nbmaxofelemtosave || (scalar keys %$hashtosave <= $nbmaxofelemtosave)) { # Save all hash array unless ( eval('Storable::store(\%$hashtosave, "$filetosave");') ) { $_[4] = 0; warning("Warning: Error while storing hashfile: $@"); return; } $_[4]=scalar keys %$hashtosave; } else { debug(" Plugin hashfiles: We need to resize hash to save from ".(scalar keys %$hashtosave)." to $nbmaxofelemtosave"); # Save part of hash array my $counter=0; my %newhashtosave=(); foreach my $key (keys %$hashtosave) { $newhashtosave{$key}=$hashtosave->{$key}; if (++$counter >= $nbmaxofelemtosave) { last; } } unless ( eval('Storable::store(\%newhashtosave, "$filetosave");') ) { $_[4] = 0; warning("Warning: Error while storing hashfile: $@"); return; } $_[4]=scalar keys %newhashtosave; } $_[0]=$filetosave; } else { $_[4]=0; } } 1; # Do not remove this line plugins/tooltips.pm000064400000020024152532065620010444 0ustar00#!/usr/bin/perl #----------------------------------------------------------------------------- # Tooltips AWStats plugin # This plugin allow you to add some toolpus in AWStats HTML report pages. # The tooltip are in same language than the report (they are stored in the # awstats-tt-codelanguage.txt files in lang directory). #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # $Revision: 1.15 $ - $Author: eldy $ - $Date: 2006/07/29 18:20:49 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES. # -----> 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.1"; my $PluginHooksFunctions="AddHTMLStyles AddHTMLBodyHeader"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $TOOLTIPWIDTH /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_tooltips { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" Plugin tooltips: InitParams=$InitParams",1); $TOOLTIPON=1; $TOOLTIPWIDTH=380; # Width of tooltips # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: AddHTMLStyles_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML styles at beginning of BODY section. #----------------------------------------------------------------------------- sub AddHTMLStyles_tooltips { # <----- print "div { font: 12px 'Arial','Verdana','Helvetica', sans-serif; text-align: justify; }\n"; print ".CTooltip { position:absolute; top: 0px; left: 0px; z-index: 2; width: ${TOOLTIPWIDTH}px; visibility:hidden; font: 8pt 'MS Comic Sans','Arial',sans-serif; background-color: #FFFFE6; padding: 8px; border: 1px solid black; }\n"; return 1; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNTION: AddHTMLBodyHeader_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code at beginning of BODY section. #----------------------------------------------------------------------------- sub AddHTMLBodyHeader_tooltips { # <----- if ($FrameName ne 'mainleft') { # GET AND WRITE THE TOOLTIP STRINGS #--------------------------------------------------------------------- &_ReadAndOutputTooltipFile($Lang); # WRITE TOOLTIPS JAVASCRIPT CODE #--------------------------------------------------------------------- # Position .style.pixelLeft/.pixelHeight/.pixelWidth/.pixelTop IE OK Opera OK # .style.left/.height/.width/.top IE456 OK Netscape67 OK XHTML OK # document.getElementById IE456 OK Opera OK Netscape67 OK XHTML OK # document.body.offsetWidth|document.body.style.pixelWidth IE OK Opera OK Netscape OK XHTML KO Visible width of container # document.documentElement.offsetWidth XHTML OK Visible width of container # tooltipOBJ.offsetWidth|tooltipOBJ.style.pixelWidth IE OK Opera OK Netscape OK Width of an object # event.clientXY IE OK Opera OK Netscape KO XHTML KO Position of mouse # window.innerHeight IE OK Netscape OK Height of container # window.pageYOffset ? # document.body.scrollTop IE OK Opera OK Netscape OK XHTML KO Vertical position of scrollbar my $docwidth="document.body.offsetWidth"; my $doctop="document.body.scrollTop"; if ($BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml') { $docwidth="document.documentElement.offsetWidth"; $doctop="document.documentElement.scrollTop"; } print < function ShowTip(fArg) { var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']"); if (tooltipOBJ != null) { var tooltipLft = ($docwidth?$docwidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:$TOOLTIPWIDTH)) - 30; var tooltipTop = 10; if (navigator.appName == 'Netscape') { tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10); tooltipOBJ.style.top = tooltipTop+"px"; tooltipOBJ.style.left = tooltipLft+"px"; } else { tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10); tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10); EOF # Seul IE en HTML a besoin de code supplémentaire. IE en xhtml est OK if ($BuildReportFormat ne 'xhtml' && $BuildReportFormat ne 'xml') { print < tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) { tooltipTop = ($doctop?$doctop:document.body.offsetTop) + event.clientY + 20; } EOF } print < EOF } return 1; # -----> } #------------------------------------------------------------------------------ # Function: Get the tooltip texts for a specified language and write it # Parameters: LanguageId # Input: $DirLang $DIR # Output: Full tooltips text # Return: None #------------------------------------------------------------------------------ sub _ReadAndOutputTooltipFile { # Check lang files in common possible directories : # Windows and standard package: "$DIR/lang" (lang in same dir than awstats.pl) # Debian package : "/usr/share/awstats/lang" # Other possible directories : "./lang" my @PossibleLangDir=("$DirLang","${DIR}/lang","/usr/share/awstats/lang","./lang"); my $FileLang=''; my $logtype=lc($LogType ne 'S'?$LogType:'W'); foreach my $dir (@PossibleLangDir) { my $searchdir=$dir; if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } if (open(LANG,"${searchdir}tooltips_${logtype}/awstats-tt-$_[0].txt")) { $FileLang="${searchdir}tooltips_${logtype}/awstats-tt-$_[0].txt"; last; } } # If file not found, we try english if (! $FileLang) { foreach my $dir (@PossibleLangDir) { my $searchdir=$dir; if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } if (open(LANG,"${searchdir}tooltips_${logtype}/awstats-tt-en.txt")) { $FileLang="${searchdir}tooltips_${logtype}/awstats-tt-en.txt"; last; } } } if ($Debug) { debug(" Plugin tooltips: Call to Read_Language_Tooltip [FileLang=\"$FileLang\"]"); } if ($FileLang) { my $aws_PROG=ucfirst($PROG); my $aws_VisitTimeout = $VISITTIMEOUT/10000*60; my $aws_NbOfRobots = scalar keys %RobotsHashIDLib; my $aws_NbOfWorms = scalar @WormsSearchIDOrder; my $aws_NbOfSearchEngines = scalar keys %SearchEnginesHashLib; while () { if ($_ =~ /\\n":"]]>\n"); } else { print "//-->\n"; } print "\n"; } print "\n\n"; if ($FrameName ne 'index') { print "\n"; } } $HeaderHTMLSent++; } #------------------------------------------------------------------------------ # Function: Write on output end of HTML page # Parameters: 0|1 (0=no list plugins,1=list plugins) # Input: %HTMLOutput $HTMLEndSection $FrameName $BuildReportFormat # Output: None # Return: None #------------------------------------------------------------------------------ sub html_end { my $listplugins=shift||0; if (scalar keys %HTMLOutput) { # Call to plugins' function AddHTMLBodyFooter foreach my $pluginname (keys %{$PluginsLoaded{'AddHTMLBodyFooter'}}) { # my $function="AddHTMLBodyFooter_$pluginname()"; # eval("$function"); my $function="AddHTMLBodyFooter_$pluginname"; &$function(); } if ($FrameName ne 'index' && $FrameName ne 'mainleft') { print "$Center

    \n"; print ""; print "Advanced Web Statistics $VERSION - "; print $Message[169]." $PROG"; if ($listplugins) { my $atleastoneplugin=0; foreach my $pluginname (keys %{$PluginsLoaded{'init'}}) { if (! $atleastoneplugin) { $atleastoneplugin=1; print " ($Message[170]: "; } else { print ", "; } print "$pluginname"; } if ($atleastoneplugin) { print ")"; } } print "
    \n"; if ($HTMLEndSection) { print "
    \n$HTMLEndSection\n"; } } print "\n"; if ($FrameName ne 'index') { if ($FrameName ne 'mainleft' && $BuildReportFormat eq 'html') { print "
    \n"; } print "\n"; } print "\n"; # print "\n"; } } #------------------------------------------------------------------------------ # Function: Print on stdout tab header of a chart # Parameters: $title $tooltipnb [$width percentage of chart title] # Input: None # Output: None # Return: None #------------------------------------------------------------------------------ sub tab_head { my $title=shift; my $tooltipnb=shift; my $width=shift||70; my $class=shift; if ($width == 70 && $QueryString =~ /buildpdf/i) { print "\n"; } else { print "
    \n"; } if ($tooltipnb) { print ""; } else { print ""; } print "\n"; print "
    $title
    $title  
    \n"; if ($width == 70 && $QueryString =~ /buildpdf/i) { print "\n"; } else { print "
    \n"; } } #------------------------------------------------------------------------------ # Function: Print on stdout tab ender of a chart # Parameters: None # Input: None # Output: None # Return: None #------------------------------------------------------------------------------ sub tab_end { my $string=shift; print "
    "; if ($string) { print "$string
    \n"; } print "
    \n\n"; } #------------------------------------------------------------------------------ # Function: Write error message and exit # Parameters: $message $secondmessage $thirdmessage $donotshowsetupinfo # Input: $HeaderHTTPSent $HeaderHTMLSent %HTMLOutput $LogSeparator $LogFormat # Output: None # Return: None #------------------------------------------------------------------------------ sub error { my $message=shift||''; if (scalar keys %HTMLOutput) { $message =~ s/\/>/g; } my $secondmessage=shift||''; my $thirdmessage=shift||''; my $donotshowsetupinfo=shift||0; if (! $HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'}) { http_head(); } if (! $HeaderHTMLSent && scalar keys %HTMLOutput) { print "\n"; $HeaderHTMLSent=1; } if ($Debug) { debug("$message $secondmessage $thirdmessage",1); } my $tagbold=''; my $tagunbold=''; my $tagbr=''; my $tagfontred=''; my $tagfontgrey=''; my $tagunfont=''; if (scalar keys %HTMLOutput) { $tagbold=''; $tagunbold=''; $tagbr='
    '; $tagfontred=''; $tagfontgrey=''; $tagunfont=''; } if (! $ErrorMessages && $message =~ /^Format error$/i) { # Files seems to have bad format if (scalar keys %HTMLOutput) { print "

    \n"; } if ($message !~ $LogSeparator) { # Bad LogSeparator parameter print "${tagfontred}AWStats did not found the ${tagbold}LogSeparator${tagunbold} in your log records.${tagbr}${tagunfont}\n"; } else { # Bad LogFormat parameter print "AWStats did not find any valid log lines that match your ${tagbold}LogFormat${tagunbold} parameter, in the ${NbOfLinesForCorruptedLog}th first non commented lines read of your log.${tagbr}\n"; print "${tagfontred}Your log file ${tagbold}$thirdmessage${tagunbold} must have a bad format or ${tagbold}LogFormat${tagunbold} parameter setup does not match this format.${tagbr}${tagbr}${tagunfont}\n"; print "Your AWStats ${tagbold}LogFormat${tagunbold} parameter is:\n"; print "${tagbold}$LogFormat${tagunbold}${tagbr}\n"; print "This means each line in your web server log file need to have "; if ($LogFormat == 1) { print "${tagbold}\"combined log format\"${tagunbold} like this:${tagbr}\n"; print (scalar keys %HTMLOutput?"$tagfontgrey":""); print "111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"\n"; print (scalar keys %HTMLOutput?"$tagunfont${tagbr}${tagbr}\n":""); } if ($LogFormat == 2) { print "${tagbold}\"MSIE Extended W3C log format\"${tagunbold} like this:${tagbr}\n"; print (scalar keys %HTMLOutput?"$tagfontgrey":""); print "date time c-ip c-username cs-method cs-uri-sterm sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)\n"; print (scalar keys %HTMLOutput?"$tagunfont${tagbr}${tagbr}\n":""); } if ($LogFormat == 3) { print "${tagbold}\"WebStar native log format\"${tagunbold}${tagbr}\n"; } if ($LogFormat == 4) { print "${tagbold}\"common log format\"${tagunbold} like this:${tagbr}\n"; print (scalar keys %HTMLOutput?"$tagfontgrey":""); print "111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234\n"; print (scalar keys %HTMLOutput?"$tagunfont${tagbr}${tagbr}\n":""); } if ($LogFormat == 6) { print "${tagbold}\"Lotus Notes/Lotus Domino\"${tagunbold}${tagbr}\n"; print (scalar keys %HTMLOutput?"$tagfontgrey":""); print "111.22.33.44 - Firstname Middlename Lastname [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"\n"; print (scalar keys %HTMLOutput?"
    ${tagbr}${tagbr}\n":""); } if ($LogFormat !~ /^[1-6]$/) { print "the following personalized log format:${tagbr}\n"; print (scalar keys %HTMLOutput?"$tagfontgrey":""); print "$LogFormat\n"; print (scalar keys %HTMLOutput?"$tagunfont${tagbr}${tagbr}\n":""); } print "And this is an example of records AWStats found in your log file (the record number $NbOfLinesForCorruptedLog in your log):\n"; print (scalar keys %HTMLOutput?"
    $tagfontgrey":""); print "$secondmessage"; print (scalar keys %HTMLOutput?"$tagunfont${tagbr}${tagbr}":""); print "\n"; } #print "Note: If your $NbOfLinesForCorruptedLog first lines in your log files are wrong because of "; #print "a worm virus attack, you can increase the NbOfLinesForCorruptedLog parameter in config file.\n"; #print "\n"; } else { print (scalar keys %HTMLOutput?"
    $tagfontred\n":""); print ($ErrorMessages?"$ErrorMessages":"Error: $message"); print (scalar keys %HTMLOutput?"\n
    ":""); print "\n"; } if (! $ErrorMessages && ! $donotshowsetupinfo) { if ($message =~ /Couldn.t open config file/i) { my $dir=$DIR; if ($dir =~ /^\./) { $dir.='/../..'; } else { $dir =~ s/[\\\/]?wwwroot[\/\\]cgi-bin[\\\/]?//; } print "${tagbr}\n"; if ($ENV{'GATEWAY_INTERFACE'}) { print "- ${tagbold}Did you use the correct URL ?${tagunbold}${tagbr}\n"; print "Example: http://localhost/awstats/awstats.pl?config=mysite${tagbr}\n"; print "Example: http://127.0.0.1/cgi-bin/awstats.pl?config=mysite${tagbr}\n"; } else { print "- ${tagbold}Did you use correct config parameter ?${tagunbold}${tagbr}\n"; print "Example: If your config file is awstats.mysite.conf, use -config=mysite\n"; } print "- ${tagbold}Did you create your config file 'awstats.$SiteConfig.conf' ?${tagunbold}${tagbr}\n"; print "If not, you can run \"awstats_configure.pl\"\nfrom command line, or create it manually.${tagbr}\n"; print "${tagbr}\n"; } else { print "${tagbr}${tagbold}Setup (".($FileConfig?"'".$FileConfig."'":"Config")." file, web server or permissions) may be wrong.${tagunbold}${tagbr}\n"; } print "Check config file, permissions and AWStats documentation (in 'docs' directory).\n"; } # Remove lock if not a lock message if ($EnableLockForUpdate && $message !~ /lock file/) { &Lock_Update(0); } if (scalar keys %HTMLOutput) { print "\n"; } exit 1; } #------------------------------------------------------------------------------ # Function: Write a warning message # Parameters: $message # Input: $HeaderHTTPSent $HeaderHTMLSent $WarningMessage %HTMLOutput # Output: None # Return: None #------------------------------------------------------------------------------ sub warning { my $messagestring=shift; if ($Debug) { debug("$messagestring",1); } if ($WarningMessages) { if (! $HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'}) { http_head(); } if (! $HeaderHTMLSent) { html_head(); } if (scalar keys %HTMLOutput) { $messagestring =~ s/\n/\/g; print "$messagestring
    \n"; } else { print "$messagestring\n"; } } } #------------------------------------------------------------------------------ # Function: Write debug message and exit # Parameters: $string $level # Input: %HTMLOutput $Debug=required level $DEBUGFORCED=required level forced # Output: None # Return: None #------------------------------------------------------------------------------ sub debug { my $level = $_[1] || 1; if (! $HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'}) { http_head(); } # To send the HTTP header and see debug if ($level <= $DEBUGFORCED) { my $debugstring = $_[0]; if (! $DebugResetDone) { open(DEBUGFORCEDFILE,"debug.log"); close DEBUGFORCEDFILE; chmod 0666,"debug.log"; $DebugResetDone=1; } open(DEBUGFORCEDFILE,">>debug.log"); print DEBUGFORCEDFILE localtime(time)." - $$ - DEBUG $level - $debugstring\n"; close DEBUGFORCEDFILE; } if ($DebugMessages && $level <= $Debug) { my $debugstring = $_[0]; if (scalar keys %HTMLOutput) { $debugstring =~ s/^ /   /; $debugstring .= "
    "; } print localtime(time)." - DEBUG $level - $debugstring\n"; } } #------------------------------------------------------------------------------ # Function: Optimize an array removing duplicate entries # Parameters: @Array notcasesensitive=0|1 # Input: None # Output: None # Return: None #------------------------------------------------------------------------------ sub OptimizeArray { my $array=shift; my @arrayunreg=map{if (/\(\?[-\w]*:(.*)\)/) { $1 } } @$array; my $notcasesensitive=shift; my $searchlist=0; if ($Debug) { debug("OptimizeArray (notcasesensitive=$notcasesensitive)",4); } while ($searchlist>-1 && @arrayunreg) { my $elemtoremove=-1; OPTIMIZELOOP: foreach my $i ($searchlist..(scalar @arrayunreg)-1) { # Search if $i elem is already treated by another elem foreach my $j (0..(scalar @arrayunreg)-1) { if ($i == $j) { next; } my $parami=$notcasesensitive?lc($arrayunreg[$i]):$arrayunreg[$i]; my $paramj=$notcasesensitive?lc($arrayunreg[$j]):$arrayunreg[$j]; if ($Debug) { debug(" Compare $i ($parami) to $j ($paramj)",4); } if (index($parami,$paramj)>-1) { if ($Debug) { debug(" Elem $i ($arrayunreg[$i]) already treated with elem $j ($arrayunreg[$j])",4); } $elemtoremove=$i; last OPTIMIZELOOP; } } } if ($elemtoremove > -1) { if ($Debug) { debug(" Remove elem $elemtoremove - $arrayunreg[$elemtoremove]",4); } splice @arrayunreg, $elemtoremove, 1; $searchlist=$elemtoremove; } else { $searchlist=-1; } } if ($notcasesensitive) { return map{qr/$_/i} @arrayunreg; } return map{qr/$_/} @arrayunreg; } #------------------------------------------------------------------------------ # Function: Check if parameter is in SkipDNSLookupFor array # Parameters: ip @SkipDNSLookupFor (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub SkipDNSLookup { foreach (@SkipDNSLookupFor) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @SkipDNSLookupFor } #------------------------------------------------------------------------------ # Function: Check if parameter is in SkipHosts array # Parameters: host @SkipHosts (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub SkipHost { foreach (@SkipHosts) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @SkipHosts } #------------------------------------------------------------------------------ # Function: Check if parameter is in SkipReferrers array # Parameters: host @SkipReferrers (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub SkipReferrer { foreach (@SkipReferrers) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @SkipReferrers } #------------------------------------------------------------------------------ # Function: Check if parameter is in SkipUserAgents array # Parameters: useragent @SkipUserAgents (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub SkipUserAgent { foreach (@SkipUserAgents) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @SkipUserAgent } #------------------------------------------------------------------------------ # Function: Check if parameter is in SkipFiles array # Parameters: url @SkipFiles (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub SkipFile { foreach (@SkipFiles) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @SkipFiles } #------------------------------------------------------------------------------ # Function: Check if parameter is in OnlyHosts array # Parameters: host @OnlyHosts (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub OnlyHost { foreach (@OnlyHosts) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @OnlyHosts } #------------------------------------------------------------------------------ # Function: Check if parameter is in OnlyUsers array # Parameters: host @OnlyUsers (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub OnlyUser{ foreach (@OnlyUsers) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @OnlyUsers } #------------------------------------------------------------------------------ # Function: Check if parameter is in OnlyUserAgents array # Parameters: useragent @OnlyUserAgents (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub OnlyUserAgent { foreach (@OnlyUserAgents) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @OnlyUserAgents } #------------------------------------------------------------------------------ # Function: Check if parameter is in NotPageFiles array # Parameters: url @NotPageFiles (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub NotPageFile { foreach (@NotPageFiles) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @NotPageFiles } #------------------------------------------------------------------------------ # Function: Check if parameter is in OnlyFiles array # Parameters: url @OnlyFiles (a NOT case sensitive precompiled regex array) # Return: 0 Not found, 1 Found #------------------------------------------------------------------------------ sub OnlyFile { foreach (@OnlyFiles) { if ($_[0] =~ /$_/) { return 1; } } 0; # Not in @OnlyFiles } #------------------------------------------------------------------------------ # Function: Return day of week of a day # Parameters: $day $month $year # Return: 0-6 #------------------------------------------------------------------------------ sub DayOfWeek { my ($day, $month, $year) = @_; if ($Debug) { debug("DayOfWeek for $day $month $year",4); } if ($month < 3) { $month += 10; $year--; } else { $month -= 2; } my $cent = sprintf("%1i",($year/100)); my $y = ($year % 100); my $dw = (sprintf("%1i",(2.6*$month)-0.2) + $day + $y + sprintf("%1i",($y/4)) + sprintf("%1i",($cent/4)) - (2*$cent)) % 7; $dw += 7 if ($dw<0); if ($Debug) { debug(" is $dw",4); } return $dw; } #------------------------------------------------------------------------------ # Function: Return 1 if a date exists # Parameters: $day $month $year # Return: 1 if date exists else 0 #------------------------------------------------------------------------------ sub DateIsValid { my ($day, $month, $year) = @_; if ($Debug) { debug("DateIsValid for $day $month $year",4); } if ($day < 1) { return 0; } if ($day > 31) { return 0; } if ($month==4 || $month==6 || $month==9 || $month==11) { if ($day > 30) { return 0; } } elsif ($month==2) { my $leapyear=($year%4==0?1:0); # A leap year every 4 years if ($year%100==0 && $year%400!=0) { $leapyear=0; } # Except if year is 100x and not 400x if ($day > (28+$leapyear)) { return 0; } } return 1; } #------------------------------------------------------------------------------ # Function: Return string of visit duration # Parameters: $starttime $endtime # Input: None # Output: None # Return: A string that identify the visit duration range #------------------------------------------------------------------------------ sub GetSessionRange { my $starttime = my $endtime; if (shift =~ /$regdate/o) { $starttime = Time::Local::timelocal($6,$5,$4,$3,$2-1,$1); } if (shift =~ /$regdate/o) { $endtime = Time::Local::timelocal($6,$5,$4,$3,$2-1,$1); } my $delay=$endtime-$starttime; if ($Debug) { debug("GetSessionRange $endtime - $starttime = $delay",4); } if ($delay <= 30) { return $SessionsRange[0]; } if ($delay <= 120) { return $SessionsRange[1]; } if ($delay <= 300) { return $SessionsRange[2]; } if ($delay <= 900) { return $SessionsRange[3]; } if ($delay <= 1800) { return $SessionsRange[4]; } if ($delay <= 3600) { return $SessionsRange[5]; } return $SessionsRange[6]; } #------------------------------------------------------------------------------ # Function: Read config file # Parameters: None or configdir to scan # Input: $DIR $PROG $SiteConfig # Output: Global variables # Return: - #------------------------------------------------------------------------------ sub Read_Config { # Check config file in common possible directories : # Windows : "$DIR" (same dir than awstats.pl) # Standard, Mandrake and Debian package : "/etc/awstats" # Other possible directories : "/usr/local/etc/awstats", "/etc" # FHS standard, Suse package : "/etc/opt/awstats" my $configdir=shift; my @PossibleConfigDir=(); if ($configdir) { # If from CGI, overwriting of configdir is only possible if AWSTATS_ENABLE_CONFIG_DIR defined #if ($ENV{'GATEWAY_INTERFACE'} && ! $ENV{"AWSTATS_ENABLE_CONFIG_DIR"}) #{ # error("Sorry, to allow overwriting of configdir parameter from an AWStats CGI usage, environment variable AWSTATS_ENABLE_CONFIG_DIR must be set to 1"); #} #else #{ @PossibleConfigDir=("$configdir"); #} } else { @PossibleConfigDir=("$DIR","/etc/awstats","/usr/local/etc/awstats","/etc","/etc/opt/awstats"); } # Open config file $FileConfig=$FileSuffix=''; foreach (@PossibleConfigDir) { my $searchdir=$_; if ($searchdir && $searchdir !~ /[\\\/]$/) { $searchdir .= "/"; } if (open(CONFIG,"$searchdir$PROG.$SiteConfig.conf")) { $FileConfig="$searchdir$PROG.$SiteConfig.conf"; $FileSuffix=".$SiteConfig"; last; } if (open(CONFIG,"$searchdir$PROG.conf")) { $FileConfig="$searchdir$PROG.conf"; $FileSuffix=''; last; } } if (! $FileConfig) { error("Couldn't open config file \"$PROG.$SiteConfig.conf\" nor \"$PROG.conf\" after searching in path \"".join(',',@PossibleConfigDir)."\": $!"); } # Analyze config file content and close it &Parse_Config( *CONFIG , 1 , $FileConfig); close CONFIG; # If parameter NotPageList not found, init for backward compatibility if (! $FoundNotPageList) { %NotPageList=('css'=>1,'js'=>1,'class'=>1,'gif'=>1,'jpg'=>1,'jpeg'=>1,'png'=>1,'bmp'=>1,'ico'=>1,'swf'=>1); } # If parameter ValidHTTPCodes empty, init for backward compatibility if (! scalar keys %ValidHTTPCodes) { $ValidHTTPCodes{"200"}=$ValidHTTPCodes{"304"}=1; } # If parameter ValidSMTPCodes empty, init for backward compatibility if (! scalar keys %ValidSMTPCodes) { $ValidSMTPCodes{"1"}=$ValidSMTPCodes{"250"}=1; } } #------------------------------------------------------------------------------ # Function: Parse content of a config file # Parameters: opened file handle, depth level, file name # Input: - # Output: Global variables # Return: - #------------------------------------------------------------------------------ sub Parse_Config { my ( $confighandle ) = $_[0]; my $level = $_[1]; my $configFile = $_[2]; my $versionnum=0; my $conflinenb=0; if ($level > 10) { error("$PROG can't read down more than 10 level of includes. Check that no 'included' config files include their parent config file (this cause infinite loop)."); } while (<$confighandle>) { chomp $_; s/\r//; $conflinenb++; # Extract version from first line if (! $versionnum && $_ =~ /^# AWSTATS CONFIGURE FILE (\d+).(\d+)/i) { $versionnum=($1*1000)+$2; #if ($Debug) { debug(" Configure file version is $versionnum",1); } next; } if ($_ =~ /^\s*$/) { next; } # Check includes if ($_ =~ /^Include "([^\"]+)"/ || $_ =~ /^#include "([^\"]+)"/) { # #include kept for backward compatibility my $includeFile = $1; # Expand __var__ by values while ($includeFile =~ /__([^\s_]+(?:_[^\s_]+)*)__/) { my $var=$1; $includeFile =~ s/__${var}__/$ENV{$var}/g; } if ($Debug) { debug("Found an include : $includeFile",2); } if ( $includeFile !~ /^[\\\/]/ ) { # Correct relative include files if ($FileConfig =~ /^(.*[\\\/])[^\\\/]*$/) { $includeFile = "$1$includeFile"; } } if ($level > 1) { warning("Warning: Perl versions before 5.6 cannot handle nested includes"); next; } if ( open( CONFIG_INCLUDE, $includeFile ) ) { &Parse_Config( *CONFIG_INCLUDE , $level+1, $includeFile); close( CONFIG_INCLUDE ); } else { error("Could not open include file: $includeFile" ); } next; } # Remove comments if ($_ =~ /^\s*#/) { next; } $_ =~ s/\s#.*$//; # Extract param and value my ($param,$value)=split(/=/,$_,2); $param =~ s/^\s+//; $param =~ s/\s+$//; # If not a param=value, try with next line if (! $param) { warning("Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored."); next; } if (! defined $value) { warning("Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored."); next; } if ($value) { $value =~ s/^\s+//; $value =~ s/\s+$//; $value =~ s/^\"//; $value =~ s/\";?$//; # Replace __MONENV__ with value of environnement variable MONENV # Must be able to replace __VAR_1____VAR_2__ while ($value =~ /__([^\s_]+(?:_[^\s_]+)*)__/) { my $var=$1; $value =~ s/__${var}__/$ENV{$var}/g; } } # Initialize parameter for (param,value) if ($param =~ /^LogFile/) { if ($QueryString !~ /logfile=([^\s&]+)/i) { $LogFile=$value; } next; } if ($param =~ /^DirIcons/) { if ($QueryString !~ /diricons=([^\s&]+)/i) { $DirIcons=$value; } next; } if ($param =~ /^SiteDomain/) { # No regex test as SiteDomain is always exact value $SiteDomain=$value; next; } if ($param =~ /^HostAliases/) { @HostAliases=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ s/^\@//) { # If list of hostaliases in a file open(DATAFILE,"<$elem") || error("Failed to open file '$elem' declared in HostAliases parameter"); my @val=map(/^(.*)$/i,); push @HostAliases, map{qr/^$_$/i} @val; close(DATAFILE); } else { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @HostAliases, qr/$elem/i; } } } next; } # Special optional setup params if ($param =~ /^SkipDNSLookupFor/) { @SkipDNSLookupFor=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @SkipDNSLookupFor, qr/$elem/i; } } next; } if ($param =~ /^AllowAccessFromWebToFollowingAuthenticatedUsers/) { @AllowAccessFromWebToFollowingAuthenticatedUsers=(); foreach (split(/\s+/,$value)) { push @AllowAccessFromWebToFollowingAuthenticatedUsers,$_; } next; } if ($param =~ /^DefaultFile/) { @DefaultFile=(); foreach my $elem (split(/\s+/,$value)) { # No REGEX for this option #if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } #else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @DefaultFile,$elem; } } next; } if ($param =~ /^SkipHosts/) { @SkipHosts=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @SkipHosts, qr/$elem/i; } } next; } if ($param =~ /^SkipReferrersBlackList/ && $value) { open (BLACKLIST, "<$value") || die "Failed to open blacklist: $!\n"; while () { chomp; my $elem = $_; $elem =~ s/ //; $elem =~ s/\#.*//; if ($elem) { push @SkipReferrers, qr/$elem/i; } } next; close (BLACKLIST); } if ($param =~ /^SkipUserAgents/) { @SkipUserAgents=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @SkipUserAgents, qr/$elem/i; } } next; } if ($param =~ /^SkipFiles/) { @SkipFiles=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @SkipFiles, qr/$elem/i; } } next; } if ($param =~ /^OnlyHosts/) { @OnlyHosts=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @OnlyHosts, qr/$elem/i; } } next; } if ($param =~ /^OnlyUsers/) { @OnlyUsers=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @OnlyUsers, qr/$elem/i; } } next; } if ($param =~ /^OnlyUserAgents/) { @OnlyUserAgents=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @OnlyUserAgents, qr/$elem/i; } } next; } if ($param =~ /^OnlyFiles/) { @OnlyFiles=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @OnlyFiles, qr/$elem/i; } } next; } if ($param =~ /^NotPageFiles/) { @NotPageFiles=(); foreach my $elem (split(/\s+/,$value)) { if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } else { $elem='^'.quotemeta($elem).'$'; } if ($elem) { push @NotPageFiles, qr/$elem/i; } } next; } if ($param =~ /^NotPageList/) { %NotPageList=(); foreach (split(/\s+/,$value)) { $NotPageList{$_}=1; } $FoundNotPageList=1; next; } if ($param =~ /^ValidHTTPCodes/) { %ValidHTTPCodes=(); foreach (split(/\s+/,$value)) { $ValidHTTPCodes{$_}=1; } next; } if ($param =~ /^ValidSMTPCodes/) { %ValidSMTPCodes=(); foreach (split(/\s+/,$value)) { $ValidSMTPCodes{$_}=1; } next; } if ($param =~ /^URLWithQueryWithOnlyFollowingParameters$/) { @URLWithQueryWithOnly=split(/\s+/,$value); next; } if ($param =~ /^URLWithQueryWithoutFollowingParameters$/) { @URLWithQueryWithout=split(/\s+/,$value); next; } # Extra parameters if ($param =~ /^ExtraSectionName(\d+)/) { $ExtraName[$1]=$value; next; } if ($param =~ /^ExtraSectionCodeFilter(\d+)/) { @{$ExtraCodeFilter[$1]}=split(/\s+/,$value); next; } if ($param =~ /^ExtraSectionCondition(\d+)/) { $ExtraCondition[$1]=$value; next; } if ($param =~ /^ExtraSectionStatTypes(\d+)/) { $ExtraStatTypes[$1]=$value; next; } if ($param =~ /^ExtraSectionFirstColumnTitle(\d+)/) { $ExtraFirstColumnTitle[$1]=$value; next; } if ($param =~ /^ExtraSectionFirstColumnValues(\d+)/) { $ExtraFirstColumnValues[$1]=$value; next; } if ($param =~ /^ExtraSectionFirstColumnFunction(\d+)/) { $ExtraFirstColumnFunction[$1]=$value; next; } if ($param =~ /^ExtraSectionFirstColumnFormat(\d+)/) { $ExtraFirstColumnFormat[$1]=$value; next; } if ($param =~ /^ExtraSectionAddAverageRow(\d+)/) { $ExtraAddAverageRow[$1]=$value; next; } if ($param =~ /^ExtraSectionAddSumRow(\d+)/) { $ExtraAddSumRow[$1]=$value; next; } if ($param =~ /^MaxNbOfExtra(\d+)/) { $MaxNbOfExtra[$1]=$value; next; } if ($param =~ /^MinHitExtra(\d+)/) { $MinHitExtra[$1]=$value; next; } # Plugins if ($param =~ /^LoadPlugin/) { push @PluginsToLoad, $value; next; } # Other parameter checks we need to put after MaxNbOfExtra and MinHitExtra if ($param =~ /^MaxNbOf(\w+)/) { $MaxNbOf{$1}=$value; next; } if ($param =~ /^MinHit(\w+)/) { $MinHit{$1}=$value; next; } # Check if this is a known parameter # if (! $ConfOk{$param}) { error("Unknown config parameter '$param' found line $conflinenb in file \"configFile\""); } # If parameters was not found previously, defined variable with name of param to value $$param=$value; } if ($Debug) { debug("Config file read was \"$configFile\" (level $level)"); } } #------------------------------------------------------------------------------ # Function: Load the reference databases # Parameters: List of files to load # Input: $DIR # Output: Arrays and Hash tables are defined # Return: - #------------------------------------------------------------------------------ sub Read_Ref_Data { # Check lib files in common possible directories : # Windows and standard package: "$DIR/lib" (lib in same dir than awstats.pl) # Debian package: "/usr/share/awstats/lib" my @PossibleLibDir=("$DIR/lib","/usr/share/awstats/lib"); my %FilePath=(); my %DirAddedInINC=(); my @FileListToLoad=(); while (my $file=shift) { push @FileListToLoad, "$file.pm"; } if ($Debug) { debug("Call to Read_Ref_Data with files to load: ".(join(',',@FileListToLoad))); } foreach my $file (@FileListToLoad) { foreach my $dir (@PossibleLibDir) { my $searchdir=$dir; if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } if (! $FilePath{$file}) { # To not load twice same file in different path if (-s "${searchdir}${file}") { $FilePath{$file}="${searchdir}${file}"; if ($Debug) { debug("Call to Read_Ref_Data [FilePath{$file}=\"$FilePath{$file}\"]"); } # Note: cygwin perl 5.8 need a push + require file if (! $DirAddedInINC{"$dir"}) { push @INC, "$dir"; $DirAddedInINC{"$dir"}=1; } my $loadret=require "$file"; #my $loadret=(require "$FilePath{$file}"||require "${file}"); } } } if (! $FilePath{$file}) { my $filetext=$file; $filetext =~ s/\.pm$//; $filetext =~ s/_/ /g; warning("Warning: Can't read file \"$file\" ($filetext detection will not work correctly).\nCheck if file is in \"".($PossibleLibDir[0])."\" directory and is readable."); } } # Sanity check (if loaded) if ((scalar keys %OSHashID) && @OSSearchIDOrder != scalar keys %OSHashID) { error("Not same number of records of OSSearchIDOrder (".(@OSSearchIDOrder)." entries) and OSHashID (".(scalar keys %OSHashID)." entries) in OS database. Check your file ".$FilePath{"operating_systems.pm"}); } if ((scalar keys %SearchEnginesHashID) && (@SearchEnginesSearchIDOrder_list1+@SearchEnginesSearchIDOrder_list2+@SearchEnginesSearchIDOrder_listgen) != scalar keys %SearchEnginesHashID) { error("Not same number of records of SearchEnginesSearchIDOrder_listx (total is ".(@SearchEnginesSearchIDOrder_list1+@SearchEnginesSearchIDOrder_list2+@SearchEnginesSearchIDOrder_listgen)." entries) and SearchEnginesHashID (".(scalar keys %SearchEnginesHashID)." entries) in Search Engines database. Check your file ".$FilePath{"search_engines.pm"}." is up to date."); } if ((scalar keys %BrowsersHashIDLib) && @BrowsersSearchIDOrder != (scalar keys %BrowsersHashIDLib) - 4) { error("Not same number of records of BrowsersSearchIDOrder (".(@BrowsersSearchIDOrder)." entries) and BrowsersHashIDLib (".((scalar keys %BrowsersHashIDLib) - 4)." entries without msie,netscape,firefox,svn) in Browsers database. May be you updated AWStats without updating browsers.pm file or you made changed into browsers.pm not correctly. Check your file ".$FilePath{"browsers.pm"}." is up to date."); } if ((scalar keys %RobotsHashIDLib) && (@RobotsSearchIDOrder_list1+@RobotsSearchIDOrder_list2+@RobotsSearchIDOrder_listgen) != (scalar keys %RobotsHashIDLib) - 1) { error("Not same number of records of RobotsSearchIDOrder_listx (total is ".(@RobotsSearchIDOrder_list1+@RobotsSearchIDOrder_list2+@RobotsSearchIDOrder_listgen)." entries) and RobotsHashIDLib (".((scalar keys %RobotsHashIDLib) - 1)." entries without 'unknown') in Robots database. Check your file ".$FilePath{"robots.pm"}." is up to date."); } } #------------------------------------------------------------------------------ # Function: Get the messages for a specified language # Parameters: LanguageId # Input: $DirLang $DIR # Output: $Message table is defined in memory # Return: None #------------------------------------------------------------------------------ sub Read_Language_Data { # Check lang files in common possible directories : # Windows and standard package: "$DIR/lang" (lang in same dir than awstats.pl) # Debian package : "/usr/share/awstats/lang" my @PossibleLangDir=("$DirLang","$DIR/lang","/usr/share/awstats/lang"); my $FileLang=''; foreach (@PossibleLangDir) { my $searchdir=$_; if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } if (open(LANG,"${searchdir}awstats-$_[0].txt")) { $FileLang="${searchdir}awstats-$_[0].txt"; last; } } # If file not found, we try english if (! $FileLang) { foreach (@PossibleLangDir) { my $searchdir=$_; if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } if (open(LANG,"${searchdir}awstats-en.txt")) { $FileLang="${searchdir}awstats-en.txt"; last; } } } if ($Debug) { debug("Call to Read_Language_Data [FileLang=\"$FileLang\"]"); } if ($FileLang) { my $i = 0; binmode LANG; # Might avoid 'Malformed UTF-8 errors' my $cregcode=qr/^PageCode=[\t\s\"\']*([\w-]+)/i; my $cregdir=qr/^PageDir=[\t\s\"\']*([\w-]+)/i; my $cregmessage=qr/^Message\d+=/i; while () { chomp $_; s/\r//; if ($_ =~ /$cregcode/o) { $PageCode = $1; } if ($_ =~ /$cregdir/o) { $PageDir = $1; } if ($_ =~ s/$cregmessage//o) { $_ =~ s/^#.*//; # Remove comments $_ =~ s/\s+#.*//; # Remove comments $_ =~ tr/\t / /s; # Change all blanks into " " $_ =~ s/^\s+//; $_ =~ s/\s+$//; $_ =~ s/^\"//; $_ =~ s/\"$//; $Message[$i] = $_; $i++; } } close(LANG); } else { warning("Warning: Can't find language files for \"$_[0]\". English will be used."); } # Some language string changes if ($LogType eq 'M') { # For mail $Message[8]=$Message[151]; $Message[9]=$Message[152]; $Message[57]=$Message[149]; $Message[75]=$Message[150]; } if ($LogType eq 'F') { # For web } } #------------------------------------------------------------------------------ # Function: Substitute date tags in a string by value # Parameters: String # Input: All global variables # Output: Change on some global variables # Return: String #------------------------------------------------------------------------------ sub Substitute_Tags { my $SourceString=shift; if ($Debug) { debug("Call to Substitute_Tags on $SourceString"); } my %MonthNumLibEn = ("01","Jan","02","Feb","03","Mar","04","Apr","05","May","06","Jun","07","Jul","08","Aug","09","Sep","10","Oct","11","Nov","12","Dec"); while ($SourceString =~ /%([ymdhwYMDHWNSO]+)-(\(\d+\)|\d+)/) { # Accept tag %xx-dd and %xx-(dd) my $timetag="$1"; my $timephase=quotemeta("$2"); my $timephasenb="$2"; $timephasenb=~s/[^\d]//g; if ($Debug) { debug(" Found a time tag '$timetag' with a phase of '$timephasenb' hour in log file name",1); } # Get older time my ($oldersec,$oldermin,$olderhour,$olderday,$oldermonth,$olderyear,$olderwday,$olderyday) = localtime($starttime-($timephasenb*3600)); my $olderweekofmonth=int($olderday/7); my $olderweekofyear=int(($olderyday-1+6-($olderwday==0?6:$olderwday-1))/7)+1; if ($olderweekofyear > 52) { $olderweekofyear = 1; } my $olderdaymod=$olderday%7; $olderwday++; my $olderns=Time::Local::timegm(0,0,0,$olderday,$oldermonth,$olderyear); if ($olderdaymod <= $olderwday) { if (($olderwday != 7) || ($olderdaymod != 0)) { $olderweekofmonth=$olderweekofmonth+1; } } if ($olderdaymod > $olderwday) { $olderweekofmonth=$olderweekofmonth+2; } # Change format of time variables $olderweekofmonth = "0$olderweekofmonth"; if ($olderweekofyear < 10) { $olderweekofyear = "0$olderweekofyear"; } if ($olderyear < 100) { $olderyear+=2000; } else { $olderyear+=1900; } my $oldersmallyear=$olderyear;$oldersmallyear =~ s/^..//; if (++$oldermonth < 10) { $oldermonth = "0$oldermonth"; } if ($olderday < 10) { $olderday = "0$olderday"; } if ($olderhour < 10) { $olderhour = "0$olderhour"; } if ($oldermin < 10) { $oldermin = "0$oldermin"; } if ($oldersec < 10) { $oldersec = "0$oldersec"; } # Replace tag with new value if ($timetag eq 'YYYY') { $SourceString =~ s/%YYYY-$timephase/$olderyear/ig; next; } if ($timetag eq 'YY') { $SourceString =~ s/%YY-$timephase/$oldersmallyear/ig; next; } if ($timetag eq 'MM') { $SourceString =~ s/%MM-$timephase/$oldermonth/ig; next; } if ($timetag eq 'MO') { $SourceString =~ s/%MO-$timephase/$MonthNumLibEn{$oldermonth}/ig; next; } if ($timetag eq 'DD') { $SourceString =~ s/%DD-$timephase/$olderday/ig; next; } if ($timetag eq 'HH') { $SourceString =~ s/%HH-$timephase/$olderhour/ig; next; } if ($timetag eq 'NS') { $SourceString =~ s/%NS-$timephase/$olderns/ig; next; } if ($timetag eq 'WM') { $SourceString =~ s/%WM-$timephase/$olderweekofmonth/g; next; } if ($timetag eq 'Wm') { my $olderweekofmonth0=$olderweekofmonth-1; $SourceString =~ s/%Wm-$timephase/$olderweekofmonth0/g; next; } if ($timetag eq 'WY') { $SourceString =~ s/%WY-$timephase/$olderweekofyear/g; next; } if ($timetag eq 'Wy') { my $olderweekofyear0=sprintf("%02d",$olderweekofyear-1); $SourceString =~ s/%Wy-$timephase/$olderweekofyear0/g; next; } if ($timetag eq 'DW') { $SourceString =~ s/%DW-$timephase/$olderwday/g; next; } if ($timetag eq 'Dw') { my $olderwday0=$olderwday-1; $SourceString =~ s/%Dw-$timephase/$olderwday0/g; next; } # If unknown tag error("Unknown tag '\%$timetag' in parameter."); } # Replace %YYYY %YY %MM %DD %HH with current value. Kept for backward compatibility. $SourceString =~ s/%YYYY/$nowyear/ig; $SourceString =~ s/%YY/$nowsmallyear/ig; $SourceString =~ s/%MM/$nowmonth/ig; $SourceString =~ s/%MO/$MonthNumLibEn{$nowmonth}/ig; $SourceString =~ s/%DD/$nowday/ig; $SourceString =~ s/%HH/$nowhour/ig; $SourceString =~ s/%NS/$nowns/ig; $SourceString =~ s/%WM/$nowweekofmonth/g; my $nowweekofmonth0=$nowweekofmonth-1; $SourceString =~ s/%Wm/$nowweekofmonth0/g; $SourceString =~ s/%WY/$nowweekofyear/g; my $nowweekofyear0=$nowweekofyear-1; $SourceString =~ s/%Wy/$nowweekofyear0/g; $SourceString =~ s/%DW/$nowwday/g; my $nowwday0=$nowwday-1; $SourceString =~ s/%Dw/$nowwday0/g; return $SourceString; } #------------------------------------------------------------------------------ # Function: Check if all parameters are correctly defined. If not set them to default. # Parameters: None # Input: All global variables # Output: Change on some global variables # Return: None #------------------------------------------------------------------------------ sub Check_Config { if ($Debug) { debug("Call to Check_Config"); } # Show initial values of main parameters before check if ($Debug) { debug(" LogFile='$LogFile'",2); debug(" LogType='$LogType'",2); debug(" LogFormat='$LogFormat'",2); debug(" LogSeparator='$LogSeparator'",2); debug(" DNSLookup='$DNSLookup'",2); debug(" DirData='$DirData'",2); debug(" DirCgi='$DirCgi'",2); debug(" DirIcons='$DirIcons'",2); debug(" NotPageList ".(join(',',keys %NotPageList)),2); debug(" ValidHTTPCodes ".(join(',',keys %ValidHTTPCodes)),2); debug(" ValidSMTPCodes ".(join(',',keys %ValidSMTPCodes)),2); debug(" UseFramesWhenCGI=$UseFramesWhenCGI",2); debug(" BuildReportFormat=$BuildReportFormat",2); debug(" BuildHistoryFormat=$BuildHistoryFormat",2); debug(" URLWithQueryWithOnlyFollowingParameters=".(join(',',@URLWithQueryWithOnly)),2); debug(" URLWithQueryWithoutFollowingParameters=".(join(',',@URLWithQueryWithout)),2); } # Main section $LogFile=&Substitute_Tags($LogFile); if (! $LogFile) { error("LogFile parameter is not defined in config/domain file"); } if ($LogType !~ /[WSMF]/i) { $LogType='W'; } $LogFormat =~ s/\\//g; if (! $LogFormat) { error("LogFormat parameter is not defined in config/domain file"); } if ($LogFormat =~ /^\d$/ && $LogFormat !~ /[1-6]/) { error("LogFormat parameter is wrong in config/domain file. Value is '$LogFormat' (should be 1,2,3,4,5 or a 'personalized AWStats log format string')"); } $LogSeparator||="\\s"; $DirData||='.'; $DirCgi||='/cgi-bin'; $DirIcons||='/icon'; if ($DNSLookup !~ /[0-2]/) { error("DNSLookup parameter is wrong in config/domain file. Value is '$DNSLookup' (should be 0,1 or 2)"); } if (! $SiteDomain) { error("SiteDomain parameter not defined in your config/domain file. You must edit it for using this version of AWStats."); } if ($AllowToUpdateStatsFromBrowser !~ /[0-1]/) { $AllowToUpdateStatsFromBrowser=0; } if ($AllowFullYearView !~ /[0-3]/) { $AllowFullYearView=2; } # Optional setup section if (! $SectionsToBeSaved) { $SectionsToBeSaved='all'; } if ($EnableLockForUpdate !~ /[0-1]/) { $EnableLockForUpdate=0; } $DNSStaticCacheFile||='dnscache.txt'; $DNSLastUpdateCacheFile||='dnscachelastupdate.txt'; if ($DNSStaticCacheFile eq $DNSLastUpdateCacheFile) { error("DNSStaticCacheFile and DNSLastUpdateCacheFile must have different values."); } if ($AllowAccessFromWebToAuthenticatedUsersOnly !~ /[0-1]/) { $AllowAccessFromWebToAuthenticatedUsersOnly=0; } if ($CreateDirDataIfNotExists !~ /[0-1]/) { $CreateDirDataIfNotExists=0; } if ($BuildReportFormat !~ /html|xhtml|xml/i) { $BuildReportFormat='html'; } if ($BuildHistoryFormat !~ /text|xml/) { $BuildHistoryFormat='text'; } if ($SaveDatabaseFilesWithPermissionsForEveryone !~ /[0-1]/) { $SaveDatabaseFilesWithPermissionsForEveryone=0; } if ($PurgeLogFile !~ /[0-1]/) { $PurgeLogFile=0; } if ($KeepBackupOfHistoricFiles !~ /[0-1]/) { $KeepBackupOfHistoricFiles=0; } $DefaultFile[0]||='index.html'; if ($AuthenticatedUsersNotCaseSensitive !~ /[0-1]/) { $AuthenticatedUsersNotCaseSensitive=0; } if ($URLNotCaseSensitive !~ /[0-1]/) { $URLNotCaseSensitive=0; } if ($URLWithAnchor !~ /[0-1]/) { $URLWithAnchor=0; } $URLQuerySeparators =~ s/\s//g; if (! $URLQuerySeparators) { $URLQuerySeparators='?;'; } if ($URLWithQuery !~ /[0-1]/) { $URLWithQuery=0; } if ($URLReferrerWithQuery !~ /[0-1]/) { $URLReferrerWithQuery=0; } if ($WarningMessages !~ /[0-1]/) { $WarningMessages=1; } if ($DebugMessages !~ /[0-1]/) { $DebugMessages=0; } if ($NbOfLinesForCorruptedLog !~ /^\d+/ || $NbOfLinesForCorruptedLog<1) { $NbOfLinesForCorruptedLog=50; } if ($Expires !~ /^\d+/) { $Expires=0; } if ($DecodeUA !~ /[0-1]/) { $DecodeUA=0; } $MiscTrackerUrl||='/js/awstats_misc_tracker.js'; # Optional accuracy setup section if ($LevelForWormsDetection !~ /^\d+/) { $LevelForWormsDetection=0; } if ($LevelForRobotsDetection !~ /^\d+/) { $LevelForRobotsDetection=2; } if ($LevelForBrowsersDetection !~ /^\w+/) { $LevelForBrowsersDetection=2; } # Can be 'allphones' if ($LevelForOSDetection !~ /^\d+/) { $LevelForOSDetection=2; } if ($LevelForRefererAnalyze !~ /^\d+/) { $LevelForRefererAnalyze=2; } if ($LevelForFileTypesDetection !~ /^\d+/) { $LevelForFileTypesDetection=2; } if ($LevelForSearchEnginesDetection !~ /^\d+/) { $LevelForSearchEnginesDetection=2; } if ($LevelForKeywordsDetection !~ /^\d+/) { $LevelForKeywordsDetection=2; } # Optional extra setup section foreach my $extracpt (1..@ExtraName-1) { if ($ExtraStatTypes[$extracpt] !~ /[PHBL]/) { $ExtraStatTypes[$extracpt]='PHBL'; } if ($MaxNbOfExtra[$extracpt] !~ /^\d+$/ || $MaxNbOfExtra[$extracpt] < 0) { $MaxNbOfExtra[$extracpt]=20; } if ($MinHitExtra[$extracpt] !~ /^\d+$/ || $MinHitExtra[$extracpt] < 1) { $MinHitExtra[$extracpt]=1; } if (! $ExtraFirstColumnValues[$extracpt]) { error("Extra section number $extracpt is defined without ExtraSectionFirstColumnValues$extracpt parameter"); } if (! $ExtraFirstColumnFormat[$extracpt]) { $ExtraFirstColumnFormat[$extracpt] = '%s'; } } # Optional appearance setup section if ($MaxRowsInHTMLOutput !~ /^\d+/ || $MaxRowsInHTMLOutput<1) { $MaxRowsInHTMLOutput=1000; } if ($ShowMenu !~ /[01]/) { $ShowMenu=1; } if ($ShowSummary !~ /[01UVPHB]/) { $ShowSummary='UVPHB'; } if ($ShowMonthStats !~ /[01UVPHB]/) { $ShowMonthStats='UVPHB'; } if ($ShowDaysOfMonthStats !~ /[01VPHB]/) { $ShowDaysOfMonthStats='VPHB'; } if ($ShowDaysOfWeekStats !~ /[01PHBL]/) { $ShowDaysOfWeekStats='PHBL'; } if ($ShowHoursStats !~ /[01PHBL]/) { $ShowHoursStats='PHBL'; } if ($ShowDomainsStats !~ /[01PHB]/) { $ShowDomainsStats='PHB'; } if ($ShowHostsStats !~ /[01PHBL]/) { $ShowHostsStats='PHBL'; } if ($ShowAuthenticatedUsers !~ /[01PHBL]/) { $ShowAuthenticatedUsers=0; } if ($ShowRobotsStats !~ /[01HBL]/) { $ShowRobotsStats='HBL'; } if ($ShowWormsStats !~ /[01HBL]/) { $ShowWormsStats='HBL'; } if ($ShowEMailSenders !~ /[01HBML]/) { $ShowEMailSenders=0; } if ($ShowEMailReceivers !~ /[01HBML]/) { $ShowEMailReceivers=0; } if ($ShowSessionsStats !~ /[01]/) { $ShowSessionsStats=1; } if ($ShowPagesStats !~ /[01PBEX]/i) { $ShowPagesStats='PBEX'; } if ($ShowFileTypesStats !~ /[01HBC]/) { $ShowFileTypesStats='HB'; } if ($ShowFileSizesStats !~ /[01]/) { $ShowFileSizesStats=1; } if ($ShowOSStats !~ /[01]/) { $ShowOSStats=1; } if ($ShowBrowsersStats !~ /[01]/) { $ShowBrowsersStats=1; } if ($ShowScreenSizeStats !~ /[01]/) { $ShowScreenSizeStats=0; } if ($ShowOriginStats !~ /[01PH]/) { $ShowOriginStats='PH'; } if ($ShowKeyphrasesStats !~ /[01]/) { $ShowKeyphrasesStats=1; } if ($ShowKeywordsStats !~ /[01]/) { $ShowKeywordsStats=1; } if ($ShowClusterStats !~ /[01PHB]/) { $ShowClusterStats=0; } if ($ShowMiscStats !~ /[01anjdfrqwp]/) { $ShowMiscStats='a'; } if ($ShowHTTPErrorsStats !~ /[01]/) { $ShowHTTPErrorsStats=1; } if ($ShowSMTPErrorsStats !~ /[01]/) { $ShowSMTPErrorsStats=0; } if ($AddDataArrayMonthStats !~ /[01]/) { $AddDataArrayMonthStats=1; } if ($AddDataArrayShowDaysOfMonthStats !~ /[01]/) { $AddDataArrayShowDaysOfMonthStats=1; } if ($AddDataArrayShowDaysOfWeekStats !~ /[01]/) { $AddDataArrayShowDaysOfWeekStats=1; } if ($AddDataArrayShowHoursStats !~ /[01]/) { $AddDataArrayShowHoursStats=1; } my @maxnboflist=('Domain','HostsShown','LoginShown','RobotShown','WormsShown','PageShown','OsShown','BrowsersShown','ScreenSizesShown','RefererShown','KeyphrasesShown','KeywordsShown','EMailsShown'); my @maxnboflistdefaultval=(10,10,10,10,5,10,10,10,5,10,10,10,20); foreach my $i (0..(@maxnboflist-1)) { if (! $MaxNbOf{$maxnboflist[$i]} || $MaxNbOf{$maxnboflist[$i]} !~ /^\d+$/ || $MaxNbOf{$maxnboflist[$i]}<1) { $MaxNbOf{$maxnboflist[$i]}=$maxnboflistdefaultval[$i]; } } my @minhitlist=('Domain','Host','Login','Robot','Worm','File','Os','Browser','ScreenSize','Refer','Keyphrase','Keyword','EMail'); my @minhitlistdefaultval=(1,1,1,1,1,1,1,1,1,1,1,1,1); foreach my $i (0..(@minhitlist-1)) { if (! $MinHit{$minhitlist[$i]} || $MinHit{$minhitlist[$i]} !~ /^\d+$/ || $MinHit{$minhitlist[$i]}<1) { $MinHit{$minhitlist[$i]}=$minhitlistdefaultval[$i]; } } if ($FirstDayOfWeek !~ /[01]/) { $FirstDayOfWeek=1; } if ($UseFramesWhenCGI !~ /[01]/) { $UseFramesWhenCGI=1; } if ($DetailedReportsOnNewWindows !~ /[012]/) { $DetailedReportsOnNewWindows=1; } if ($ShowLinksOnUrl !~ /[01]/) { $ShowLinksOnUrl=1; } if ($MaxLengthOfShownURL !~ /^\d+/ || $MaxLengthOfShownURL<1) { $MaxLengthOfShownURL=64; } if ($ShowLinksToWhoIs !~ /[01]/) { $ShowLinksToWhoIs=0; } $Logo||='awstats_logo6.png'; $LogoLink||='http://awstats.sourceforge.net'; if ($BarWidth !~ /^\d+/ || $BarWidth<1) { $BarWidth=260; } if ($BarHeight !~ /^\d+/ || $BarHeight<1) { $BarHeight=90; } $color_Background =~ s/#//g; if ($color_Background !~ /^[0-9|A-H]+$/i) { $color_Background='FFFFFF'; } $color_TableBGTitle =~ s/#//g; if ($color_TableBGTitle !~ /^[0-9|A-H]+$/i) { $color_TableBGTitle='CCCCDD'; } $color_TableTitle =~ s/#//g; if ($color_TableTitle !~ /^[0-9|A-H]+$/i) { $color_TableTitle='000000'; } $color_TableBG =~ s/#//g; if ($color_TableBG !~ /^[0-9|A-H]+$/i) { $color_TableBG='CCCCDD'; } $color_TableRowTitle =~ s/#//g; if ($color_TableRowTitle !~ /^[0-9|A-H]+$/i) { $color_TableRowTitle='FFFFFF'; } $color_TableBGRowTitle =~ s/#//g; if ($color_TableBGRowTitle !~ /^[0-9|A-H]+$/i) { $color_TableBGRowTitle='ECECEC'; } $color_TableBorder =~ s/#//g; if ($color_TableBorder !~ /^[0-9|A-H]+$/i) { $color_TableBorder='ECECEC'; } $color_text =~ s/#//g; if ($color_text !~ /^[0-9|A-H]+$/i) { $color_text='000000'; } $color_textpercent =~ s/#//g; if ($color_textpercent !~ /^[0-9|A-H]+$/i) { $color_textpercent='606060'; } $color_titletext =~ s/#//g; if ($color_titletext !~ /^[0-9|A-H]+$/i) { $color_titletext='000000'; } $color_weekend =~ s/#//g; if ($color_weekend !~ /^[0-9|A-H]+$/i) { $color_weekend='EAEAEA'; } $color_link =~ s/#//g; if ($color_link !~ /^[0-9|A-H]+$/i) { $color_link='0011BB'; } $color_hover =~ s/#//g; if ($color_hover !~ /^[0-9|A-H]+$/i) { $color_hover='605040'; } $color_other =~ s/#//g; if ($color_other !~ /^[0-9|A-H]+$/i) { $color_other='666688'; } $color_u =~ s/#//g; if ($color_u !~ /^[0-9|A-H]+$/i) { $color_u='FFA060'; } $color_v =~ s/#//g; if ($color_v !~ /^[0-9|A-H]+$/i) { $color_v='F4F090'; } $color_p =~ s/#//g; if ($color_p !~ /^[0-9|A-H]+$/i) { $color_p='4477DD'; } $color_h =~ s/#//g; if ($color_h !~ /^[0-9|A-H]+$/i) { $color_h='66EEFF'; } $color_k =~ s/#//g; if ($color_k !~ /^[0-9|A-H]+$/i) { $color_k='2EA495'; } $color_s =~ s/#//g; if ($color_s !~ /^[0-9|A-H]+$/i) { $color_s='8888DD'; } $color_e =~ s/#//g; if ($color_e !~ /^[0-9|A-H]+$/i) { $color_e='CEC2E8'; } $color_x =~ s/#//g; if ($color_x !~ /^[0-9|A-H]+$/i) { $color_x='C1B2E2'; } # Correct param if default value is asked if ($ShowSummary eq '1') { $ShowSummary = 'UVPHB'; } if ($ShowMonthStats eq '1') { $ShowMonthStats = 'UVPHB'; } if ($ShowDaysOfMonthStats eq '1') { $ShowDaysOfMonthStats = 'VPHB'; } if ($ShowDaysOfWeekStats eq '1') { $ShowDaysOfWeekStats = 'PHBL'; } if ($ShowHoursStats eq '1') { $ShowHoursStats = 'PHBL'; } if ($ShowDomainsStats eq '1') { $ShowDomainsStats = 'PHB'; } if ($ShowHostsStats eq '1') { $ShowHostsStats = 'PHBL'; } if ($ShowEMailSenders eq '1') { $ShowEMailSenders = 'HBML'; } if ($ShowEMailReceivers eq '1') { $ShowEMailReceivers = 'HBML'; } if ($ShowAuthenticatedUsers eq '1') { $ShowAuthenticatedUsers = 'PHBL'; } if ($ShowRobotsStats eq '1') { $ShowRobotsStats = 'HBL'; } if ($ShowWormsStats eq '1') { $ShowWormsStats = 'HBL'; } if ($ShowPagesStats eq '1') { $ShowPagesStats = 'PBEX'; } if ($ShowFileTypesStats eq '1') { $ShowFileTypesStats = 'HB'; } if ($ShowOriginStats eq '1') { $ShowOriginStats = 'PH'; } if ($ShowClusterStats eq '1') { $ShowClusterStats = 'PHB'; } if ($ShowMiscStats eq '1') { $ShowMiscStats = 'anjdfrqwp'; } # Convert extra sections data into @ExtraConditionType, @ExtraConditionTypeVal... foreach my $extranum (1..@ExtraName-1) { my $part=0; foreach my $conditioncouple (split(/\s*\|\|\s*/, $ExtraCondition[$extranum])) { my ($conditiontype, $conditiontypeval)=split(/[,:]/,$conditioncouple,2); $ExtraConditionType[$extranum][$part]=$conditiontype; if ($conditiontypeval =~ /^REGEX\[(.*)\]$/i) { $conditiontypeval=$1; } #else { $conditiontypeval=quotemeta($conditiontypeval); } $ExtraConditionTypeVal[$extranum][$part]=qr/$conditiontypeval/i; $part++; } $part=0; foreach my $rowkeycouple (split(/\s*\|\|\s*/, $ExtraFirstColumnValues[$extranum])) { my ($rowkeytype, $rowkeytypeval)=split(/[,:]/,$rowkeycouple,2); $ExtraFirstColumnValuesType[$extranum][$part]=$rowkeytype; if ($rowkeytypeval =~ /^REGEX\[(.*)\]$/i) { $rowkeytypeval=$1; } #else { $rowkeytypeval=quotemeta($rowkeytypeval); } $ExtraFirstColumnValuesTypeVal[$extranum][$part]=qr/$rowkeytypeval/i; $part++; } } # Show definitive value for major parameters if ($Debug) { debug(" LogFile='$LogFile'",2); debug(" LogFormat='$LogFormat'",2); debug(" LogSeparator='$LogSeparator'",2); debug(" DNSLookup='$DNSLookup'",2); debug(" DirData='$DirData'",2); debug(" DirCgi='$DirCgi'",2); debug(" DirIcons='$DirIcons'",2); debug(" SiteDomain='$SiteDomain'",2); debug(" MiscTrackerUrl='$MiscTrackerUrl'",2); foreach (keys %MaxNbOf) { debug(" MaxNbOf{$_}=$MaxNbOf{$_}",2); } foreach (keys %MinHit) { debug(" MinHit{$_}=$MinHit{$_}",2); } foreach my $extranum (1..@ExtraName-1) { debug(" ExtraCodeFilter[$extranum] is array ".join(',',@{$ExtraCodeFilter[$extranum]}),2); debug(" ExtraConditionType[$extranum] is array ".join(',',@{$ExtraConditionType[$extranum]}),2); debug(" ExtraConditionTypeVal[$extranum] is array ".join(',',@{$ExtraConditionTypeVal[$extranum]}),2); debug(" ExtraFirstColumnFunction[$extranum] is array ".join(',',@{$ExtraFirstColumnFunction[$extranum]}),2); debug(" ExtraFirstColumnValuesType[$extranum] is array ".join(',',@{$ExtraFirstColumnValuesType[$extranum]}),2); debug(" ExtraFirstColumnValuesTypeVal[$extranum] is array ".join(',',@{$ExtraFirstColumnValuesTypeVal[$extranum]}),2); } } # Deny URLWithQueryWithOnlyFollowingParameters and URLWithQueryWithoutFollowingParameters both set if (@URLWithQueryWithOnly && @URLWithQueryWithout) { error("URLWithQueryWithOnlyFollowingParameters and URLWithQueryWithoutFollowingParameters can't be both set at the same time"); } # Deny $ShowHTTPErrorsStats and $ShowSMTPErrorsStats both set if ($ShowHTTPErrorsStats && $ShowSMTPErrorsStats) { error("ShowHTTPErrorsStats and ShowSMTPErrorsStats can't be both set at the same time"); } # Deny LogFile if contains a pipe and PurgeLogFile || ArchiveLogRecords set on if (($PurgeLogFile || $ArchiveLogRecords) && $LogFile =~ /\|\s*$/) { error("A pipe in log file name is not allowed if PurgeLogFile and ArchiveLogRecords are not set to 0"); } # If not a migrate, check if DirData is OK if (! $MigrateStats && ! -d $DirData) { if ($CreateDirDataIfNotExists) { if ($Debug) { debug(" Make directory $DirData",2); } my $mkdirok=mkdir "$DirData", 0766; if (! $mkdirok) { error("$PROG failed to create directory DirData (DirData=\"$DirData\", CreateDirDataIfNotExists=$CreateDirDataIfNotExists)."); } } else { error("AWStats database directory defined in config file by 'DirData' parameter ($DirData) does not exist or is not writable."); } } if ($LogType eq 'S') { $NOTSORTEDRECORDTOLERANCE=1000000; } } #------------------------------------------------------------------------------ # Function: Common function used by init function of plugins # Parameters: AWStats version required by plugin # Input: $VERSION # Output: None # Return: '' if ok, "Error: xxx" if error #------------------------------------------------------------------------------ sub Check_Plugin_Version { my $PluginNeedAWStatsVersion=shift; if (! $PluginNeedAWStatsVersion) { return 0; } $VERSION =~ /^(\d+)\.(\d+)/; my $numAWStatsVersion=($1*1000)+$2; $PluginNeedAWStatsVersion =~ /^(\d+)\.(\d+)/; my $numPluginNeedAWStatsVersion=($1*1000)+$2; if ($numPluginNeedAWStatsVersion > $numAWStatsVersion) { return "Error: AWStats version $PluginNeedAWStatsVersion or higher is required. Detected $VERSION."; } return ''; } #------------------------------------------------------------------------------ # Function: Return a checksum for an array of string # Parameters: Array of string # Input: None # Output: None # Return: Checksum number #------------------------------------------------------------------------------ sub CheckSum { my $string=shift; my $checksum=0; # use MD5; # $checksum = MD5->hexhash($string); my $i=0; my $j=0; while ($i < length($string)) { my $c=substr($string,$i,1); $checksum+=(ord($c)<<(8*$j)); if ($j++ > 3) { $j=0; } $i++; } return $checksum; } #------------------------------------------------------------------------------ # Function: Load plugins files # Parameters: None # Input: $DIR @PluginsToLoad # Output: None # Return: None #------------------------------------------------------------------------------ sub Read_Plugins { # Check plugin files in common possible directories : # Windows and standard package: "$DIR/plugins" (plugins in same dir than awstats.pl) # Redhat : "/usr/local/awstats/wwwroot/cgi-bin/plugins" # Debian package : "/usr/share/awstats/plugins" my @PossiblePluginsDir=("$DIR/plugins","/usr/local/awstats/wwwroot/cgi-bin/plugins","/usr/share/awstats/plugins"); my %DirAddedInINC=(); #Removed for security reason #foreach my $key (keys %NoLoadPlugin) { if ($NoLoadPlugin{$key} < 0) { push @PluginsToLoad, $key; } } if ($Debug) { debug("Call to Read_Plugins with list: ".join(',',@PluginsToLoad)); } foreach my $plugininfo (@PluginsToLoad) { my ($pluginfile,$pluginparam)=split(/\s+/,$plugininfo,2); $pluginparam||=""; # If split has only on part, pluginparam is not initialized $pluginfile =~ s/\.pm$//i; $pluginfile =~ /([^\/\\]+)$/; my $pluginname=$1; # pluginname is pluginfile without any path # Check if plugin is not disabled if ($NoLoadPlugin{$pluginname} && $NoLoadPlugin{$pluginname} > 0) { if ($Debug) { debug(" Plugin load for '$pluginfile' has been disabled from parameters"); } next; } if ($pluginname) { if (! $PluginsLoaded{'init'}{"$pluginname"}) { # Plugin not already loaded my %pluginisfor=('timehires'=>'u','ipv6'=>'u','hashfiles'=>'u', 'geoipfree'=>'u', 'geoip'=>'ou','geoip_region_maxmind'=>'mou','geoip_city_maxmind'=>'mou','geoip_isp_maxmind'=>'mou','geoip_org_maxmind'=>'mou', 'timezone'=>'ou', 'decodeutfkeys'=>'o','hostinfo'=>'o','rawlog'=>'o','userinfo'=>'o','urlalias'=>'o','tooltips'=>'o'); if ($pluginisfor{$pluginname}) { # If it's a known plugin, may be we don't need to load it # Do not load "menu handler plugins" if output only and mainleft frame if (! $UpdateStats && scalar keys %HTMLOutput && $FrameName eq 'mainleft' && $pluginisfor{$pluginname} !~ /m/) { $PluginsLoaded{'init'}{"$pluginname"}=1; next; } # Do not load "update plugins" if output only if (! $UpdateStats && scalar keys %HTMLOutput && $pluginisfor{$pluginname} !~ /o/) { $PluginsLoaded{'init'}{"$pluginname"}=1; next; } # Do not load "output plugins" if update only if ($UpdateStats && ! scalar keys %HTMLOutput && $pluginisfor{$pluginname} !~ /u/) { $PluginsLoaded{'init'}{"$pluginname"}=1; next; } } # Load plugin foreach my $dir (@PossiblePluginsDir) { my $searchdir=$dir; if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } my $pluginpath="${searchdir}${pluginfile}.pm"; if (-s "$pluginpath") { $PluginDir="${searchdir}"; # Set plugin dir if ($Debug) { debug(" Try to init plugin '$pluginname' ($pluginpath) with param '$pluginparam'",1); } if (! $DirAddedInINC{"$dir"}) { push @INC, "$dir"; $DirAddedInINC{"$dir"}=1; } my $loadret=0; my $modperl=$ENV{"MOD_PERL"}? eval { require mod_perl; $mod_perl::VERSION >= 1.99 ? 2 : 1 } : 0; if ($modperl == 2) { $loadret=require "$pluginpath"; } else { $loadret=require "$pluginfile.pm"; } if (! $loadret || $loadret =~ /^error/i) { # Load failed, we stop here error("Plugin load for plugin '$pluginname' failed with return code: $loadret"); } my $ret; # To get init return my $initfunction="\$ret=Init_$pluginname('$pluginparam')"; my $initret=eval("$initfunction"); if ($initret && $initret eq 'xxx') { $initret='Error: The PluginHooksFunctions variable defined in plugin file does not contain list of hooked functions'; } if (! $initret || $initret =~ /^error/i) { # Init function failed, we stop here error("Plugin init for plugin '$pluginname' failed with return code: ".($initret?"$initret":"$@ (A module required by plugin might be missing).")); } # Plugin load and init successfull foreach my $elem (split(/\s+/,$initret)) { # Some functions can only be plugged once my @uniquefunc=('GetCountryCodeByName','GetCountryCodeByAddr','ChangeTime','GetTimeZoneTitle','GetTime','SearchFile','LoadCache','SaveHash','ShowMenu'); my $isuniquefunc=0; foreach my $function (@uniquefunc) { if ("$elem" eq "$function") { # We try to load a 'unique' function, so we check and stop if already loaded foreach my $otherpluginname (keys %{$PluginsLoaded{"$elem"}}) { error("Conflict between plugin '$pluginname' and '$otherpluginname'. They both implements the 'must be unique' function '$elem'.\nYou must choose between one of them. Using together is not possible."); } $isuniquefunc=1; last; } } if ($isuniquefunc) { # TODO Use $PluginsLoaded{"$elem"}="$pluginname"; for unique func $PluginsLoaded{"$elem"}{"$pluginname"}=1; } else { $PluginsLoaded{"$elem"}{"$pluginname"}=1; } if ("$elem" =~ /SectionInitHashArray/) { $AtLeastOneSectionPlugin=1; } } $PluginsLoaded{'init'}{"$pluginname"}=1; if ($Debug) { debug(" Plugin '$pluginname' now hooks functions '$initret'",1); } last; } } if (! $PluginsLoaded{'init'}{"$pluginname"}) { error("AWStats config file contains a directive to load plugin \"$pluginname\" (LoadPlugin=\"$plugininfo\") but AWStats can't open plugin file \"$pluginfile.pm\" for read.\nCheck if file is in \"".($PossiblePluginsDir[0])."\" directory and is readable."); } } else { warning("Warning: Tried to load plugin \"$pluginname\" twice. Fix config file."); } } else { error("Plugin \"$pluginfile\" is not a valid plugin name."); } } # In output mode, geo ip plugins are not loaded, so message changes are done here (can't be done in plugin init function) if ($PluginsLoaded{'init'}{'geoip'} || $PluginsLoaded{'init'}{'geoipfree'}) { $Message[17]=$Message[25]=$Message[148]; } } #------------------------------------------------------------------------------ # Function: Read history file and create or update tmp history file # Parameters: year,month,day,hour,withupdate,withpurge,part_to_load[,lastlinenb,lastlineoffset,lastlinechecksum] # Input: $DirData $PROG $FileSuffix $LastLine $DatabaseBreak # Output: None # Return: Tmp history file name created/updated or '' if withupdate is 0 #------------------------------------------------------------------------------ sub Read_History_With_TmpUpdate { my $year=sprintf("%04i",shift||0); my $month=sprintf("%02i",shift||0); my $day=shift; if ($day ne '') { $day=sprintf("%02i",$day); } my $hour=shift; if ($hour ne '') { $hour=sprintf("%02i",$hour); } my $withupdate=shift||0; my $withpurge=shift||0; my $part=shift||''; my ($date,$filedate)=('',''); if ($DatabaseBreak eq 'month') { $date=sprintf("%04i%02i",$year,$month); $filedate=sprintf("%02i%04i",$month,$year); } elsif ($DatabaseBreak eq 'year') { $date=sprintf("%04i%",$year); $filedate=sprintf("%04i",$year); } elsif ($DatabaseBreak eq 'day') { $date=sprintf("%04i%02i%02i",$year,$month,$day); $filedate=sprintf("%02i%04i%02i",$month,$year,$day); } elsif ($DatabaseBreak eq 'hour') { $date=sprintf("%04i%02i%02i%02i",$year,$month,$day,$hour); $filedate=sprintf("%02i%04i%02i%02i",$month,$year,$day,$hour); } my $xml=($BuildHistoryFormat eq 'xml'?1:0); my $xmleb=''; my $xmlrb=''; my $lastlinenb=shift||0; my $lastlineoffset=shift||0; my $lastlinechecksum=shift||0; my %allsections=('general'=>1,'misc'=>2,'time'=>3,'visitor'=>4,'day'=>5, 'domain'=>6,'cluster'=>7,'login'=>8,'robot'=>9,'worms'=>10,'emailsender'=>11,'emailreceiver'=>12, 'session'=>13,'sider'=>14,'filetypes'=>15, 'os'=>16,'browser'=>17,'screensize'=>18,'unknownreferer'=>19,'unknownrefererbrowser'=>20, 'origin'=>21,'sereferrals'=>22,'pagerefs'=>23, 'searchwords'=>24,'keywords'=>25, 'errors'=>26); my $order=(scalar keys %allsections)+1; foreach (keys %TrapInfosForHTTPErrorCodes) { $allsections{"sider_$_"}=$order++; } foreach (1..@ExtraName-1) { $allsections{"extra_$_"}=$order++; } foreach (keys %{$PluginsLoaded{'SectionInitHashArray'}}) { $allsections{"plugin_$_"}=$order++; } my $withread=0; # Variable used to read old format history files my $readvisitorforbackward=0; if ($Debug) { debug("Call to Read_History_With_TmpUpdate [$year,$month,$day,$hour,withupdate=$withupdate,withpurge=$withpurge,part=$part,lastlinenb=$lastlinenb,lastlineoffset=$lastlineoffset,lastlinechecksum=$lastlinechecksum]"); } if ($Debug) { debug("date=$date"); } # Define SectionsToLoad (which sections to load) my %SectionsToLoad = (); if ($part eq 'all') { # Load all needed sections my $order=1; $SectionsToLoad{'general'}=$order++; # When $SectionsToLoad{'time'}=$order++; # Always loaded because needed to count TotalPages, TotalHits, TotalBandwidth if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowHostsStats) || $HTMLOutput{'allhosts'} || $HTMLOutput{'lasthosts'} || $HTMLOutput{'unknownip'}) { $SectionsToLoad{'visitor'}=$order++; } # Must be before day, sider and session section if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && ($ShowDaysOfWeekStats || $ShowDaysOfMonthStats)) || $HTMLOutput{'alldays'}) { $SectionsToLoad{'day'}=$order++; } # Who if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowDomainsStats) || $HTMLOutput{'alldomains'}) { $SectionsToLoad{'domain'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowAuthenticatedUsers) || $HTMLOutput{'alllogins'} || $HTMLOutput{'lastlogins'}) { $SectionsToLoad{'login'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowRobotsStats) || $HTMLOutput{'allrobots'} || $HTMLOutput{'lastrobots'}) { $SectionsToLoad{'robot'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowWormsStats) || $HTMLOutput{'allworms'} || $HTMLOutput{'lastworms'}) { $SectionsToLoad{'worms'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowEMailSenders) || $HTMLOutput{'allemails'} || $HTMLOutput{'lastemails'}) { $SectionsToLoad{'emailsender'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowEMailReceivers) || $HTMLOutput{'allemailr'} || $HTMLOutput{'lastemailr'}) { $SectionsToLoad{'emailreceiver'}=$order++; } # Navigation if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowSessionsStats) || $HTMLOutput{'sessions'}) { $SectionsToLoad{'session'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowPagesStats) || $HTMLOutput{'urldetail'} || $HTMLOutput{'urlentry'} || $HTMLOutput{'urlexit'}) { $SectionsToLoad{'sider'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowFileTypesStats) || $HTMLOutput{'filetypes'}) { $SectionsToLoad{'filetypes'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOSStats) || $HTMLOutput{'osdetail'}) { $SectionsToLoad{'os'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowBrowsersStats) || $HTMLOutput{'browserdetail'}) { $SectionsToLoad{'browser'}=$order++; } if ($UpdateStats || $MigrateStats || $HTMLOutput{'unknownos'}) { $SectionsToLoad{'unknownreferer'}=$order++; } if ($UpdateStats || $MigrateStats || $HTMLOutput{'unknownbrowser'}) { $SectionsToLoad{'unknownrefererbrowser'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowScreenSizeStats)) { $SectionsToLoad{'screensize'}=$order++; } # Referers if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOriginStats) || $HTMLOutput{'origin'}) { $SectionsToLoad{'origin'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOriginStats) || $HTMLOutput{'refererse'}) { $SectionsToLoad{'sereferrals'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOriginStats) || $HTMLOutput{'refererpages'}) { $SectionsToLoad{'pagerefs'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowKeyphrasesStats) || $HTMLOutput{'keyphrases'} || $HTMLOutput{'keywords'}) { $SectionsToLoad{'searchwords'}=$order++; } if (! $withupdate && $HTMLOutput{'main'} && $ShowKeywordsStats) { $SectionsToLoad{'keywords'}=$order++; } # If we update, dont need to load # Others if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowMiscStats)) { $SectionsToLoad{'misc'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && ($ShowHTTPErrorsStats || $ShowSMTPErrorsStats)) || $HTMLOutput{'errors'}) { $SectionsToLoad{'errors'}=$order++; } foreach (keys %TrapInfosForHTTPErrorCodes) { if ($UpdateStats || $MigrateStats || $HTMLOutput{"errors$_"}) { $SectionsToLoad{"sider_$_"}=$order++; } } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowClusterStats)) { $SectionsToLoad{'cluster'}=$order++; } foreach (1..@ExtraName-1) { if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ExtraStatTypes[$_]) || $HTMLOutput{"allextra$_"}) { $SectionsToLoad{"extra_$_"}=$order++; } } foreach (keys %{$PluginsLoaded{'SectionInitHashArray'}}) { if ($UpdateStats || $MigrateStats || $HTMLOutput{"plugin_$_"}) { $SectionsToLoad{"plugin_$_"}=$order++; } } } else { # Load only required sections my $order=1; foreach (split(/\s+/,$part)) { $SectionsToLoad{$_}=$order++; } } # Define SectionsToSave (which sections to save) my %SectionsToSave = (); if ($withupdate) { if ($SectionsToBeSaved eq 'all') { %SectionsToSave=%allsections; } else { my $order=1; foreach (split(/\s+/,$SectionsToBeSaved)) { $SectionsToSave{$_}=$order++; } } } if ($Debug) { debug(" List of sections marked for load : ".join(' ',(sort { $SectionsToLoad{$a} <=> $SectionsToLoad{$b} } keys %SectionsToLoad)),2); debug(" List of sections marked for save : ".join(' ',(sort { $SectionsToSave{$a} <=> $SectionsToSave{$b} } keys %SectionsToSave)),2); } # Define value for filetowrite and filetoread (Month before Year kept for backward compatibility) my $filetowrite=''; my $filetoread=''; if ($HistoryAlreadyFlushed{"$year$month$day$hour"} && -s "$DirData/$PROG$filedate$FileSuffix.tmp.$$") { # tmp history file was already flushed $filetoread="$DirData/$PROG$filedate$FileSuffix.tmp.$$"; $filetowrite="$DirData/$PROG$filedate$FileSuffix.tmp.$$.bis"; } else { $filetoread="$DirData/$PROG$filedate$FileSuffix.txt"; $filetowrite="$DirData/$PROG$filedate$FileSuffix.tmp.$$"; } if ($Debug) { debug(" History file to read is '$filetoread'",2); } # Is there an old data file to read or, if migrate, can we open the file for read if (-s $filetoread || $MigrateStats) { $withread=1; } # Open files if ($withread) { open(HISTORY,$filetoread) || error("Couldn't open file \"$filetoread\" for read: $!","","",$MigrateStats); binmode HISTORY; # Avoid premature EOF due to history files corrupted with \cZ or bin chars } if ($withupdate) { open(HISTORYTMP,">$filetowrite") || error("Couldn't open file \"$filetowrite\" for write: $!"); binmode HISTORYTMP; if ($xml) { print HISTORYTMP ''."\n\n"; } Save_History("header",$year,$month,$date); } # Loop on read file my $readxml=0; if ($withread) { my $countlines=0; my $versionnum=0; my @field=(); while () { chomp $_; s/\r//; $countlines++; # Test if it's xml if (! $readxml && $_ =~ /^ int($field[1])) { $FirstTime{$date}=int($field[1]); }; next; } if ($field[0] eq 'LastTime' || $field[0] eq "${xmlrb}LastTime") { if (! $LastTime{$date} || $LastTime{$date} < int($field[1])) { $LastTime{$date}=int($field[1]); }; next; } if ($field[0] eq 'LastUpdate' || $field[0] eq "${xmlrb}LastUpdate") { if ($LastUpdate < $field[1]) { $LastUpdate=int($field[1]); #$LastUpdateLinesRead=int($field[2]); #$LastUpdateNewLinesRead=int($field[3]); #$LastUpdateLinesCorrupted=int($field[4]); }; next; } if ($field[0] eq 'TotalVisits' || $field[0] eq "${xmlrb}TotalVisits") { if (! $withupdate) { $MonthVisits{$year.$month}+=int($field[1]); } next; } if ($field[0] eq 'TotalUnique' || $field[0] eq "${xmlrb}TotalUnique") { if (! $withupdate) { $MonthUnique{$year.$month}+=int($field[1]); } next; } if ($field[0] eq 'MonthHostsKnown' || $field[0] eq "${xmlrb}MonthHostsKnown") { if (! $withupdate) { $MonthHostsKnown{$year.$month}+=int($field[1]); } next; } if ($field[0] eq 'MonthHostsUnknown' || $field[0] eq "${xmlrb}MonthHostsUnknown") { if (! $withupdate) { $MonthHostsUnknown{$year.$month}+=int($field[1]); } next; } if (($field[0] eq 'END_GENERAL' || $field[0] eq "${xmleb}END_GENERAL")) { if ($Debug) { debug(" End of GENERAL section"); } if ($MigrateStats && ! $BadFormatWarning{$year.$month}) { $BadFormatWarning{$year.$month}=1; warning("Warning: You are migrating a file that is already a recent version (migrate not required for files version $versionnum).","","",1); } delete $SectionsToLoad{'general'}; if ($SectionsToSave{'general'}) { Save_History('general',$year,$month,$date,$lastlinenb,$lastlineoffset,$lastlinechecksum); delete $SectionsToSave{'general'}; } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_MISC if ($field[0] eq 'BEGIN_MISC') { if ($Debug) { debug(" Begin of MISC section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'misc'}) { $countloaded++; if ($field[1]) { $_misc_p{$field[0]}+=int($field[1]); } if ($field[2]) { $_misc_h{$field[0]}+=int($field[2]); } if ($field[3]) { $_misc_k{$field[0]}+=int($field[3]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_MISC' || $field[0] eq "${xmleb}END_MISC" || ! $_); if ($field[0] ne 'END_MISC' && $field[0] ne "${xmleb}END_MISC") { error("History file \"$filetoread\" is corrupted (End of section MISC not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of MISC section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'misc'}; if ($SectionsToSave{'misc'}) { Save_History('misc',$year,$month,$date); delete $SectionsToSave{'misc'}; if ($withpurge) { %_misc_p=(); %_misc_h=(); %_misc_k=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_CLUSTER if ($field[0] eq 'BEGIN_CLUSTER') { if ($Debug) { debug(" Begin of CLUSTER section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'cluster'}) { $countloaded++; if ($field[1]) { $_cluster_p{$field[0]}+=int($field[1]); } if ($field[2]) { $_cluster_h{$field[0]}+=int($field[2]); } if ($field[3]) { $_cluster_k{$field[0]}+=int($field[3]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_CLUSTER' || $field[0] eq "${xmleb}END_CLUSTER" || ! $_); if ($field[0] ne 'END_CLUSTER' && $field[0] ne "${xmleb}END_CLUSTER") { error("History file \"$filetoread\" is corrupted (End of section CLUSTER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of CLUSTER section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'cluster'}; if ($SectionsToSave{'cluster'}) { Save_History('cluster',$year,$month,$date); delete $SectionsToSave{'cluster'}; if ($withpurge) { %_cluster_p=(); %_cluster_h=(); %_cluster_k=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_TIME if ($field[0] eq 'BEGIN_TIME') { my $monthpages=0;my $monthhits=0;my $monthbytes=0; my $monthnotviewedpages=0;my $monthnotviewedhits=0;my $monthnotviewedbytes=0; if ($Debug) { debug(" Begin of TIME section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0] ne '') { # Test on ne '' because field[0] is '0' for hour 0) $count++; if ($SectionsToLoad{'time'}) { if ($withupdate || $MonthRequired eq 'all' || $MonthRequired eq "$month") { # Still required $countloaded++; if ($field[1]) { $_time_p[$field[0]]+=int($field[1]); } if ($field[2]) { $_time_h[$field[0]]+=int($field[2]); } if ($field[3]) { $_time_k[$field[0]]+=int($field[3]); } if ($field[4]) { $_time_nv_p[$field[0]]+=int($field[4]); } if ($field[5]) { $_time_nv_h[$field[0]]+=int($field[5]); } if ($field[6]) { $_time_nv_k[$field[0]]+=int($field[6]); } } $monthpages+=int($field[1]); $monthhits+=int($field[2]); $monthbytes+=int($field[3]); $monthnotviewedpages+=int($field[4]||0); $monthnotviewedhits+=int($field[5]||0); $monthnotviewedbytes+=int($field[6]||0); } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_TIME' || $field[0] eq "${xmleb}END_TIME" || ! $_); if ($field[0] ne 'END_TIME' && $field[0] ne "${xmleb}END_TIME") { error("History file \"$filetoread\" is corrupted (End of section TIME not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of TIME section ($count entries, $countloaded loaded)"); } $MonthPages{$year.$month}+=$monthpages; $MonthHits{$year.$month}+=$monthhits; $MonthBytes{$year.$month}+=$monthbytes; $MonthNotViewedPages{$year.$month}+=$monthnotviewedpages; $MonthNotViewedHits{$year.$month}+=$monthnotviewedhits; $MonthNotViewedBytes{$year.$month}+=$monthnotviewedbytes; delete $SectionsToLoad{'time'}; if ($SectionsToSave{'time'}) { Save_History('time',$year,$month,$date); delete $SectionsToSave{'time'}; if ($withpurge) { @_time_p=(); @_time_h=(); @_time_k=(); @_time_nv_p=(); @_time_nv_h=(); @_time_nv_k=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_ORIGIN if ($field[0] eq 'BEGIN_ORIGIN') { if ($Debug) { debug(" Begin of ORIGIN section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'origin'}) { if ($field[0] eq 'From0') { $_from_p[0]+=$field[1]; $_from_h[0]+=$field[2]; } elsif ($field[0] eq 'From1') { $_from_p[1]+=$field[1]; $_from_h[1]+=$field[2]; } elsif ($field[0] eq 'From2') { $_from_p[2]+=$field[1]; $_from_h[2]+=$field[2]; } elsif ($field[0] eq 'From3') { $_from_p[3]+=$field[1]; $_from_h[3]+=$field[2]; } elsif ($field[0] eq 'From4') { $_from_p[4]+=$field[1]; $_from_h[4]+=$field[2]; } elsif ($field[0] eq 'From5') { $_from_p[5]+=$field[1]; $_from_h[5]+=$field[2]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_ORIGIN' || $field[0] eq "${xmleb}END_ORIGIN" || ! $_); if ($field[0] ne 'END_ORIGIN' && $field[0] ne "${xmleb}END_ORIGIN") { error("History file \"$filetoread\" is corrupted (End of section ORIGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of ORIGIN section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'origin'}; if ($SectionsToSave{'origin'}) { Save_History('origin',$year,$month,$date); delete $SectionsToSave{'origin'}; if ($withpurge) { @_from_p=(); @_from_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_DAY if ($field[0] eq 'BEGIN_DAY') { if ($Debug) { debug(" Begin of DAY section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'day'}) { $countloaded++; if ($field[1]) { $DayPages{$field[0]}+=int($field[1]); } $DayHits{$field[0]}+=int($field[2]); # DayHits always load (should be >0 and if not it's a day YYYYMM00 resulting of an old file migration) if ($field[3]) { $DayBytes{$field[0]}+=int($field[3]); } if ($field[4]) { $DayVisits{$field[0]}+=int($field[4]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_DAY' || $field[0] eq "${xmleb}END_DAY" || ! $_); if ($field[0] ne 'END_DAY' && $field[0] ne "${xmleb}END_DAY") { error("History file \"$filetoread\" is corrupted (End of section DAY not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of DAY section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'day'}; # WE DO NOT SAVE SECTION NOW BECAUSE VALUES CAN BE CHANGED AFTER READING VISITOR #if ($SectionsToSave{'day'}) { # Must be made after read of visitor # Save_History('day',$year,$month,$date); delete $SectionsToSave{'day'}; # if ($withpurge) { %DayPages=(); %DayHits=(); %DayBytes=(); %DayVisits=(); } #} if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_VISITOR if ($field[0] eq 'BEGIN_VISITOR') { if ($Debug) { debug(" Begin of VISITOR section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; # For backward compatibility if ($readvisitorforbackward) { if ($field[1]) { $MonthUnique{$year.$month}++; } if ($MonthRequired ne 'all') { if ($field[0] !~ /^\d+\.\d+\.\d+\.\d+$/ && $field[0] !~ /^[0-9A-F]*:/i) { $MonthHostsKnown{$year.$month}++; } else { $MonthHostsUnknown{$year.$month}++; } } } # Process data saved in 'wait' arrays if ($withupdate && $_waithost_e{$field[0]}){ my $timehostl=int($field[4]||0); my $timehosts=int($field[5]||0); my $newtimehosts=($_waithost_s{$field[0]}?$_waithost_s{$field[0]}:$_host_s{$field[0]}); my $newtimehostl=($_waithost_l{$field[0]}?$_waithost_l{$field[0]}:$_host_l{$field[0]}); if ($newtimehosts > $timehostl + $VISITTIMEOUT ) { if ($Debug) { debug(" Visit for $field[0] in 'wait' arrays is a new visit different than last in history",4); } if ($field[6]) { $_url_x{$field[6]}++; } $_url_e{$_waithost_e{$field[0]}}++; $newtimehosts =~ /^(\d\d\d\d\d\d\d\d)/; $DayVisits{$1}++; if ($timehosts && $timehostl) { $_session{GetSessionRange($timehosts,$timehostl)}++; } if ($_waithost_s{$field[0]}) { # First session found in log was followed by another one so it's finished $_session{GetSessionRange($newtimehosts,$newtimehostl)}++; } # Here $_host_l $_host_s and $_host_u are correctly defined } else { if ($Debug) { debug(" Visit for $field[0] in 'wait' arrays is following of last visit in history",4); } if ($_waithost_s{$field[0]}) { # First session found in log was followed by another one so it's finished $_session{GetSessionRange(MinimumButNoZero($timehosts,$newtimehosts),$timehostl>$newtimehostl?$timehostl:$newtimehostl)}++; # Here $_host_l $_host_s and $_host_u are correctly defined } else { # We correct $_host_l $_host_s and $_host_u if ($timehostl > $newtimehostl) { $_host_l{$field[0]}=$timehostl; $_host_u{$field[0]}=$field[6]; } if ($timehosts < $newtimehosts) { $_host_s{$field[0]}=$timehosts; } } } delete $_waithost_e{$field[0]}; delete $_waithost_l{$field[0]}; delete $_waithost_s{$field[0]}; delete $_waithost_u{$field[0]}; } # Load records if ($readvisitorforbackward!=2 && $SectionsToLoad{'visitor'}) { # if readvisitorforbackward==2 we do not load my $loadrecord=0; if ($withupdate) { $loadrecord=1; } else { if ($HTMLOutput{'allhosts'} || $HTMLOutput{'lasthosts'}) { if ((!$FilterIn{'host'} || $field[0] =~ /$FilterIn{'host'}/i) && (!$FilterEx{'host'} || $field[0] !~ /$FilterEx{'host'}/i)) { $loadrecord=1; } } elsif ($MonthRequired eq 'all' || $field[2] >= $MinHit{'Host'}) { if ($HTMLOutput{'unknownip'} && ($field[0] =~ /^\d+\.\d+\.\d+\.\d+$/ || $field[0] =~ /^[0-9A-F]*:/i)) { $loadrecord=1; } elsif ($HTMLOutput{'main'} && ($MonthRequired eq 'all' || $countloaded < $MaxNbOf{'HostsShown'})) { $loadrecord=1; } } } if ($loadrecord) { if ($field[1]) { $_host_p{$field[0]}+=$field[1]; } if ($field[2]) { $_host_h{$field[0]}+=$field[2]; } if ($field[3]) { $_host_k{$field[0]}+=$field[3]; } if ($field[4] && ! $_host_l{$field[0]}) { # We save last connexion params if not previously defined $_host_l{$field[0]}=int($field[4]); if ($withupdate) { # field[5] field[6] are used only for update if ($field[5] && ! $_host_s{$field[0]}) { $_host_s{$field[0]}=int($field[5]); } if ($field[6] && ! $_host_u{$field[0]}) { $_host_u{$field[0]}=$field[6]; } } } $countloaded++; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_VISITOR' || $field[0] eq "${xmleb}END_VISITOR" || ! $_); if ($field[0] ne 'END_VISITOR' && $field[0] ne "${xmleb}END_VISITOR") { error("History file \"$filetoread\" is corrupted (End of section VISITOR not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of VISITOR section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'visitor'}; # WE DO NOT SAVE SECTION NOW TO BE SURE TO HAVE THIS LARGE SECTION NOT AT THE BEGINNING OF FILE #if ($SectionsToSave{'visitor'}) { # Save_History('visitor',$year,$month,$date); delete $SectionsToSave{'visitor'}; # if ($withpurge) { %_host_p=(); %_host_h=(); %_host_k=(); %_host_l=(); %_host_s=(); %_host_u=(); } #} if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_UNKNOWNIP for backward compatibility if ($field[0] eq 'BEGIN_UNKNOWNIP') { my %iptomigrate=(); if ($Debug) { debug(" Begin of UNKNOWNIP section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'unknownip'}) { $iptomigrate{$field[0]}=$field[1]||0; $countloaded++; } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_UNKNOWNIP' || $field[0] eq "${xmleb}END_UNKNOWNIP" || ! $_); if ($field[0] ne 'END_UNKNOWNIP' && $field[0] ne "${xmleb}END_UNKNOWNIP") { error("History file \"$filetoread\" is corrupted (End of section UNKOWNIP not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of UNKOWNIP section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'visitor'}; # THIS SECTION IS NEVER SAVED. ONLY READ FOR MIGRATE AND CONVERTED INTO VISITOR SECTION foreach (keys %iptomigrate) { $_host_p{$_}+=int($_host_p{'Unknown'}/$countloaded); $_host_h{$_}+=int($_host_h{'Unknown'}/$countloaded); $_host_k{$_}+=int($_host_k{'Unknown'}/$countloaded); if ($iptomigrate{$_} > 0) { $_host_l{$_}=$iptomigrate{$_} }; } delete $_host_p{'Unknown'}; delete $_host_h{'Unknown'}; delete $_host_k{'Unknown'}; delete $_host_l{'Unknown'}; if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_LOGIN if ($field[0] eq 'BEGIN_LOGIN') { if ($Debug) { debug(" Begin of LOGIN section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'login'}) { $countloaded++; if ($field[1]) { $_login_p{$field[0]}+=$field[1]; } if ($field[2]) { $_login_h{$field[0]}+=$field[2]; } if ($field[3]) { $_login_k{$field[0]}+=$field[3]; } if (! $_login_l{$field[0]} && $field[4]) { $_login_l{$field[0]}=int($field[4]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_LOGIN' || $field[0] eq "${xmleb}END_LOGIN" || ! $_); if ($field[0] ne 'END_LOGIN' && $field[0] ne "${xmleb}END_LOGIN") { error("History file \"$filetoread\" is corrupted (End of section LOGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of LOGIN section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'login'}; if ($SectionsToSave{'login'}) { Save_History('login',$year,$month,$date); delete $SectionsToSave{'login'}; if ($withpurge) { %_login_p=(); %_login_h=(); %_login_k=(); %_login_l=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_DOMAIN if ($field[0] eq 'BEGIN_DOMAIN') { if ($Debug) { debug(" Begin of DOMAIN section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'domain'}) { $countloaded++; if ($field[1]) { $_domener_p{$field[0]}+=$field[1]; } if ($field[2]) { $_domener_h{$field[0]}+=$field[2]; } if ($field[3]) { $_domener_k{$field[0]}+=$field[3]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_DOMAIN' || $field[0] eq "${xmleb}END_DOMAIN" || ! $_); if ($field[0] ne 'END_DOMAIN' && $field[0] ne "${xmleb}END_DOMAIN") { error("History file \"$filetoread\" is corrupted (End of section DOMAIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of DOMAIN section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'domain'}; if ($SectionsToSave{'domain'}) { Save_History('domain',$year,$month,$date); delete $SectionsToSave{'domain'}; if ($withpurge) { %_domener_p=(); %_domener_h=(); %_domener_k=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_SESSION if ($field[0] eq 'BEGIN_SESSION') { if ($Debug) { debug(" Begin of SESSION section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'session'}) { $countloaded++; if ($field[1]) { $_session{$field[0]}+=$field[1]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_SESSION' || $field[0] eq "${xmleb}END_SESSION" || ! $_); if ($field[0] ne 'END_SESSION' && $field[0] ne "${xmleb}END_SESSION") { error("History file \"$filetoread\" is corrupted (End of section SESSION not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of SESSION section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'session'}; # WE DO NOT SAVE SECTION NOW BECAUSE VALUES CAN BE CHANGED AFTER READING VISITOR #if ($SectionsToSave{'session'}) { # Save_History('session',$year,$month,$date); delete $SectionsToSave{'session'}; } # if ($withpurge) { %_session=(); } #} if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_OS if ($field[0] eq 'BEGIN_OS') { if ($Debug) { debug(" Begin of OS section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'os'}) { $countloaded++; if ($field[1]) { $_os_h{$field[0]}+=$field[1]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_OS' || $field[0] eq "${xmleb}END_OS" || ! $_); if ($field[0] ne 'END_OS' && $field[0] ne "${xmleb}END_OS") { error("History file \"$filetoread\" is corrupted (End of section OS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of OS section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'os'}; if ($SectionsToSave{'os'}) { Save_History('os',$year,$month,$date); delete $SectionsToSave{'os'}; if ($withpurge) { %_os_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_BROWSER if ($field[0] eq 'BEGIN_BROWSER') { if ($Debug) { debug(" Begin of BROWSER section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'browser'}) { $countloaded++; if ($field[1]) { $_browser_h{$field[0]}+=$field[1]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_BROWSER' || $field[0] eq "${xmleb}END_BROWSER" || ! $_); if ($field[0] ne 'END_BROWSER' && $field[0] ne "${xmleb}END_BROWSER") { error("History file \"$filetoread\" is corrupted (End of section BROWSER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of BROWSER section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'browser'}; if ($SectionsToSave{'browser'}) { Save_History('browser',$year,$month,$date); delete $SectionsToSave{'browser'}; if ($withpurge) { %_browser_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_UNKNOWNREFERER if ($field[0] eq 'BEGIN_UNKNOWNREFERER') { if ($Debug) { debug(" Begin of UNKNOWNREFERER section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'unknownreferer'}) { $countloaded++; if (! $_unknownreferer_l{$field[0]}) { $_unknownreferer_l{$field[0]}=int($field[1]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_UNKNOWNREFERER' || $field[0] eq "${xmleb}END_UNKNOWNREFERER" || ! $_); if ($field[0] ne 'END_UNKNOWNREFERER' && $field[0] ne "${xmleb}END_UNKNOWNREFERER") { error("History file \"$filetoread\" is corrupted (End of section UNKNOWNREFERER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of UNKNOWNREFERER section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'unknownreferer'}; if ($SectionsToSave{'unknownreferer'}) { Save_History('unknownreferer',$year,$month,$date); delete $SectionsToSave{'unknownreferer'}; if ($withpurge) { %_unknownreferer_l=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_UNKNOWNREFERERBROWSER if ($field[0] eq 'BEGIN_UNKNOWNREFERERBROWSER') { if ($Debug) { debug(" Begin of UNKNOWNREFERERBROWSER section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'unknownrefererbrowser'}) { $countloaded++; if (! $_unknownrefererbrowser_l{$field[0]}) { $_unknownrefererbrowser_l{$field[0]}=int($field[1]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_UNKNOWNREFERERBROWSER' || $field[0] eq "${xmleb}END_UNKNOWNREFERERBROWSER" || ! $_); if ($field[0] ne 'END_UNKNOWNREFERERBROWSER' && $field[0] ne "${xmleb}END_UNKNOWNREFERERBROWSER") { error("History file \"$filetoread\" is corrupted (End of section UNKNOWNREFERERBROWSER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of UNKNOWNREFERERBROWSER section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'unknownrefererbrowser'}; if ($SectionsToSave{'unknownrefererbrowser'}) { Save_History('unknownrefererbrowser',$year,$month,$date); delete $SectionsToSave{'unknownrefererbrowser'}; if ($withpurge) { %_unknownrefererbrowser_l=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_SCREENSIZE if ($field[0] eq 'BEGIN_SCREENSIZE') { if ($Debug) { debug(" Begin of SCREENSIZE section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'screensize'}) { $countloaded++; if ($field[1]) { $_screensize_h{$field[0]}+=$field[1]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_SCREENSIZE' || $field[0] eq "${xmleb}END_SCREENSIZE" || ! $_); if ($field[0] ne 'END_SCREENSIZE' && $field[0] ne "${xmleb}END_SCREENSIZE") { error("History file \"$filetoread\" is corrupted (End of section SCREENSIZE not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of SCREENSIZE section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'screensize'}; if ($SectionsToSave{'screensize'}) { Save_History('screensize',$year,$month,$date); delete $SectionsToSave{'screensize'}; if ($withpurge) { %_screensize_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_ROBOT if ($field[0] eq 'BEGIN_ROBOT') { if ($Debug) { debug(" Begin of ROBOT section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'robot'}) { $countloaded++; if ($field[1]) { $_robot_h{$field[0]}+=$field[1]; } $_robot_k{$field[0]}+=$field[2]; if (! $_robot_l{$field[0]}) { $_robot_l{$field[0]}=int($field[3]); } if ($field[4]) { $_robot_r{$field[0]}+=$field[4]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_ROBOT' || $field[0] eq "${xmleb}END_ROBOT" || ! $_); if ($field[0] ne 'END_ROBOT' && $field[0] ne "${xmleb}END_ROBOT") { error("History file \"$filetoread\" is corrupted (End of section ROBOT not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of ROBOT section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'robot'}; if ($SectionsToSave{'robot'}) { Save_History('robot',$year,$month,$date); delete $SectionsToSave{'robot'}; if ($withpurge) { %_robot_h=(); %_robot_k=(); %_robot_l=(); %_robot_r=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_WORMS if ($field[0] eq 'BEGIN_WORMS') { if ($Debug) { debug(" Begin of WORMS section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'worms'}) { $countloaded++; if ($field[1]) { $_worm_h{$field[0]}+=$field[1]; } $_worm_k{$field[0]}+=$field[2]; if (! $_worm_l{$field[0]}) { $_worm_l{$field[0]}=int($field[3]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_WORMS' || $field[0] eq "${xmleb}END_WORMS" || ! $_); if ($field[0] ne 'END_WORMS' && $field[0] ne "${xmleb}END_WORMS") { error("History file \"$filetoread\" is corrupted (End of section WORMS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of WORMS section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'worms'}; if ($SectionsToSave{'worms'}) { Save_History('worms',$year,$month,$date); delete $SectionsToSave{'worms'}; if ($withpurge) { %_worm_h=(); %_worm_k=(); %_worm_l=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_EMAILS if ($field[0] eq 'BEGIN_EMAILSENDER') { if ($Debug) { debug(" Begin of EMAILSENDER section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'emailsender'}) { $countloaded++; if ($field[1]) { $_emails_h{$field[0]}+=$field[1]; } if ($field[2]) { $_emails_k{$field[0]}+=$field[2]; } if (! $_emails_l{$field[0]}) { $_emails_l{$field[0]}=int($field[3]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_EMAILSENDER' || $field[0] eq "${xmleb}END_EMAILSENDER" || ! $_); if ($field[0] ne 'END_EMAILSENDER' && $field[0] ne "${xmleb}END_EMAILSENDER") { error("History file \"$filetoread\" is corrupted (End of section EMAILSENDER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of EMAILSENDER section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'emailsender'}; if ($SectionsToSave{'emailsender'}) { Save_History('emailsender',$year,$month,$date); delete $SectionsToSave{'emailsender'}; if ($withpurge) { %_emails_h=(); %_emails_k=(); %_emails_l=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_EMAILR if ($field[0] eq 'BEGIN_EMAILRECEIVER') { if ($Debug) { debug(" Begin of EMAILRECEIVER section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'emailreceiver'}) { $countloaded++; if ($field[1]) { $_emailr_h{$field[0]}+=$field[1]; } if ($field[2]) { $_emailr_k{$field[0]}+=$field[2]; } if (! $_emailr_l{$field[0]}) { $_emailr_l{$field[0]}=int($field[3]); } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_EMAILRECEIVER' || $field[0] eq "${xmleb}END_EMAILRECEIVER" || ! $_); if ($field[0] ne 'END_EMAILRECEIVER' && $field[0] ne "${xmleb}END_EMAILRECEIVER") { error("History file \"$filetoread\" is corrupted (End of section EMAILRECEIVER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of EMAILRECEIVER section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'emailreceiver'}; if ($SectionsToSave{'emailreceiver'}) { Save_History('emailreceiver',$year,$month,$date); delete $SectionsToSave{'emailreceiver'}; if ($withpurge) { %_emailr_h=(); %_emailr_k=(); %_emailr_l=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_SIDER if ($field[0] eq 'BEGIN_SIDER') { if ($Debug) { debug(" Begin of SIDER section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'sider'}) { my $loadrecord=0; if ($withupdate) { $loadrecord=1; } else { if ($HTMLOutput{'main'}) { if ($MonthRequired eq 'all') { $loadrecord=1; } else { if ($countloaded < $MaxNbOf{'PageShown'} && $field[1] >= $MinHit{'File'}) { $loadrecord=1; } $TotalDifferentPages++; } } else { # This is for $HTMLOutput = urldetail, urlentry or urlexit if ($MonthRequired eq 'all' ) { if ((!$FilterIn{'url'} || $field[0] =~ /$FilterIn{'url'}/) && (!$FilterEx{'url'} || $field[0] !~ /$FilterEx{'url'}/)) { $loadrecord=1; } } else { if ((!$FilterIn{'url'} || $field[0] =~ /$FilterIn{'url'}/) && (!$FilterEx{'url'} || $field[0] !~ /$FilterEx{'url'}/) && $field[1] >= $MinHit{'File'}) { $loadrecord=1; } $TotalDifferentPages++; } } # Posssibilite de mettre if ($FilterIn{'url'} && $field[0] =~ /$FilterIn{'url'}/) mais il faut gerer TotalPages de la meme maniere $TotalBytesPages+=($field[2]||0); $TotalEntries+=($field[3]||0); $TotalExits+=($field[4]||0); } if ($loadrecord) { if ($field[1]) { $_url_p{$field[0]}+=$field[1]; } if ($field[2]) { $_url_k{$field[0]}+=$field[2]; } if ($field[3]) { $_url_e{$field[0]}+=$field[3]; } if ($field[4]) { $_url_x{$field[0]}+=$field[4]; } $countloaded++; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_SIDER' || $field[0] eq "${xmleb}END_SIDER" || ! $_); if ($field[0] ne 'END_SIDER' && $field[0] ne "${xmleb}END_SIDER") { error("History file \"$filetoread\" is corrupted (End of section SIDER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of SIDER section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'sider'}; # WE DO NOT SAVE SECTION NOW BECAUSE VALUES CAN BE CHANGED AFTER READING VISITOR #if ($SectionsToSave{'sider'}) { # Save_History('sider',$year,$month,$date); delete $SectionsToSave{'sider'}; # if ($withpurge) { %_url_p=(); %_url_k=(); %_url_e=(); %_url_x=(); } #} if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_FILETYPES if ($field[0] eq 'BEGIN_FILETYPES') { if ($Debug) { debug(" Begin of FILETYPES section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'filetypes'}) { $countloaded++; if ($field[1]) { $_filetypes_h{$field[0]}+=$field[1]; } if ($field[2]) { $_filetypes_k{$field[0]}+=$field[2]; } if ($field[3]) { $_filetypes_gz_in{$field[0]}+=$field[3]; } if ($field[4]) { $_filetypes_gz_out{$field[0]}+=$field[4]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_FILETYPES' || $field[0] eq "${xmleb}END_FILETYPES" || ! $_); if ($field[0] ne 'END_FILETYPES' && $field[0] ne "${xmleb}END_FILETYPES") { error("History file \"$filetoread\" is corrupted (End of section FILETYPES not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of FILETYPES section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'filetypes'}; if ($SectionsToSave{'filetypes'}) { Save_History('filetypes',$year,$month,$date); delete $SectionsToSave{'filetypes'}; if ($withpurge) { %_filetypes_h=(); %_filetypes_k=(); %_filetypes_gz_in=(); %_filetypes_gz_out=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_SEREFERRALS if ($field[0] eq 'BEGIN_SEREFERRALS') { if ($Debug) { debug(" Begin of SEREFERRALS section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'sereferrals'}) { $countloaded++; if ($versionnum < 5004) { # For history files < 5.4 my $se=$field[0]; $se=~s/\./\\./g; if ($SearchEnginesHashID{$se}) { $_se_referrals_h{$SearchEnginesHashID{$se}}+=$field[1]||0; } else { $_se_referrals_h{$field[0]}+=$field[1]||0; } } elsif ($versionnum < 5091) { # For history files < 5.91 my $se=$field[0]; $se=~s/\./\\./g; if ($SearchEnginesHashID{$se}) { $_se_referrals_p{$SearchEnginesHashID{$se}}+=$field[1]||0; $_se_referrals_h{$SearchEnginesHashID{$se}}+=$field[2]||0; } else { $_se_referrals_p{$field[0]}+=$field[1]||0; $_se_referrals_h{$field[0]}+=$field[2]||0; } } else { if ($field[1]) { $_se_referrals_p{$field[0]}+=$field[1]; } if ($field[2]) { $_se_referrals_h{$field[0]}+=$field[2]; } } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_SEREFERRALS' || $field[0] eq "${xmleb}END_SEREFERRALS" || ! $_); if ($field[0] ne 'END_SEREFERRALS' && $field[0] ne "${xmleb}END_SEREFERRALS") { error("History file \"$filetoread\" is corrupted (End of section SEREFERRALS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of SEREFERRALS section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'sereferrals'}; if ($SectionsToSave{'sereferrals'}) { Save_History('sereferrals',$year,$month,$date); delete $SectionsToSave{'sereferrals'}; if ($withpurge) { %_se_referrals_p=(); %_se_referrals_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_PAGEREFS if ($field[0] eq 'BEGIN_PAGEREFS') { if ($Debug) { debug(" Begin of PAGEREFS section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'pagerefs'}) { my $loadrecord=0; if ($withupdate) { $loadrecord=1; } else { if ((!$FilterIn{'refererpages'} || $field[0] =~ /$FilterIn{'refererpages'}/) && (!$FilterEx{'refererpages'} || $field[0] !~ /$FilterEx{'refererpages'}/)) { $loadrecord=1; } } if ($loadrecord) { if ($versionnum < 5004) { # For history files < 5.4 if ($field[1]) { $_pagesrefs_h{$field[0]}+=int($field[1]); } } else { if ($field[1]) { $_pagesrefs_p{$field[0]}+=int($field[1]); } if ($field[2]) { $_pagesrefs_h{$field[0]}+=int($field[2]); } } $countloaded++; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_PAGEREFS' || $field[0] eq "${xmleb}END_PAGEREFS" || ! $_); if ($field[0] ne 'END_PAGEREFS' && $field[0] ne "${xmleb}END_PAGEREFS") { error("History file \"$filetoread\" is corrupted (End of section PAGEREFS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of PAGEREFS section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'pagerefs'}; if ($SectionsToSave{'pagerefs'}) { Save_History('pagerefs',$year,$month,$date); delete $SectionsToSave{'pagerefs'}; if ($withpurge) { %_pagesrefs_p=(); %_pagesrefs_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_SEARCHWORDS if ($field[0] eq 'BEGIN_SEARCHWORDS') { if ($Debug) { debug(" Begin of SEARCHWORDS section ($MaxNbOf{'KeyphrasesShown'},$MinHit{'Keyphrase'})"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'searchwords'}) { my $loadrecord=0; if ($withupdate) { $loadrecord=1; } else { if ($HTMLOutput{'main'}) { if ($MonthRequired eq 'all') { $loadrecord=1; } else { if ($countloaded < $MaxNbOf{'KeyphrasesShown'} && $field[1] >= $MinHit{'Keyphrase'}) { $loadrecord=1; } $TotalDifferentKeyphrases++; $TotalKeyphrases+=($field[1]||0); } } elsif ($HTMLOutput{'keyphrases'}) { # Load keyphrases for keyphrases chart if ($MonthRequired eq 'all' ) { $loadrecord=1; } else { if ($field[1] >= $MinHit{'Keyphrase'}) { $loadrecord=1; } $TotalDifferentKeyphrases++; $TotalKeyphrases+=($field[1]||0); } } if ($HTMLOutput{'keywords'}) { # Load keyphrases for keywords chart $loadrecord=2; } } if ($loadrecord) { if ($field[1]) { if ($loadrecord==2) { foreach (split(/\+/,$field[0])) { # field[0] is "val1+val2+..." $_keywords{$_}+=$field[1]; } } else { $_keyphrases{$field[0]}+=$field[1]; } } $countloaded++; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_SEARCHWORDS' || $field[0] eq "${xmleb}END_SEARCHWORDS" || ! $_); if ($field[0] ne 'END_SEARCHWORDS' && $field[0] ne "${xmleb}END_SEARCHWORDS") { error("History file \"$filetoread\" is corrupted (End of section SEARCHWORDS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of SEARCHWORDS section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'searchwords'}; if ($SectionsToSave{'searchwords'}) { Save_History('searchwords',$year,$month,$date); delete $SectionsToSave{'searchwords'}; # This save searwords and keywords sections if ($withpurge) { %_keyphrases=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_KEYWORDS if ($field[0] eq 'BEGIN_KEYWORDS') { if ($Debug) { debug(" Begin of KEYWORDS section ($MaxNbOf{'KeywordsShown'},$MinHit{'Keyword'})"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'keywords'}) { my $loadrecord=0; if ($MonthRequired eq 'all') { $loadrecord=1; } else { if ($countloaded < $MaxNbOf{'KeywordsShown'} && $field[1] >= $MinHit{'Keyword'}) { $loadrecord=1; } $TotalDifferentKeywords++; $TotalKeywords+=($field[1]||0); } if ($loadrecord) { if ($field[1]) { $_keywords{$field[0]}+=$field[1]; } $countloaded++; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_KEYWORDS' || $field[0] eq "${xmleb}END_KEYWORDS" || ! $_); if ($field[0] ne 'END_KEYWORDS' && $field[0] ne "${xmleb}END_KEYWORDS") { error("History file \"$filetoread\" is corrupted (End of section KEYWORDS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of KEYWORDS section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'keywords'}; if ($SectionsToSave{'keywords'}) { Save_History('keywords',$year,$month,$date); delete $SectionsToSave{'keywords'}; if ($withpurge) { %_keywords=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_ERRORS if ($field[0] eq 'BEGIN_ERRORS') { if ($Debug) { debug(" Begin of ERRORS section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{'errors'}) { $countloaded++; if ($field[1]) { $_errors_h{$field[0]}+=$field[1]; } if ($field[2]) { $_errors_k{$field[0]}+=$field[2]; } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq 'END_ERRORS' || $field[0] eq "${xmleb}END_ERRORS" || ! $_); if ($field[0] ne 'END_ERRORS' && $field[0] ne "${xmleb}END_ERRORS") { error("History file \"$filetoread\" is corrupted (End of section ERRORS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of ERRORS section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{'errors'}; if ($SectionsToSave{'errors'}) { Save_History('errors',$year,$month,$date); delete $SectionsToSave{'errors'}; if ($withpurge) { %_errors_h=(); %_errors_k=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } # BEGIN_SIDER_xxx foreach my $code (keys %TrapInfosForHTTPErrorCodes) { if ($field[0] eq "BEGIN_SIDER_$code") { if ($Debug) { debug(" Begin of SIDER_$code section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; if ($SectionsToLoad{"sider_$code"}) { $countloaded++; if ($field[1]) { $_sider404_h{$field[0]}+=$field[1]; } if ($withupdate || $HTMLOutput{"errors$code"}) { if ($field[2]) { $_referer404_h{$field[0]}=$field[2]; } } } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq "END_SIDER_$code" || $field[0] eq "${xmleb}END_SIDER_$code" || ! $_); if ($field[0] ne "END_SIDER_$code" && $field[0] ne "${xmleb}END_SIDER_$code") { error("History file \"$filetoread\" is corrupted (End of section SIDER_$code not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of SIDER_$code section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{"sider_$code"}; if ($SectionsToSave{"sider_$code"}) { Save_History("sider_$code",$year,$month,$date); delete $SectionsToSave{"sider_$code"}; if ($withpurge) { %_sider404_h=(); %_referer404_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } } # BEGIN_EXTRA_xxx foreach my $extranum (1..@ExtraName-1) { if ($field[0] eq "BEGIN_EXTRA_$extranum") { if ($Debug) { debug(" Begin of EXTRA_$extranum"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0] ne '') { $count++; if ($SectionsToLoad{"extra_$extranum"}) { if ($ExtraStatTypes[$extranum] =~ /P/i && $field[1]) { ${'_section_' . $extranum . '_p'}{$field[0]}+=$field[1]; } ${'_section_' . $extranum . '_h'}{$field[0]}+=$field[2]; if ($ExtraStatTypes[$extranum] =~ /B/i && $field[3]) { ${'_section_' . $extranum . '_k'}{$field[0]}+=$field[3]; } if ($ExtraStatTypes[$extranum] =~ /L/i && ! ${'_section_' . $extranum . '_l'}{$field[0]} && $field[4]) { ${'_section_' . $extranum . '_l'}{$field[0]}=int($field[4]); } $countloaded++; } } $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq "END_EXTRA_$extranum" || $field[0] eq "${xmleb}END_EXTRA_$extranum" || ! $_); if ($field[0] ne "END_EXTRA_$extranum" && $field[0] ne "${xmleb}END_EXTRA_$extranum") { error("History file \"$filetoread\" is corrupted (End of section EXTRA_$extranum not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } if ($Debug) { debug(" End of EXTRA_$extranum section ($count entries, $countloaded loaded)"); } delete $SectionsToLoad{"extra_$extranum"}; if ($SectionsToSave{"extra_$extranum"}) { Save_History("extra_$extranum",$year,$month,$date); delete $SectionsToSave{"extra_$extranum"}; if ($withpurge) { %{'_section_' . $extranum . '_p'}=(); %{'_section_' . $extranum . '_h'}=(); %{'_section_' . $extranum . '_b'}=(); %{'_section_' . $extranum . '_l'}=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } } # BEGIN_PLUGINS if ($AtLeastOneSectionPlugin && $field[0] =~ /^BEGIN_PLUGIN_(\w+)$/i) { my $pluginname=$1; my $found=0; foreach (keys %{$PluginsLoaded{'SectionInitHashArray'}}) { if ($pluginname eq $_) { # The plugin for this section was loaded $found=1; my $issectiontoload=$SectionsToLoad{"plugin_$pluginname"}; # my $function="SectionReadHistory_$pluginname(\$issectiontoload,\$readxml,\$xmleb,\$countlines)"; # eval("$function"); my $function="SectionReadHistory_$pluginname"; &$function($issectiontoload,$readxml,$xmleb,$countlines); delete $SectionsToLoad{"plugin_$pluginname"}; if ($SectionsToSave{"plugin_$pluginname"}) { Save_History("plugin_$pluginname",$year,$month,$date); delete $SectionsToSave{"plugin_$pluginname"}; if ($withpurge) { # my $function="SectionInitHashArray_$pluginname()"; # eval("$function"); my $function="SectionInitHashArray_$pluginname"; &$function(); } } last; } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } # The plugin for this section was not loaded if (! $found) { do { $_=; chomp $_; s/\r//; @field=split(/\s+/,($readxml?XMLDecodeFromHisto($_):$_)); $countlines++; } until ($field[0] eq "END_PLUGIN_$pluginname" || $field[0] eq "${xmleb}END_PLUGIN_$pluginname" || ! $_); } next; } # For backward compatibility (ORIGIN section was "HitFromx" in old history files) if ($SectionsToLoad{'origin'}) { if ($field[0] eq 'HitFrom0') { $_from_p[0]+=0; $_from_h[0]+=$field[1]; next; } if ($field[0] eq 'HitFrom1') { $_from_p[1]+=0; $_from_h[1]+=$field[1]; next; } if ($field[0] eq 'HitFrom2') { $_from_p[2]+=0; $_from_h[2]+=$field[1]; next; } if ($field[0] eq 'HitFrom3') { $_from_p[3]+=0; $_from_h[3]+=$field[1]; next; } if ($field[0] eq 'HitFrom4') { $_from_p[4]+=0; $_from_h[4]+=$field[1]; next; } if ($field[0] eq 'HitFrom5') { $_from_p[5]+=0; $_from_h[5]+=$field[1]; next; } } } } if ($withupdate) { # Process rest of data saved in 'wait' arrays (data for hosts that are not in history file or no history file found) # This can change some values for day, sider and session sections if ($Debug) { debug(" Processing data in 'wait' arrays",3); } foreach (keys %_waithost_e) { if ($Debug) { debug(" Visit in 'wait' array for $_ is a new visit",4); } my $newtimehosts=($_waithost_s{$_}?$_waithost_s{$_}:$_host_s{$_}); my $newtimehostl=($_waithost_l{$_}?$_waithost_l{$_}:$_host_l{$_}); $_url_e{$_waithost_e{$_}}++; $newtimehosts =~ /^(\d\d\d\d\d\d\d\d)/; $DayVisits{$1}++; if ($_waithost_s{$_}) { # There was also a second session in processed log $_session{GetSessionRange($newtimehosts,$newtimehostl)}++; } } } # Write all unwrote sections in section order ('general','time', 'day','sider','session' and other...) if ($Debug) { debug(" Check and write all unwrote sections: ".join(',',keys %SectionsToSave),2); } foreach my $key (sort { $SectionsToSave{$a} <=> $SectionsToSave{$b} } keys %SectionsToSave) { Save_History("$key",$year,$month,$date,$lastlinenb,$lastlineoffset,$lastlinechecksum); } %SectionsToSave=(); # Update offset in map section and last data in general section then close files if ($withupdate) { if ($xml) { print HISTORYTMP "\n\n\n"; } # Update offset of sections in the MAP section foreach (sort { $PosInFile{$a} <=> $PosInFile{$b} } keys %ValueInFile) { if ($Debug) { debug(" Update offset of section $_=$ValueInFile{$_} in file at offset $PosInFile{$_}"); } if ($PosInFile{"$_"}) { seek(HISTORYTMP,$PosInFile{"$_"},0); print HISTORYTMP $ValueInFile{"$_"}; } } # Save last data in general sections if ($Debug) { debug(" Update MonthVisits=$MonthVisits{$year.$month} in file at offset $PosInFile{TotalVisits}"); } seek(HISTORYTMP,$PosInFile{"TotalVisits"},0); print HISTORYTMP $MonthVisits{$year.$month}; if ($Debug) { debug(" Update MonthUnique=$MonthUnique{$year.$month} in file at offset $PosInFile{TotalUnique}"); } seek(HISTORYTMP,$PosInFile{"TotalUnique"},0); print HISTORYTMP $MonthUnique{$year.$month}; if ($Debug) { debug(" Update MonthHostsKnown=$MonthHostsKnown{$year.$month} in file at offset $PosInFile{MonthHostsKnown}"); } seek(HISTORYTMP,$PosInFile{"MonthHostsKnown"},0); print HISTORYTMP $MonthHostsKnown{$year.$month}; if ($Debug) { debug(" Update MonthHostsUnknown=$MonthHostsUnknown{$year.$month} in file at offset $PosInFile{MonthHostsUnknown}"); } seek(HISTORYTMP,$PosInFile{"MonthHostsUnknown"},0); print HISTORYTMP $MonthHostsUnknown{$year.$month}; close(HISTORYTMP) || error("Failed to write temporary history file"); } if ($withread) { close(HISTORY) || error("Command for pipe '$filetoread' failed"); } # Purge data if ($withpurge) { &Init_HashArray(); } # If update, rename tmp file bis into tmp file or set HistoryAlreadyFlushed if ($withupdate) { if ($HistoryAlreadyFlushed{"$year$month$day$hour"}) { debug("Rename tmp history file bis '$filetoread' to '$filetowrite'"); if (rename($filetowrite,$filetoread)==0) { error("Failed to update tmp history file $filetoread"); } } else { $HistoryAlreadyFlushed{"$year$month$day$hour"}=1; } if (! $ListOfYears{"$year"} || $ListOfYears{"$year"} lt "$month") { $ListOfYears{"$year"}="$month"; } } # For backward compatibility, if LastLine does not exist, set to LastTime $LastLine||=$LastTime{$date}; return ($withupdate?"$filetowrite":""); } #------------------------------------------------------------------------------ # Function: Save a part of history file # Parameters: sectiontosave,year,month,breakdate[,lastlinenb,lastlineoffset,lastlinechecksum] # Input: $VERSION HISTORYTMP $nowyear $nowmonth $nowday $nowhour $nowmin $nowsec $LastLineNumber $LastLineOffset $LastLineChecksum # Output: None # Return: None #------------------------------------------------------------------------------ sub Save_History { my $sectiontosave=shift||''; my $year=shift||''; my $month=shift||''; my $breakdate=shift||''; my $xml=($BuildHistoryFormat eq 'xml'?1:0); my ($xmlbb,$xmlbs,$xmlbe,$xmlhb,$xmlhs,$xmlhe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=('','','','','','','','','','',''); if ($xml) { ($xmlbb,$xmlbs,$xmlbe,$xmlhb,$xmlhs,$xmlhe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=("
    \n",'','','','','
    ','','
    ','','
    ',"\n
    " ); } else { $xmlbs=' '; $xmlhs=' '; $xmlrs=' '; } my $lastlinenb=shift||0; my $lastlineoffset=shift||0; my $lastlinechecksum=shift||0; if (! $lastlinenb) { # This happens for migrate $lastlinenb=$LastLineNumber; $lastlineoffset=$LastLineOffset; $lastlinechecksum=$LastLineChecksum; } if ($Debug) { debug(" Save_History [sectiontosave=$sectiontosave,year=$year,month=$month,breakdate=$breakdate,lastlinenb=$lastlinenb,lastlineoffset=$lastlineoffset,lastlinechecksum=$lastlinechecksum]",1); } my $spacebar=" "; my %keysinkeylist=(); # Header if ($sectiontosave eq 'header') { if ($xml) { print HISTORYTMP "\n"; } print HISTORYTMP "AWSTATS DATA FILE $VERSION\n"; if ($xml) { print HISTORYTMP "\n"; } print HISTORYTMP "# If you remove this file, all statistics for date $breakdate will be lost/reset.\n"; if ($xml) { print HISTORYTMP "\n"; } print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Position (offset in bytes) in this file of beginning of each section for\n"; print HISTORYTMP "# direct I/O access. If you made changes somewhere in this file, you should\n"; print HISTORYTMP "# also remove completely the MAP section (AWStats will rewrite it at next\n"; print HISTORYTMP "# update).\n"; print HISTORYTMP "${xmlbb}BEGIN_MAP${xmlbs}".(26+(scalar keys %TrapInfosForHTTPErrorCodes)+(scalar @ExtraName?scalar @ExtraName-1:0)+(scalar keys %{$PluginsLoaded{'SectionInitHashArray'}}))."${xmlbe}\n"; print HISTORYTMP "${xmlrb}POS_GENERAL${xmlrs}";$PosInFile{"general"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; # When print HISTORYTMP "${xmlrb}POS_TIME${xmlrs}";$PosInFile{"time"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_VISITOR${xmlrs}";$PosInFile{"visitor"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_DAY${xmlrs}";$PosInFile{"day"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; # Who print HISTORYTMP "${xmlrb}POS_DOMAIN${xmlrs}";$PosInFile{"domain"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_LOGIN${xmlrs}";$PosInFile{"login"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_ROBOT${xmlrs}";$PosInFile{"robot"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_WORMS${xmlrs}";$PosInFile{"worms"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_EMAILSENDER${xmlrs}";$PosInFile{"emailsender"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_EMAILRECEIVER${xmlrs}";$PosInFile{"emailreceiver"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; # Navigation print HISTORYTMP "${xmlrb}POS_SESSION${xmlrs}";$PosInFile{"session"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SIDER${xmlrs}";$PosInFile{"sider"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_FILETYPES${xmlrs}";$PosInFile{"filetypes"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_OS${xmlrs}";$PosInFile{"os"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_BROWSER${xmlrs}";$PosInFile{"browser"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SCREENSIZE${xmlrs}";$PosInFile{"screensize"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_UNKNOWNREFERER${xmlrs}";$PosInFile{'unknownreferer'}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_UNKNOWNREFERERBROWSER${xmlrs}";$PosInFile{'unknownrefererbrowser'}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; # Referers print HISTORYTMP "${xmlrb}POS_ORIGIN${xmlrs}";$PosInFile{"origin"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SEREFERRALS${xmlrs}";$PosInFile{"sereferrals"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_PAGEREFS${xmlrs}";$PosInFile{"pagerefs"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SEARCHWORDS${xmlrs}";$PosInFile{"searchwords"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_KEYWORDS${xmlrs}";$PosInFile{"keywords"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; # Others print HISTORYTMP "${xmlrb}POS_MISC${xmlrs}";$PosInFile{"misc"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_ERRORS${xmlrs}";$PosInFile{"errors"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_CLUSTER${xmlrs}";$PosInFile{"cluster"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; foreach (keys %TrapInfosForHTTPErrorCodes) { print HISTORYTMP "${xmlrb}POS_SIDER_$_${xmlrs}";$PosInFile{"sider_$_"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; } foreach (1..@ExtraName-1) { print HISTORYTMP "${xmlrb}POS_EXTRA_$_${xmlrs}";$PosInFile{"extra_$_"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; } foreach (keys %{$PluginsLoaded{'SectionInitHashArray'}}) { print HISTORYTMP "${xmlrb}POS_PLUGIN_$_${xmlrs}";$PosInFile{"plugin_$_"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; } print HISTORYTMP "${xmleb}END_MAP${xmlee}\n"; } # General if ($sectiontosave eq 'general') { if ($LastUpdate < int("$nowyear$nowmonth$nowday$nowhour$nowmin$nowsec")) { $LastUpdate=int("$nowyear$nowmonth$nowday$nowhour$nowmin$nowsec"); } print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# LastLine = Date of last record processed - Last record line number in last log - Last record offset in last log - Last record signature value\n"; print HISTORYTMP "# FirstTime = Date of first visit for history file\n"; print HISTORYTMP "# LastTime = Date of last visit for history file\n"; print HISTORYTMP "# LastUpdate = Date of last update - Nb of parsed records - Nb of parsed old records - Nb of parsed new records - Nb of parsed corrupted - Nb of parsed dropped\n"; print HISTORYTMP "# TotalVisits = Number of visits\n"; print HISTORYTMP "# TotalUnique = Number of unique visitors\n"; print HISTORYTMP "# MonthHostsKnown = Number of hosts known\n"; print HISTORYTMP "# MonthHostsUnKnown = Number of hosts unknown\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_GENERAL${xmlbs}8${xmlbe}\n"; print HISTORYTMP "${xmlrb}LastLine${xmlrs}".($LastLine>0?$LastLine:$LastTime{$breakdate})." $lastlinenb $lastlineoffset $lastlinechecksum${xmlre}\n"; print HISTORYTMP "${xmlrb}FirstTime${xmlrs}".$FirstTime{$breakdate}."${xmlre}\n"; print HISTORYTMP "${xmlrb}LastTime${xmlrs}".$LastTime{$breakdate}."${xmlre}\n"; print HISTORYTMP "${xmlrb}LastUpdate${xmlrs}$LastUpdate $NbOfLinesParsed $NbOfOldLines $NbOfNewLines $NbOfLinesCorrupted $NbOfLinesDropped${xmlre}\n"; print HISTORYTMP "${xmlrb}TotalVisits${xmlrs}";$PosInFile{"TotalVisits"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}TotalUnique${xmlrs}";$PosInFile{"TotalUnique"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}MonthHostsKnown${xmlrs}";$PosInFile{"MonthHostsKnown"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}MonthHostsUnknown${xmlrs}";$PosInFile{"MonthHostsUnknown"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmleb}".(${xmleb}?"\n":"")."END_GENERAL${xmlee}\n"; # END_GENERAL on a new line following xml tag because END_ detection does not work like other sections } # When if ($sectiontosave eq 'time') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Hour - Pages - Hits - Bandwidth - Not viewed Pages - Not viewed Hits - Not viewed Bandwidth\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_TIME${xmlbs}24${xmlbe}\n"; for (my $ix=0; $ix<=23; $ix++) { print HISTORYTMP "${xmlrb}$ix${xmlrs}".int($_time_p[$ix])."${xmlrs}".int($_time_h[$ix])."${xmlrs}".int($_time_k[$ix])."${xmlrs}".int($_time_nv_p[$ix])."${xmlrs}".int($_time_nv_h[$ix])."${xmlrs}".int($_time_nv_k[$ix])."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_TIME${xmlee}\n"; } if ($sectiontosave eq 'day') { # This section must be saved after VISITOR section is read print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Date - Pages - Hits - Bandwidth - Visits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_DAY${xmlbs}".(scalar keys %DayHits)."${xmlbe}\n"; my $monthvisits=0; foreach (sort keys %DayHits) { if ($_ =~ /^$year$month/i) { # Found a day entry of the good month my $page=$DayPages{$_}||0; my $hits=$DayHits{$_}||0; my $bytes=$DayBytes{$_}||0; my $visits=$DayVisits{$_}||0; print HISTORYTMP "${xmlrb}$_${xmlrs}$page${xmlrs}$hits${xmlrs}$bytes${xmlrs}$visits${xmlre}\n"; $monthvisits+=$visits; } } $MonthVisits{$year.$month}=$monthvisits; print HISTORYTMP "${xmleb}END_DAY${xmlee}\n"; } # Who if ($sectiontosave eq 'domain') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'Domain'}\n"; } print HISTORYTMP "# Domain - Pages - Hits - Bandwidth\n"; print HISTORYTMP "# The $MaxNbOf{'Domain'} first Pages must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_DOMAIN${xmlbs}".(scalar keys %_domener_h)."${xmlbe}\n"; # We save page list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'Domain'},$MinHit{'Domain'},\%_domener_h,\%_domener_p); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; my $page=$_domener_p{$_}||0; my $bytes=$_domener_k{$_}||0; # ||0 could be commented to reduce history file size print HISTORYTMP "${xmlrb}$_${xmlrs}$page${xmlrs}$_domener_h{$_}${xmlrs}$bytes${xmlre}\n"; } foreach (keys %_domener_h) { if ($keysinkeylist{$_}) { next; } my $page=$_domener_p{$_}||0; my $bytes=$_domener_k{$_}||0; # ||0 could be commented to reduce history file size print HISTORYTMP "${xmlrb}$_${xmlrs}$page${xmlrs}$_domener_h{$_}${xmlrs}$bytes${xmlre}\n"; } print HISTORYTMP "${xmleb}END_DOMAIN${xmlee}\n"; } if ($sectiontosave eq 'visitor') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'HostsShown'}\n"; } print HISTORYTMP "# Host - Pages - Hits - Bandwidth - Last visit date - [Start date of last visit] - [Last page of last visit]\n"; print HISTORYTMP "# [Start date of last visit] and [Last page of last visit] are saved only if session is not finished\n"; print HISTORYTMP "# The $MaxNbOf{'HostsShown'} first Hits must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_VISITOR${xmlbs}".(scalar keys %_host_h)."${xmlbe}\n"; my $monthhostsknown=0; # We save page list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'HostsShown'},$MinHit{'Host'},\%_host_h,\%_host_p); my %keysinkeylist=(); foreach my $key (@keylist) { if ($key !~ /^\d+\.\d+\.\d+\.\d+$/ && $key !~ /^[0-9A-F]*:/i) { $monthhostsknown++; } $keysinkeylist{$key}=1; my $page=$_host_p{$key}||0; my $bytes=$_host_k{$key}||0; my $timehostl=$_host_l{$key}||0; my $timehosts=$_host_s{$key}||0; my $lastpage=$_host_u{$key}||''; if ($timehostl && $timehosts && $lastpage) { if (($timehostl+$VISITTIMEOUT) < $LastLine) { # Session for this user is expired if ($timehosts) { $_session{GetSessionRange($timehosts,$timehostl)}++; } if ($lastpage) { $_url_x{$lastpage}++; } delete $_host_s{$key}; delete $_host_u{$key}; print HISTORYTMP "${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlre}\n"; } else { # If this user has started a new session that is not expired print HISTORYTMP "${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlrs}$timehosts${xmlrs}$lastpage${xmlre}\n"; } } else { my $hostl=$timehostl||''; print HISTORYTMP "${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$hostl${xmlre}\n"; } } foreach my $key (keys %_host_h) { if ($keysinkeylist{$key}) { next; } if ($key !~ /^\d+\.\d+\.\d+\.\d+$/ && $key !~ /^[0-9A-F]*:/i) { $monthhostsknown++; } my $page=$_host_p{$key}||0; my $bytes=$_host_k{$key}||0; my $timehostl=$_host_l{$key}||0; my $timehosts=$_host_s{$key}||0; my $lastpage=$_host_u{$key}||''; if ($timehostl && $timehosts && $lastpage) { if (($timehostl+$VISITTIMEOUT) < $LastLine) { # Session for this user is expired if ($timehosts) { $_session{GetSessionRange($timehosts,$timehostl)}++; } if ($lastpage) { $_url_x{$lastpage}++; } delete $_host_s{$key}; delete $_host_u{$key}; print HISTORYTMP "${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlre}\n"; } else { # If this user has started a new session that is not expired print HISTORYTMP "${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlrs}$timehosts${xmlrs}$lastpage${xmlre}\n"; } } else { my $hostl=$timehostl||''; print HISTORYTMP "${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$hostl${xmlre}\n"; } } $MonthUnique{$year.$month}=(scalar keys %_host_p); $MonthHostsKnown{$year.$month}=$monthhostsknown; $MonthHostsUnknown{$year.$month}=(scalar keys %_host_h) - $monthhostsknown; print HISTORYTMP "${xmleb}END_VISITOR${xmlee}\n"; } if ($sectiontosave eq 'login') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'LoginShown'}\n"; } print HISTORYTMP "# Login - Pages - Hits - Bandwidth - Last visit\n"; print HISTORYTMP "# The $MaxNbOf{'LoginShown'} first Pages must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_LOGIN${xmlbs}".(scalar keys %_login_h)."${xmlbe}\n"; # We save login list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'LoginShown'},$MinHit{'Login'},\%_login_h,\%_login_p); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_login_p{$_}||0)."${xmlrs}".int($_login_h{$_}||0)."${xmlrs}".int($_login_k{$_}||0)."${xmlrs}".($_login_l{$_}||'')."${xmlre}\n"; } foreach (keys %_login_h) { if ($keysinkeylist{$_}) { next; } print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_login_p{$_}||0)."${xmlrs}".int($_login_h{$_}||0)."${xmlrs}".int($_login_k{$_}||0)."${xmlrs}".($_login_l{$_}||'')."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_LOGIN${xmlee}\n"; } if ($sectiontosave eq 'robot') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'RobotShown'}\n"; } print HISTORYTMP "# Robot ID - Hits - Bandwidth - Last visit - Hits on robots.txt\n"; print HISTORYTMP "# The $MaxNbOf{'RobotShown'} first Hits must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_ROBOT${xmlbs}".(scalar keys %_robot_h)."${xmlbe}\n"; # We save robot list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'RobotShown'},$MinHit{'Robot'},\%_robot_h,\%_robot_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_robot_h{$_})."${xmlrs}".int($_robot_k{$_})."${xmlrs}$_robot_l{$_}${xmlrs}".int($_robot_r{$_}||0)."${xmlre}\n"; } foreach (keys %_robot_h) { if ($keysinkeylist{$_}) { next; } print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_robot_h{$_})."${xmlrs}".int($_robot_k{$_})."${xmlrs}$_robot_l{$_}${xmlrs}".int($_robot_r{$_}||0)."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_ROBOT${xmlee}\n"; } if ($sectiontosave eq 'worms') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'WormsShown'}\n"; } print HISTORYTMP "# Worm ID - Hits - Bandwidth - Last visit\n"; print HISTORYTMP "# The $MaxNbOf{'WormsShown'} first Hits must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_WORMS${xmlbs}".(scalar keys %_worm_h)."${xmlbe}\n"; # We save worm list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'WormsShown'},$MinHit{'Worm'},\%_worm_h,\%_worm_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_worm_h{$_})."${xmlrs}".int($_worm_k{$_})."${xmlrs}$_worm_l{$_}${xmlre}\n"; } foreach (keys %_worm_h) { if ($keysinkeylist{$_}) { next; } print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_worm_h{$_})."${xmlrs}".int($_worm_k{$_})."${xmlrs}$_worm_l{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_WORMS${xmlee}\n"; } if ($sectiontosave eq 'emailsender') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'EMailsShown'}\n"; } print HISTORYTMP "# EMail - Hits - Bandwidth - Last visit\n"; print HISTORYTMP "# The $MaxNbOf{'EMailsShown'} first Hits must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_EMAILSENDER${xmlbs}".(scalar keys %_emails_h)."${xmlbe}\n"; # We save sender email list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'EMailsShown'},$MinHit{'EMail'},\%_emails_h,\%_emails_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_emails_h{$_}||0)."${xmlrs}".int($_emails_k{$_}||0)."${xmlrs}$_emails_l{$_}${xmlre}\n"; } foreach (keys %_emails_h) { if ($keysinkeylist{$_}) { next; } print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_emails_h{$_}||0)."${xmlrs}".int($_emails_k{$_}||0)."${xmlrs}$_emails_l{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_EMAILSENDER${xmlee}\n"; } if ($sectiontosave eq 'emailreceiver') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'EMailsShown'}\n"; } print HISTORYTMP "# EMail - Hits - Bandwidth - Last visit\n"; print HISTORYTMP "# The $MaxNbOf{'EMailsShown'} first hits must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_EMAILRECEIVER${xmlbs}".(scalar keys %_emailr_h)."${xmlbe}\n"; # We save receiver email list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'EMailsShown'},$MinHit{'EMail'},\%_emailr_h,\%_emailr_h); my %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_emailr_h{$_}||0)."${xmlrs}".int($_emailr_k{$_}||0)."${xmlrs}$_emailr_l{$_}${xmlre}\n"; } foreach (keys %_emailr_h) { if ($keysinkeylist{$_}) { next; } print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_emailr_h{$_}||0)."${xmlrs}".int($_emailr_k{$_}||0)."${xmlrs}$_emailr_l{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_EMAILRECEIVER${xmlee}\n"; } # Navigation if ($sectiontosave eq 'session') { # This section must be saved after VISITOR section is read print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Session range - Number of visits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_SESSION${xmlbs}".(scalar keys %_session)."${xmlbe}\n"; foreach (keys %_session) { print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_session{$_})."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_SESSION${xmlee}\n"; } if ($sectiontosave eq 'sider') { # This section must be saved after VISITOR section is read print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'PageShown'}\n"; } print HISTORYTMP "# URL - Pages - Bandwidth - Entry - Exit\n"; print HISTORYTMP "# The $MaxNbOf{'PageShown'} first Pages must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_SIDER${xmlbs}".(scalar keys %_url_p)."${xmlbe}\n"; # We save page list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'PageShown'},$MinHit{'File'},\%_url_p,\%_url_p); %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; my $newkey=$_; $newkey =~ s/([^:])\/\//$1\//g; # Because some targeted url were taped with 2 / (Ex: //rep//file.htm). We must keep http://rep/file.htm print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($newkey)."${xmlrs}".int($_url_p{$_}||0)."${xmlrs}".int($_url_k{$_}||0)."${xmlrs}".int($_url_e{$_}||0)."${xmlrs}".int($_url_x{$_}||0)."${xmlre}\n"; } foreach (keys %_url_p) { if ($keysinkeylist{$_}) { next; } my $newkey=$_; $newkey =~ s/([^:])\/\//$1\//g; # Because some targeted url were taped with 2 / (Ex: //rep//file.htm). We must keep http://rep/file.htm print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($newkey)."${xmlrs}".int($_url_p{$_}||0)."${xmlrs}".int($_url_k{$_}||0)."${xmlrs}".int($_url_e{$_}||0)."${xmlrs}".int($_url_x{$_}||0)."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_SIDER${xmlee}\n"; } if ($sectiontosave eq 'filetypes') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Files type - Hits - Bandwidth - Bandwidth without compression - Bandwidth after compression\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_FILETYPES${xmlbs}".(scalar keys %_filetypes_h)."${xmlbe}\n"; foreach (keys %_filetypes_h) { my $hits=$_filetypes_h{$_}||0; my $bytes=$_filetypes_k{$_}||0; my $bytesbefore=$_filetypes_gz_in{$_}||0; my $bytesafter=$_filetypes_gz_out{$_}||0; print HISTORYTMP "${xmlrb}$_${xmlrs}$hits${xmlrs}$bytes${xmlrs}$bytesbefore${xmlrs}$bytesafter${xmlre}\n"; } print HISTORYTMP "${xmleb}END_FILETYPES${xmlee}\n"; } if ($sectiontosave eq 'os') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# OS ID - Hits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_OS${xmlbs}".(scalar keys %_os_h)."${xmlbe}\n"; foreach (keys %_os_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}$_os_h{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_OS${xmlee}\n"; } if ($sectiontosave eq 'browser') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Browser ID - Hits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_BROWSER${xmlbs}".(scalar keys %_browser_h)."${xmlbe}\n"; foreach (keys %_browser_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}$_browser_h{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_BROWSER${xmlee}\n"; } if ($sectiontosave eq 'screensize') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Screen size - Hits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_SCREENSIZE${xmlbs}".(scalar keys %_screensize_h)."${xmlbe}\n"; foreach (keys %_screensize_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}$_screensize_h{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_SCREENSIZE${xmlee}\n"; } # Referer if ($sectiontosave eq 'unknownreferer') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Unknown referer OS - Last visit date\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_UNKNOWNREFERER${xmlbs}".(scalar keys %_unknownreferer_l)."${xmlbe}\n"; foreach (keys %_unknownreferer_l) { print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($_)."${xmlrs}$_unknownreferer_l{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_UNKNOWNREFERER${xmlee}\n"; } if ($sectiontosave eq 'unknownrefererbrowser') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Unknown referer Browser - Last visit date\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_UNKNOWNREFERERBROWSER${xmlbs}".(scalar keys %_unknownrefererbrowser_l)."${xmlbe}\n"; foreach (keys %_unknownrefererbrowser_l) { print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($_)."${xmlrs}$_unknownrefererbrowser_l{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_UNKNOWNREFERERBROWSER${xmlee}\n"; } if ($sectiontosave eq 'origin') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Origin - Pages - Hits \n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_ORIGIN${xmlbs}6"."${xmlbe}\n"; print HISTORYTMP "${xmlrb}From0${xmlrs}".int($_from_p[0])."${xmlrs}".int($_from_h[0])."${xmlre}\n"; print HISTORYTMP "${xmlrb}From1${xmlrs}".int($_from_p[1])."${xmlrs}".int($_from_h[1])."${xmlre}\n"; print HISTORYTMP "${xmlrb}From2${xmlrs}".int($_from_p[2])."${xmlrs}".int($_from_h[2])."${xmlre}\n"; print HISTORYTMP "${xmlrb}From3${xmlrs}".int($_from_p[3])."${xmlrs}".int($_from_h[3])."${xmlre}\n"; print HISTORYTMP "${xmlrb}From4${xmlrs}".int($_from_p[4])."${xmlrs}".int($_from_h[4])."${xmlre}\n"; # Same site print HISTORYTMP "${xmlrb}From5${xmlrs}".int($_from_p[5])."${xmlrs}".int($_from_h[5])."${xmlre}\n"; # News print HISTORYTMP "${xmleb}END_ORIGIN${xmlee}\n"; } if ($sectiontosave eq 'sereferrals') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Search engine referers ID - Pages - Hits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_SEREFERRALS${xmlbs}".(scalar keys %_se_referrals_h)."${xmlbe}\n"; foreach (keys %_se_referrals_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_se_referrals_p{$_}||0)."${xmlrs}$_se_referrals_h{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_SEREFERRALS${xmlee}\n"; } if ($sectiontosave eq 'pagerefs') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'RefererShown'}\n"; } print HISTORYTMP "# External page referers - Pages - Hits\n"; print HISTORYTMP "# The $MaxNbOf{'RefererShown'} first Pages must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_PAGEREFS${xmlbs}".(scalar keys %_pagesrefs_h)."${xmlbe}\n"; # We save page list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'RefererShown'},$MinHit{'Refer'},\%_pagesrefs_h,\%_pagesrefs_p); %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; my $newkey=$_; $newkey =~ s/^http(s|):\/\/([^\/]+)\/$/http$1:\/\/$2/i; # Remove / at end of http://.../ but not at end of http://.../dir/ print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($newkey)."${xmlrs}".int($_pagesrefs_p{$_}||0)."${xmlrs}$_pagesrefs_h{$_}${xmlre}\n"; } foreach (keys %_pagesrefs_h) { if ($keysinkeylist{$_}) { next; } my $newkey=$_; $newkey =~ s/^http(s|):\/\/([^\/]+)\/$/http$1:\/\/$2/i; # Remove / at end of http://.../ but not at end of http://.../dir/ print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($newkey)."${xmlrs}".int($_pagesrefs_p{$_}||0)."${xmlrs}$_pagesrefs_h{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_PAGEREFS${xmlee}\n"; } if ($sectiontosave eq 'searchwords') { # Save phrases section print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'KeyphrasesShown'}\n"; } print HISTORYTMP "# Search keyphrases - Number of search\n"; print HISTORYTMP "# The $MaxNbOf{'KeyphrasesShown'} first number of search must be first (order not required for others)\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_SEARCHWORDS${xmlbs}".(scalar keys %_keyphrases)."${xmlbe}\n"; # We will also build _keywords %_keywords=(); # We save key list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'KeywordsShown'},$MinHit{'Keyword'},\%_keyphrases,\%_keyphrases); %keysinkeylist=(); foreach my $key (@keylist) { $keysinkeylist{$key}=1; my $keyphrase=$key; $keyphrase =~ tr/ /\+/s; print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($keyphrase)."${xmlrs}".$_keyphrases{$key}."${xmlre}\n"; foreach (split(/\+/,$key)) { $_keywords{$_}+=$_keyphrases{$key}; } # To init %_keywords } foreach my $key (keys %_keyphrases) { if ($keysinkeylist{$key}) { next; } my $keyphrase=$key; $keyphrase =~ tr/ /\+/s; print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($keyphrase)."${xmlrs}".$_keyphrases{$key}."${xmlre}\n"; foreach (split(/\+/,$key)) { $_keywords{$_}+=$_keyphrases{$key}; } # To init %_keywords } print HISTORYTMP "${xmleb}END_SEARCHWORDS${xmlee}\n"; # Now save keywords section print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOf{'KeywordsShown'}\n"; } print HISTORYTMP "# Search keywords - Number of search\n"; print HISTORYTMP "# The $MaxNbOf{'KeywordsShown'} first number of search must be first (order not required for others)\n"; $ValueInFile{"keywords"}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_KEYWORDS${xmlbs}".(scalar keys %_keywords)."${xmlbe}\n"; # We save key list in score sorted order to get a -output faster and with less use of memory. &BuildKeyList($MaxNbOf{'KeywordsShown'},$MinHit{'Keyword'},\%_keywords,\%_keywords); %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; my $keyword=$_; print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($keyword)."${xmlrs}".$_keywords{$_}."${xmlre}\n"; } foreach (keys %_keywords) { if ($keysinkeylist{$_}) { next; } my $keyword=$_; print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($keyword)."${xmlrs}".$_keywords{$_}."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_KEYWORDS${xmlee}\n"; } # Other - Errors if ($sectiontosave eq 'cluster') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Cluster ID - Pages - Hits - Bandwidth\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_CLUSTER${xmlbs}".(scalar keys %_cluster_h)."${xmlbe}\n"; foreach (keys %_cluster_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_cluster_p{$_}||0)."${xmlrs}".int($_cluster_h{$_}||0)."${xmlrs}".int($_cluster_k{$_}||0)."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_CLUSTER${xmlee}\n"; } if ($sectiontosave eq 'misc') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Misc ID - Pages - Hits - Bandwidth\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_MISC${xmlbs}".(scalar keys %MiscListCalc)."${xmlbe}\n"; foreach (keys %MiscListCalc) { print HISTORYTMP "${xmlrb}$_${xmlrs}".int($_misc_p{$_}||0)."${xmlrs}".int($_misc_h{$_}||0)."${xmlrs}".int($_misc_k{$_}||0)."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_MISC${xmlee}\n"; } if ($sectiontosave eq 'errors') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# Errors - Hits - Bandwidth\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_ERRORS${xmlbs}".(scalar keys %_errors_h)."${xmlbe}\n"; foreach (keys %_errors_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}$_errors_h{$_}${xmlrs}".int($_errors_k{$_}||0)."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_ERRORS${xmlee}\n"; } # Other - Trapped errors foreach my $code (keys %TrapInfosForHTTPErrorCodes) { if ($sectiontosave eq "sider_$code") { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    \n"; } print HISTORYTMP "# URL with $code errors - Hits - Last URL referer\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_SIDER_$code${xmlbs}".(scalar keys %_sider404_h)."${xmlbe}\n"; foreach (keys %_sider404_h) { my $newkey=$_; my $newreferer=$_referer404_h{$_}||''; print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($newkey)."${xmlrs}$_sider404_h{$_}${xmlrs}".XMLEncodeForHisto($newreferer)."${xmlre}\n"; } print HISTORYTMP "${xmleb}END_SIDER_$code${xmlee}\n"; } } # Other - Extra stats sections foreach my $extranum (1..@ExtraName-1) { if ($sectiontosave eq "extra_$extranum") { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
    $MaxNbOfExtra[$extranum]\n"; } print HISTORYTMP "# Extra key - Pages - Hits - Bandwidth - Last access\n"; print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_EXTRA_$extranum${xmlbs}".scalar (keys %{'_section_' . $extranum . '_h'})."${xmlbe}\n"; &BuildKeyList($MaxNbOfExtra[$extranum],$MinHitExtra[$extranum],\%{'_section_' . $extranum . '_h'},\%{'_section_' . $extranum . '_p'}); %keysinkeylist=(); foreach (@keylist) { $keysinkeylist{$_}=1; my $page=${'_section_' . $extranum . '_p'}{$_}||0; my $bytes=${'_section_' . $extranum . '_k'}{$_}||0; my $lastaccess=${'_section_' . $extranum . '_l'}{$_}||''; print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($_)."${xmlrs}$page${xmlrs}", ${'_section_' . $extranum . '_h'}{$_}, "${xmlrs}$bytes${xmlrs}$lastaccess${xmlre}\n"; next; } foreach (keys %{'_section_' . $extranum . '_h'}) { if ($keysinkeylist{$_}) { next; } my $page=${'_section_' . $extranum . '_p'}{$_}||0; my $bytes=${'_section_' . $extranum . '_k'}{$_}||0; my $lastaccess=${'_section_' . $extranum . '_l'}{$_}||''; print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($_)."${xmlrs}$page${xmlrs}", ${'_section_' . $extranum . '_h'}{$_}, "${xmlrs}$bytes${xmlrs}$lastaccess${xmlre}\n"; next; } print HISTORYTMP "${xmleb}END_EXTRA_$extranum${xmlee}\n"; } } # Other - Plugin sections if ($AtLeastOneSectionPlugin && $sectiontosave =~ /^plugin_(\w+)$/i) { my $pluginname=$1; if ($PluginsLoaded{'SectionInitHashArray'}{"$pluginname"}) { # my $function="SectionWriteHistory_$pluginname(\$xml,\$xmlbb,\$xmlbs,\$xmlbe,\$xmlrb,\$xmlrs,\$xmlre,\$xmleb,\$xmlee)"; # eval("$function"); my $function="SectionWriteHistory_$pluginname"; &$function($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee); } } %keysinkeylist=(); } #-------------------------------------------------------------------- # Function: Rename all tmp history file into history # Parameters: None # Input: $DirData $PROG $FileSuffix # $KeepBackupOfHistoricFile $SaveDatabaseFilesWithPermissionsForEveryone # Output: None # Return: 1 Ok, 0 at least one error (tmp files are removed) #-------------------------------------------------------------------- sub Rename_All_Tmp_History { my $pid=$$; my $renameok=1; if ($Debug) { debug("Call to Rename_All_Tmp_History (FileSuffix=$FileSuffix)"); } opendir(DIR,"$DirData"); my $datemask; if ($DatabaseBreak eq 'month') { $datemask='\d\d\d\d\d\d'; } elsif ($DatabaseBreak eq 'year') { $datemask='\d\d\d\d'; } elsif ($DatabaseBreak eq 'day') { $datemask='\d\d\d\d\d\d\d\d'; } elsif ($DatabaseBreak eq 'hour') { $datemask='\d\d\d\d\d\d\d\d\d\d'; } if ($Debug) { debug("Scan for temp history files to rename into DirData='$DirData' with mask='$datemask'"); } my $regfilesuffix=quotemeta($FileSuffix); foreach (grep /^$PROG($datemask)$regfilesuffix\.tmp\.$pid$/, file_filt sort readdir DIR) { /^$PROG($datemask)$regfilesuffix\.tmp\.$pid$/; if ($renameok) { # No rename error yet if ($Debug) { debug(" Rename new tmp history file $PROG$1$FileSuffix.tmp.$$ into $PROG$1$FileSuffix.txt",1); } if (-s "$DirData/$PROG$1$FileSuffix.tmp.$$") { # Rename tmp files if size > 0 if ($KeepBackupOfHistoricFiles) { if (-s "$DirData/$PROG$1$FileSuffix.txt") { # History file already exists. We backup it if ($Debug) { debug(" Make a backup of old history file into $PROG$1$FileSuffix.bak before",1); } #if (FileCopy("$DirData/$PROG$1$FileSuffix.txt","$DirData/$PROG$1$FileSuffix.bak")) { if (rename("$DirData/$PROG$1$FileSuffix.txt", "$DirData/$PROG$1$FileSuffix.bak")==0) { warning("Warning: Failed to make a backup of \"$DirData/$PROG$1$FileSuffix.txt\" into \"$DirData/$PROG$1$FileSuffix.bak\"."); } if ($SaveDatabaseFilesWithPermissionsForEveryone) { chmod 0666,"$DirData/$PROG$1$FileSuffix.bak"; } } else { if ($Debug) { debug(" No need to backup old history file",1); } } } if (rename("$DirData/$PROG$1$FileSuffix.tmp.$$", "$DirData/$PROG$1$FileSuffix.txt")==0) { $renameok=0; # At least one error in renaming working files # Remove tmp file unlink "$DirData/$PROG$1$FileSuffix.tmp.$$"; warning("Warning: Failed to rename \"$DirData/$PROG$1$FileSuffix.tmp.$$\" into \"$DirData/$PROG$1$FileSuffix.txt\".\nWrite permissions on \"$PROG$1$FileSuffix.txt\" might be wrong".($ENV{'GATEWAY_INTERFACE'}?" for an 'update from web'":"")." or file might be opened."); next; } if ($SaveDatabaseFilesWithPermissionsForEveryone) { chmod 0666,"$DirData/$PROG$1$FileSuffix.txt"; } } } else { # Because of rename error, we remove all remaining tmp files unlink "$DirData/$PROG$1$FileSuffix.tmp.$$"; } } close DIR; return $renameok; } #------------------------------------------------------------------------------ # Function: Load DNS cache file entries into a memory hash array # Parameters: Hash array ref to load into, # File name to load, # File suffix to use # Save to a second plugin file if not up to date # Input: None # Output: Hash array is loaded # Return: 1 No DNS Cache file found, 0 OK #------------------------------------------------------------------------------ sub Read_DNS_Cache { my $hashtoload=shift; my $dnscachefile=shift; my $filesuffix=shift; my $savetohash=shift; my $dnscacheext=''; my $filetoload=''; my $timetoload = time(); if ($Debug) { debug("Call to Read_DNS_Cache [file=\"$dnscachefile\"]"); } if ($dnscachefile =~ s/(\.\w+)$//) { $dnscacheext=$1; } foreach my $dir ("$DirData",".","") { my $searchdir=$dir; if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } if (-f "${searchdir}$dnscachefile$filesuffix$dnscacheext") { $filetoload="${searchdir}$dnscachefile$filesuffix$dnscacheext"; } # Plugin call : Change filetoload if ($PluginsLoaded{'SearchFile'}{'hashfiles'}) { SearchFile_hashfiles($searchdir,$dnscachefile,$filesuffix,$dnscacheext,$filetoload); } if ($filetoload) { last; } # We found a file to load } if (! $filetoload) { if ($Debug) { debug(" No DNS Cache file found"); } return 1; } # Plugin call : Load hashtoload if ($PluginsLoaded{'LoadCache'}{'hashfiles'}) { LoadCache_hashfiles($filetoload,$hashtoload); } if (! scalar keys %$hashtoload) { open(DNSFILE,"$filetoload") or error("Couldn't open DNS Cache file \"$filetoload\": $!"); #binmode DNSFILE; # If we set binmode here, it seems that the load is broken on ActiveState 5.8 # This is a fast way to load with regexp %$hashtoload = map(/^(?:\d{0,10}\s+)?([0-9A-F:\.]+)\s+([^\s]+)$/oi,); close DNSFILE; if ($savetohash) { # Plugin call : Save hash file (all records) with test if up to date to save if ($PluginsLoaded{'SaveHash'}{'hashfiles'}) { SaveHash_hashfiles($filetoload,$hashtoload,1,0); } } } if ($Debug) { debug(" Loaded ".(scalar keys %$hashtoload)." items from $filetoload in ".(time()-$timetoload)." seconds.",1); } return 0; } #------------------------------------------------------------------------------ # Function: Save a memory hash array into a DNS cache file # Parameters: Hash array ref to save, # File name to save, # File suffix to use # Input: None # Output: None # Return: 0 OK, 1 Error #------------------------------------------------------------------------------ sub Save_DNS_Cache_File { my $hashtosave=shift; my $dnscachefile=shift; my $filesuffix=shift; my $dnscacheext=''; my $filetosave=''; my $timetosave = time(); my $nbofelemtosave=$NBOFLASTUPDATELOOKUPTOSAVE; my $nbofelemsaved=0; if ($Debug) { debug("Call to Save_DNS_Cache_File [file=\"$dnscachefile\"]"); } if (! scalar keys %$hashtosave) { if ($Debug) { debug(" No data to save"); } return 0; } if ($dnscachefile =~ s/(\.\w+)$//) { $dnscacheext=$1; } $filetosave="$dnscachefile$filesuffix$dnscacheext"; # Plugin call : Save hash file (only $NBOFLASTUPDATELOOKUPTOSAVE records) with no test if up to date if ($PluginsLoaded{'SaveHash'}{'hashfiles'}) { SaveHash_hashfiles($filetosave,$hashtosave,0,$nbofelemtosave,$nbofelemsaved); if ($SaveDatabaseFilesWithPermissionsForEveryone) { chmod 0666,"$filetosave"; } } if (! $nbofelemsaved) { $filetosave="$dnscachefile$filesuffix$dnscacheext"; if ($Debug) { debug(" Save data ".($nbofelemtosave?"($nbofelemtosave records max)":"(all records)")." into file $filetosave"); } if (! open(DNSFILE,">$filetosave")) { warning("Warning: Failed to open for writing last update DNS Cache file \"$filetosave\": $!"); return 1; } binmode DNSFILE; my $starttimemin=int($starttime/60); foreach my $key (keys %$hashtosave) { #if ($hashtosave->{$key} ne '*') { my $ipsolved=$hashtosave->{$key}; print DNSFILE "$starttimemin\t$key\t".($ipsolved eq 'ip'?'*':$ipsolved)."\n"; # Change 'ip' to '*' for backward compatibility if (++$nbofelemsaved >= $NBOFLASTUPDATELOOKUPTOSAVE) { last; } #} } close DNSFILE; if ($SaveDatabaseFilesWithPermissionsForEveryone) { chmod 0666,"$filetosave"; } } if ($Debug) { debug(" Saved $nbofelemsaved items into $filetosave in ".(time()-$timetosave)." seconds.",1); } return 0; } #------------------------------------------------------------------------------ # Function: Return time elapsed since last call in miliseconds # Parameters: 0|1 (0 reset counter, 1 no reset) # Input: None # Output: None # Return: Number of miliseconds elapsed since last call #------------------------------------------------------------------------------ sub GetDelaySinceStart { if (shift) { $StartSeconds=0; } # Reset chrono my ($newseconds, $newmicroseconds)=(time(),0); # Plugin call : Return seconds and milliseconds if ($PluginsLoaded{'GetTime'}{'timehires'}) { GetTime_timehires($newseconds, $newmicroseconds); } if (! $StartSeconds) { $StartSeconds=$newseconds; $StartMicroseconds=$newmicroseconds; } return (($newseconds-$StartSeconds)*1000+int(($newmicroseconds-$StartMicroseconds)/1000)); } #------------------------------------------------------------------------------ # Function: Reset all variables whose name start with _ because a new month start # Parameters: None # Input: $YearRequired All variables whose name start with _ # Output: All variables whose name start with _ # Return: None #------------------------------------------------------------------------------ sub Init_HashArray { if ($Debug) { debug("Call to Init_HashArray"); } # Reset global hash arrays %FirstTime = %LastTime = (); %MonthHostsKnown = %MonthHostsUnknown = (); %MonthVisits = %MonthUnique = (); %MonthPages = %MonthHits = %MonthBytes = (); %MonthNotViewedPages = %MonthNotViewedHits = %MonthNotViewedBytes = (); %DayPages = %DayHits = %DayBytes = %DayVisits = (); # Reset all arrays with name beginning by _ for (my $ix=0; $ix<6; $ix++) { $_from_p[$ix]=0; $_from_h[$ix]=0; } for (my $ix=0; $ix<24; $ix++) { $_time_h[$ix]=0; $_time_k[$ix]=0; $_time_p[$ix]=0; $_time_nv_h[$ix]=0; $_time_nv_k[$ix]=0; $_time_nv_p[$ix]=0; } # Reset all hash arrays with name beginning by _ %_session = %_browser_h = (); %_domener_p = %_domener_h = %_domener_k = %_errors_h = %_errors_k = (); %_filetypes_h = %_filetypes_k = %_filetypes_gz_in = %_filetypes_gz_out = (); %_host_p = %_host_h = %_host_k = %_host_l = %_host_s = %_host_u = (); %_waithost_e = %_waithost_l = %_waithost_s = %_waithost_u = (); %_keyphrases = %_keywords = %_os_h = %_pagesrefs_p = %_pagesrefs_h = %_robot_h = %_robot_k = %_robot_l = %_robot_r = (); %_worm_h = %_worm_k = %_worm_l = %_login_p = %_login_h = %_login_k = %_login_l = %_screensize_h = (); %_misc_p = %_misc_h = %_misc_k = (); %_cluster_p = %_cluster_h = %_cluster_k = (); %_se_referrals_p = %_se_referrals_h = %_sider404_h = %_referer404_h = %_url_p = %_url_k = %_url_e = %_url_x = (); %_unknownreferer_l = %_unknownrefererbrowser_l = (); %_emails_h = %_emails_k = %_emails_l = %_emailr_h = %_emailr_k = %_emailr_l = (); for (my $ix=1; $ix < @ExtraName; $ix++) { %{'_section_' . $ix . '_h'} = %{'_section_' . $ix . '_o'} = %{'_section_' . $ix . '_k'} = %{'_section_' . $ix . '_l'} = %{'_section_' . $ix . '_p'} = (); } foreach my $pluginname (keys %{$PluginsLoaded{'SectionInitHashArray'}}) { # my $function="SectionInitHashArray_$pluginname()"; # eval("$function"); my $function="SectionInitHashArray_$pluginname"; &$function(); } } #------------------------------------------------------------------------------ # Function: Change word separators of a keyphrase string into space and # remove bad coded chars # Parameters: stringtodecode # Input: None # Output: None # Return: decodedstring #------------------------------------------------------------------------------ sub ChangeWordSeparatorsIntoSpace { $_[0] =~ s/%0[ad]/ /ig; # LF CR $_[0] =~ s/%2[02789abc]/ /ig; # space " ' ( ) * + , $_[0] =~ s/%3a/ /ig; # : $_[0] =~ tr/\+\'\(\)\"\*,:/ /s; # "&" and "=" must not be in this list } #------------------------------------------------------------------------------ # Function: Transforms special chars by entities as needed in XML/XHTML # Parameters: stringtoencode # Return: encodedstring #------------------------------------------------------------------------------ sub XMLEncode { if ($BuildReportFormat ne 'xhtml' && $BuildReportFormat ne 'xml') { return shift; } my $string = shift; $string =~ s/&/&/g; $string =~ s//>/g; $string =~ s/\"/"/g; $string =~ s/\'/'/g; return $string; } #------------------------------------------------------------------------------ # Function: Transforms spaces into %20 and special chars by HTML entities as needed in XML/XHTML # Decoding is done by XMLDecodeFromHisto # Parameters: stringtoencode # Return: encodedstring #------------------------------------------------------------------------------ sub XMLEncodeForHisto { my $string = shift; $string =~ s/\s/%20/g; if ($BuildHistoryFormat ne 'xml') { return $string; } $string =~ s/=/%3d/g; $string =~ s/&/&/g; $string =~ s//>/g; $string =~ s/\"/"/g; $string =~ s/\'/'/g; return $string; } #------------------------------------------------------------------------------ # Function: Encode a binary string into an ASCII string # Parameters: stringtoencode # Return: encodedstring #------------------------------------------------------------------------------ sub EncodeString { my $string = shift; # use bytes; $string =~ s/([\x2B\x80-\xFF])/sprintf ("%%%2x", ord($1))/eg; # no bytes; $string =~ tr/ /+/s; return $string; } #------------------------------------------------------------------------------ # Function: Decode an only text string into a binary string # Parameters: stringtodecode # Input: None # Output: None # Return: decodedstring #------------------------------------------------------------------------------ sub DecodeEncodedString { my $stringtodecode=shift; $stringtodecode =~ tr/\+/ /s; $stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg; return $stringtodecode; } #------------------------------------------------------------------------------ # Function: Decode an precompiled regex value to a common regex value # Parameters: compiledregextodecode # Input: None # Output: None # Return: standardregex #------------------------------------------------------------------------------ sub UnCompileRegex { shift =~ /\(\?[-\w]*:(.*)\)/; return $1; } #------------------------------------------------------------------------------ # Function: Clean a string of all chars that are not char or _ - \ / . \s # Parameters: stringtoclean, full # Input: None # Output: None # Return: cleanedstring #------------------------------------------------------------------------------ sub Sanitize { my $stringtoclean=shift; my $full=shift||0; if ($full) { $stringtoclean =~ s/[^\w]//g; } else { $stringtoclean =~ s/[^\w\-\\\/\.:\s]//g; } return $stringtoclean; } #------------------------------------------------------------------------------ # Function: Clean a string of HTML tags to avoid 'Cross Site Scripting attacks' # and clean | char. # A XSS attack is providing an AWStats url with XSS code that is executed # when page loaded by awstats CGI is loaded from AWStats server. Such a code # can be # This make the browser sending a request to the attacker server that contains # cookie used for AWStats server sessions. Attacker can this way caught this # cookie and used it to go on AWStats server like original visitor. For this # resaon, parameter received by AWStats must be sanitized by this function # before beeing put inside a web page. # Parameters: stringtoclean # Input: None # Output: None # Return: cleanedstring #------------------------------------------------------------------------------ sub CleanXSS { my $stringtoclean=shift; $stringtoclean =~ s//>/g; $stringtoclean =~ s/|//g; return $stringtoclean; } #------------------------------------------------------------------------------ # Function: Clean tags in a string # Parameters: stringtodecode # Input: None # Output: None # Return: decodedstring #------------------------------------------------------------------------------ sub XMLDecodeFromHisto { my $stringtoclean=shift; $stringtoclean =~ s/$regclean1/ /g; # Replace or with space $stringtoclean =~ s/$regclean2//g; # Remove others $stringtoclean =~ s/%3d/=/g; $stringtoclean =~ s/&/&/g; $stringtoclean =~ s/<//g; $stringtoclean =~ s/"/\"/g; $stringtoclean =~ s/'/\'/g; return $stringtoclean; } #------------------------------------------------------------------------------ # Function: Copy one file into another # Parameters: sourcefilename targetfilename # Input: None # Output: None # Return: 0 if copy is ok, 1 else #------------------------------------------------------------------------------ sub FileCopy { my $filesource = shift; my $filetarget = shift; if ($Debug) { debug("FileCopy($filesource,$filetarget)",1); } open(FILESOURCE,"$filesource") || return 1; open(FILETARGET,">$filetarget") || return 1; binmode FILESOURCE; binmode FILETARGET; # ... close(FILETARGET); close(FILESOURCE); if ($Debug) { debug(" File copied",1); } return 0; } #------------------------------------------------------------------------------ # Function: Format a QUERY_STRING # Parameters: query # Input: None # Output: None # Return: formated query #------------------------------------------------------------------------------ # TODO Appeller cette fonction partout ou il y a des NewLinkParams sub CleanNewLinkParamsFrom { my $NewLinkParams=shift; while (my $param = shift) { $NewLinkParams =~ s/(^|&|&)$param(=[^&]*|$)//i; } $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; return $NewLinkParams; } #------------------------------------------------------------------------------ # Function: Show flags for other language translations # Parameters: Current languade id (en, fr, ...) # Input: None # Output: None # Return: None #------------------------------------------------------------------------------ sub Show_Flag_Links { my $CurrentLang = shift; # Build flags link my $NewLinkParams=$QueryString; my $NewLinkTarget=''; if ($ENV{'GATEWAY_INTERFACE'}) { $NewLinkParams=CleanNewLinkParamsFrom($NewLinkParams,('update','staticlinks','framename','lang')); $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; $NewLinkParams =~ s/(^|&|&)lang=[^&]*//i; $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } if ($FrameName eq 'mainright') { $NewLinkTarget=" target=\"_parent\""; } } else { $NewLinkParams=($SiteConfig?"config=$SiteConfig&":"")."year=$YearRequired&month=$MonthRequired&"; } if ($NewLinkParams !~ /output=/) { $NewLinkParams.='output=main&'; } if ($FrameName eq 'mainright') { $NewLinkParams.='framename=index&'; } foreach my $lng (split(/\s+/,$ShowFlagLinks)) { $lng=$LangBrowserToLangAwstats{$lng}?$LangBrowserToLangAwstats{$lng}:$lng; if ($lng ne $CurrentLang) { my %lngtitle=('en','English','fr','French','de','German','it','Italian','nl','Dutch','es','Spanish'); my $lngtitle=($lngtitle{$lng}?$lngtitle{$lng}:$lng); my $flag=($LangAWStatsToFlagAwstats{$lng}?$LangAWStatsToFlagAwstats{$lng}:$lng); print " \n"; } } } #------------------------------------------------------------------------------ # Function: Format value in bytes in a string (Bytes, Kb, Mb, Gb) # Parameters: bytes (integer value or "0.00") # Input: None # Output: None # Return: "x.yz MB" or "x.yy KB" or "x Bytes" or "0" #------------------------------------------------------------------------------ sub Format_Bytes { my $bytes = shift||0; my $fudge = 1; # Do not use exp/log function to calculate 1024power, function make segfault on some unix/perl versions if ($bytes >= ($fudge << 30)) { return sprintf("%.2f", $bytes/1073741824)." $Message[110]"; } if ($bytes >= ($fudge << 20)) { return sprintf("%.2f", $bytes/1048576)." $Message[109]"; } if ($bytes >= ($fudge << 10)) { return sprintf("%.2f", $bytes/1024)." $Message[108]"; } if ($bytes < 0) { $bytes="?"; } return int($bytes).(int($bytes)?" $Message[119]":""); } #------------------------------------------------------------------------------ # Function: Format a number # Parameters: number # Input: None # Output: None # Return: "999 999 999 999" #------------------------------------------------------------------------------ sub Format_Number { my $number = shift||0; $number=~s/(\d)(\d\d\d)$/$1 $2/; $number=~s/(\d)(\d\d\d\s\d\d\d)$/$1 $2/; $number=~s/(\d)(\d\d\d\s\d\d\d\s\d\d\d)$/$1 $2/; return $number; } #------------------------------------------------------------------------------ # Function: Return " alt=string title=string" # Parameters: string # Input: None # Output: None # Return: "alt=string title=string" #------------------------------------------------------------------------------ sub AltTitle { my $string = shift||''; return " alt='$string' title='$string'"; # return " alt=\"$string\" title=\"$string\""; # return ($BuildReportFormat?"":" alt=\"$string\"")." title=\"$string\""; } #------------------------------------------------------------------------------ # Function: Tell if an email is a local or external email # Parameters: email # Input: $SiteDomain(exact string) $HostAliases(quoted regex string) # Output: None # Return: -1, 0 or 1 #------------------------------------------------------------------------------ sub IsLocalEMail { my $email=shift||'unknown'; if ($email !~ /\@(.*)$/) { return 0; } my $domain=$1; if ($domain =~ /^$SiteDomain$/i) { return 1; } foreach (@HostAliases) { if ($domain =~ /$_/) { return 1; } } return -1; } #------------------------------------------------------------------------------ # Function: Format a date according to Message[78] (country date format) # Parameters: String date YYYYMMDDHHMMSS # Option 0=LastUpdate and LastTime date # 1=Arrays date except daymonthvalues # 2=daymonthvalues date (only year month and day) # Input: $Message[78] # Output: None # Return: Date with format defined by Message[78] and option #------------------------------------------------------------------------------ sub Format_Date { my $date=shift; my $option=shift||0; my $year=substr("$date",0,4); my $month=substr("$date",4,2); my $day=substr("$date",6,2); my $hour=substr("$date",8,2); my $min=substr("$date",10,2); my $sec=substr("$date",12,2); my $dateformat=$Message[78]; if ($option == 2) { $dateformat =~ s/^[^ymd]+//g; $dateformat =~ s/[^ymd]+$//g; } $dateformat =~ s/yyyy/$year/g; $dateformat =~ s/yy/$year/g; $dateformat =~ s/mmm/$MonthNumLib{$month}/g; $dateformat =~ s/mm/$month/g; $dateformat =~ s/dd/$day/g; $dateformat =~ s/HH/$hour/g; $dateformat =~ s/MM/$min/g; $dateformat =~ s/SS/$sec/g; return "$dateformat"; } #------------------------------------------------------------------------------ # Function: Return 1 if string contains only ascii chars # Parameters: string # Input: None # Output: None # Return: 0 or 1 #------------------------------------------------------------------------------ sub IsAscii { my $string=shift; if ($Debug) { debug("IsAscii($string)",5); } if ($string =~ /^[\w\+\-\/\\\.%,;:=\"\'&?!\s]+$/) { if ($Debug) { debug(" Yes",6); } return 1; # Only alphanum chars (and _) or + - / \ . % , ; : = " ' & ? space \t } if ($Debug) { debug(" No",6); } return 0; } #------------------------------------------------------------------------------ # Function: Return the lower value between 2 but exclude value if 0 # Parameters: Val1 and Val2 # Input: None # Output: None # Return: min(Val1,Val2) #------------------------------------------------------------------------------ sub MinimumButNoZero { my ($val1,$val2)=@_; return ($val1&&($val1<$val2||!$val2)?$val1:$val2); } #------------------------------------------------------------------------------ # Function: Add a val from sorting tree # Parameters: keytoadd keyval [firstadd] # Input: None # Output: None # Return: None #------------------------------------------------------------------------------ sub AddInTree { my $keytoadd=shift; my $keyval=shift; my $firstadd=shift||0; if ($firstadd==1) { # Val is the first one if ($Debug) { debug(" firstadd",4); } $val{$keyval}=$keytoadd; $lowerval=$keyval; if ($Debug) { debug(" lowerval=$lowerval, nb elem val=".(scalar keys %val).", nb elem egal=".(scalar keys %egal).".",4); } return; } if ($val{$keyval}) { # Val is already in tree if ($Debug) { debug(" val is already in tree",4); } $egal{$keytoadd}=$val{$keyval}; $val{$keyval}=$keytoadd; if ($Debug) { debug(" lowerval=$lowerval, nb elem val=".(scalar keys %val).", nb elem egal=".(scalar keys %egal).".",4); } return; } if ($keyval <= $lowerval) { # Val is a new one lower (should happens only when tree is not full) if ($Debug) { debug(" keytoadd val=$keyval is lower or equal to lowerval=$lowerval",4); } $val{$keyval}=$keytoadd; $nextval{$keyval}=$lowerval; $lowerval=$keyval; if ($Debug) { debug(" lowerval=$lowerval, nb elem val=".(scalar keys %val).", nb elem egal=".(scalar keys %egal).".",4); } return; } # Val is a new one higher if ($Debug) { debug(" keytoadd val=$keyval is higher than lowerval=$lowerval",4); } $val{$keyval}=$keytoadd; my $valcursor=$lowerval; # valcursor is value just before keyval while ($nextval{$valcursor} && ($nextval{$valcursor} < $keyval)) { $valcursor=$nextval{$valcursor}; } if ($nextval{$valcursor}) { # keyval is between valcursor and nextval{valcursor} $nextval{$keyval}=$nextval{$valcursor}; } $nextval{$valcursor}=$keyval; if ($Debug) { debug(" lowerval=$lowerval, nb elem val=".(scalar keys %val).", nb elem egal=".(scalar keys %egal).".",4); } } #------------------------------------------------------------------------------ # Function: Remove a val from sorting tree # Parameters: None # Input: $lowerval %val %egal # Output: None # Return: None #------------------------------------------------------------------------------ sub Removelowerval { my $keytoremove=$val{$lowerval}; # This is lower key if ($Debug) { debug(" remove for lowerval=$lowerval: key=$keytoremove",4); } if ($egal{$keytoremove}) { $val{$lowerval}=$egal{$keytoremove}; delete $egal{$keytoremove}; } else { delete $val{$lowerval}; $lowerval=$nextval{$lowerval}; # Set new lowerval } if ($Debug) { debug(" new lower value=$lowerval, val size=".(scalar keys %val).", egal size=".(scalar keys %egal),4); } } #------------------------------------------------------------------------------ # Function: Build @keylist array # Parameters: Size max for @keylist array, # Min value in hash for select, # Hash used for select, # Hash used for order # Input: None # Output: None # Return: @keylist response array #------------------------------------------------------------------------------ sub BuildKeyList { my $ArraySize=shift||error("System error. Call to BuildKeyList function with incorrect value for first param","","",1); my $MinValue=shift||error("System error. Call to BuildKeyList function with incorrect value for second param","","",1); my $hashforselect=shift; my $hashfororder=shift; if ($Debug) { debug(" BuildKeyList($ArraySize,$MinValue,$hashforselect with size=".(scalar keys %$hashforselect).",$hashfororder with size=".(scalar keys %$hashfororder).")",3); } delete $hashforselect->{0};delete $hashforselect->{''}; # Those is to protect from infinite loop when hash array has an incorrect null key my $count=0; $lowerval=0; # Global because used in AddInTree and Removelowerval %val=(); %nextval=(); %egal=(); foreach my $key (keys %$hashforselect) { if ($count < $ArraySize) { if ($hashforselect->{$key} >= $MinValue) { $count++; if ($Debug) { debug(" Add in tree entry $count : $key (value=".($hashfororder->{$key}||0).", tree not full)",4); } AddInTree($key,$hashfororder->{$key}||0,$count); } next; } $count++; if (($hashfororder->{$key}||0)<=$lowerval) { next; } if ($Debug) { debug(" Add in tree entry $count : $key (value=".($hashfororder->{$key}||0)." > lowerval=$lowerval)",4); } AddInTree($key,$hashfororder->{$key}||0); if ($Debug) { debug(" Removelower in tree",4); } Removelowerval(); } # Build key list and sort it if ($Debug) { debug(" Build key list and sort it. lowerval=$lowerval, nb elem val=".(scalar keys %val).", nb elem egal=".(scalar keys %egal).".",3); } my %notsortedkeylist=(); foreach my $key (values %val) { $notsortedkeylist{$key}=1; } foreach my $key (values %egal) { $notsortedkeylist{$key}=1; } @keylist=(); @keylist=(sort {($hashfororder->{$b}||0) <=> ($hashfororder->{$a}||0) } keys %notsortedkeylist); if ($Debug) { debug(" BuildKeyList End (keylist size=".(@keylist).")",3); } return; } #------------------------------------------------------------------------------ # Function: Lock or unlock update # Parameters: status (1 to lock, 0 to unlock) # Input: $DirLock (if status=0) $PROG $FileSuffix # Output: $DirLock (if status=1) # Return: None #------------------------------------------------------------------------------ sub Lock_Update { my $status=shift; my $lock="$PROG$FileSuffix.lock"; if ($status) { # We stop if there is at least one lock file wherever it is foreach my $key ($ENV{"TEMP"},$ENV{"TMP"},"/tmp","/",".") { my $newkey =$key; $newkey =~ s/[\\\/]$//; if (-f "$newkey/$lock") { error("An AWStats update process seems to be already running for this config file. Try later.\nIf this is not true, remove manually lock file '$newkey/$lock'.","","",1); } } # Set lock where we can foreach my $key ($ENV{"TEMP"},$ENV{"TMP"},"/tmp","/",".") { if (! -d "$key") { next; } $DirLock=$key; $DirLock =~ s/[\\\/]$//; if ($Debug) { debug("Update lock file $DirLock/$lock is set"); } open(LOCK,">$DirLock/$lock") || error("Failed to create lock file $DirLock/$lock","","",1); print LOCK "AWStats update started by process $$ at $nowyear-$nowmonth-$nowday $nowhour:$nowmin:$nowsec\n"; close(LOCK); last; } } else { # Remove lock if ($Debug) { debug("Update lock file $DirLock/$lock is removed"); } unlink("$DirLock/$lock"); } return; } #------------------------------------------------------------------------------ # Function: Signal handler to call Lock_Update to remove lock file # Parameters: Signal name # Input: None # Output: None # Return: None #------------------------------------------------------------------------------ sub SigHandler { my $signame = shift; print ucfirst($PROG)." process (ID $$) interrupted by signal $signame.\n"; &Lock_Update(0); exit 1; } #------------------------------------------------------------------------------ # Function: Convert an IPAddress into an integer # Parameters: IPAddress # Input: None # Output: None # Return: Int #------------------------------------------------------------------------------ sub Convert_IP_To_Decimal { my ($IPAddress) = @_; my @ip_seg_arr = split(/\./,$IPAddress); my $decimal_ip_address = 256 * 256 *256 * $ip_seg_arr[0] + 256 * 256 * $ip_seg_arr[1] + 256 * $ip_seg_arr[2] + $ip_seg_arr[3]; return($decimal_ip_address); } #------------------------------------------------------------------------------ # Function: Test there is at least on value in list not null # Parameters: List of values # Input: None # Output: None # Return: 1 There is at least one not null value, 0 else #------------------------------------------------------------------------------ sub AtLeastOneNotNull { if ($Debug) { debug(" Call to AtLeastOneNotNull (".join('-',@_).")",3); } foreach my $val (@_) { if ($val) { return 1; } } return 0; } #------------------------------------------------------------------------------ # Function: Return the string to add in html tag to include popup javascript code # Parameters: tooltip number # Input: None # Output: None # Return: string with javascript code #------------------------------------------------------------------------------ sub Tooltip { my $ttnb=shift; return ($TOOLTIPON?" onmouseover=\"ShowTip($ttnb);\" onmouseout=\"HideTip($ttnb);\"":""); } #------------------------------------------------------------------------------ # Function: Insert a form filter # Parameters: Name of filter field, default for filter field, default for exclude filter field # Input: $StaticLinks, $QueryString, $SiteConfig, $DirConfig # Output: HTML Form # Return: None #------------------------------------------------------------------------------ sub ShowFormFilter { my $fieldfiltername=shift; my $fieldfilterinvalue=shift; my $fieldfilterexvalue=shift; if (! $StaticLinks) { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } print "\n
    \n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; print ""; print "
    $Message[79] :   $Message[153] :"; print "\n"; if ($SiteConfig) { print "\n"; } if ($DirConfig) { print "\n"; } if ($QueryString =~ /(^|&|&)year=(\d\d\d\d)/i) { print "\n"; } if ($QueryString =~ /(^|&|&)month=(\d\d)/i || $QueryString =~ /(^|&|&)month=(all)/i) { print "\n"; } if ($QueryString =~ /(^|&|&)lang=(\w+)/i) { print "\n"; } if ($QueryString =~ /(^|&|&)debug=(\d+)/i) { print "\n"; } if ($QueryString =~ /(^|&|&)framename=(\w+)/i) { print "\n"; } print "  
    \n"; print "
    \n"; print "
    \n"; print "\n"; } } #------------------------------------------------------------------------------ # Function: Write other user info (with help of plugin) # Parameters: $user # Input: $SiteConfig # Output: URL link # Return: None #------------------------------------------------------------------------------ sub ShowUserInfo { my $user=shift; # Call to plugins' function ShowInfoUser foreach my $pluginname (sort keys %{$PluginsLoaded{'ShowInfoUser'}}) { # my $function="ShowInfoUser_$pluginname('$user')"; # eval("$function"); my $function="ShowInfoUser_$pluginname"; &$function($user); } } #------------------------------------------------------------------------------ # Function: Write other cluster info (with help of plugin) # Parameters: $clusternb # Input: $SiteConfig # Output: Cluster info # Return: None #------------------------------------------------------------------------------ sub ShowClusterInfo { my $user=shift; # Call to plugins' function ShowInfoCluster foreach my $pluginname (sort keys %{$PluginsLoaded{'ShowInfoCluster'}}) { # my $function="ShowInfoCluster_$pluginname('$user')"; # eval("$function"); my $function="ShowInfoCluster_$pluginname"; &$function($user); } } #------------------------------------------------------------------------------ # Function: Write other host info (with help of plugin) # Parameters: $host # Input: $LinksToWhoIs $LinksToWhoIsIp # Output: None # Return: None #------------------------------------------------------------------------------ sub ShowHostInfo { my $host=shift; # Call to plugins' function ShowInfoHost foreach my $pluginname (sort keys %{$PluginsLoaded{'ShowInfoHost'}}) { # my $function="ShowInfoHost_$pluginname('$host')"; # eval("$function"); my $function="ShowInfoHost_$pluginname"; &$function($host); } } #------------------------------------------------------------------------------ # Function: Write other url info (with help of plugin) # Parameters: $url # Input: %Aliases $MaxLengthOfShownURL $ShowLinksOnUrl $SiteDomain $UseHTTPSLinkForUrl # Output: URL link # Return: None #------------------------------------------------------------------------------ sub ShowURLInfo { my $url=shift; my $nompage=CleanXSS($url); # Call to plugins' function ShowInfoURL foreach my $pluginname (keys %{$PluginsLoaded{'ShowInfoURL'}}) { # my $function="ShowInfoURL_$pluginname('$url')"; # eval("$function"); my $function="ShowInfoURL_$pluginname"; &$function($url); } if (length($nompage)>$MaxLengthOfShownURL) { $nompage=substr($nompage,0,$MaxLengthOfShownURL)."..."; } if ($ShowLinksOnUrl) { my $newkey=CleanXSS($url); if ($LogType eq 'W' || $LogType eq 'S') { # Web or streaming log file if ($newkey =~ /^http(s|):/i) { # URL seems to be extracted from a proxy log file print "".XMLEncode($nompage).""; } elsif ($newkey =~ /^\//) { # URL seems to be an url extracted from a web or wap server log file $newkey =~ s/^\/$SiteDomain//i; # Define urlprot my $urlprot='http'; if ($UseHTTPSLinkForUrl && $newkey =~ /^$UseHTTPSLinkForUrl/) { $urlprot='https'; } print "".XMLEncode($nompage).""; } else { print XMLEncode($nompage); } } elsif ($LogType eq 'F') { # Ftp log file print XMLEncode($nompage); } elsif ($LogType eq 'M') { # Smtp log file print XMLEncode($nompage); } else { # Other type log file print XMLEncode($nompage); } } else { print XMLEncode($nompage); } } #------------------------------------------------------------------------------ # Function: Define value for PerlParsingFormat (used for regex log record parsing) # Parameters: $LogFormat # Input: - # Output: $pos_xxx, @pos_extra, @fieldlib, $PerlParsingFormat # Return: - #------------------------------------------------------------------------------ sub DefinePerlParsingFormat { my $LogFormat=shift; $pos_vh = $pos_host = $pos_logname = $pos_date = $pos_tz = $pos_method = $pos_url = $pos_code = $pos_size = -1; $pos_referer = $pos_agent = $pos_query = $pos_gzipin = $pos_gzipout = $pos_compratio = -1; $pos_cluster = $pos_emails = $pos_emailr = $pos_hostr = -1; @pos_extra=(); @fieldlib=(); $PerlParsingFormat=''; # Log records examples: # Apache combined: 62.161.78.73 user - [dd/mmm/yyyy:hh:mm:ss +0000] "GET / HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" # Apache combined (408 error): my.domain.com - user [09/Jan/2001:11:38:51 -0600] "OPTIONS /mime-tmp/xxx file.doc HTTP/1.1" 408 - "-" "-" # Apache combined (408 error): 62.161.78.73 user - [dd/mmm/yyyy:hh:mm:ss +0000] "-" 408 - "-" "-" # Apache combined (400 error): 80.8.55.11 - - [28/Apr/2007:03:20:02 +0200] "GET /" 400 584 "-" "-" # IIS: 2000-07-19 14:14:14 62.161.78.73 - GET / 200 1234 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.htm # WebStar: 05/21/00 00:17:31 OK 200 212.242.30.6 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) http://www.cover.dk/ "www.cover.dk" :Documentation:graphics:starninelogo.white.gif 1133 # Squid extended: 12.229.91.170 - - [27/Jun/2002:03:30:50 -0700] "GET http://www.callistocms.com/images/printable.gif HTTP/1.1" 304 354 "-" "Mozilla/5.0 Galeon/1.0.3 (X11; Linux i686; U;) Gecko/0" TCP_REFRESH_HIT:DIRECT # Log formats: # Apache common_with_mod_gzip_info1: %h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_compression_ratio}npct. # Apache common_with_mod_gzip_info2: %h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n Out:%{mod_gzip_output_size}n:%{mod_gzip_compression_ratio}npct. # Apache deflate: %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" (%{ratio}n) if ($Debug) { debug("Call To DefinePerlParsingFormat (LogType='$LogType', LogFormat='$LogFormat')"); } if ($LogFormat =~ /^[1-6]$/) { # Pre-defined log format if ($LogFormat eq '1' || $LogFormat eq '6') { # Same than "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"". # %u (user) is "([^\\[]+)" instead of "[^ ]+" because can contain space (Lotus Notes). referer and ua might be "". # $PerlParsingFormat="([^ ]+) [^ ]+ ([^\\[]+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) (.+) [^\\\"]+\\\" ([\\d|-]+) ([\\d|-]+) \\\"(.*?)\\\" \\\"([^\\\"]*)\\\""; $PerlParsingFormat="([^ ]+) [^ ]+ ([^\\[]+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) ([^ ]+)(?: [^\\\"]+|)\\\" ([\\d|-]+) ([\\d|-]+) \\\"(.*?)\\\" \\\"([^\\\"]*)\\\""; $pos_host=0;$pos_logname=1;$pos_date=2;$pos_method=3;$pos_url=4;$pos_code=5;$pos_size=6;$pos_referer=7;$pos_agent=8; @fieldlib=('host','logname','date','method','url','code','size','referer','ua'); } elsif ($LogFormat eq '2') { # Same than "date time c-ip cs-username cs-method cs-uri-stem sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)" $PerlParsingFormat="(\\S+ \\S+) (\\S+) (\\S+) (\\S+) (\\S+) ([\\d|-]+) ([\\d|-]+) \\S+ (\\S+) (\\S+)"; $pos_date=0;$pos_host=1;$pos_logname=2;$pos_method=3;$pos_url=4;$pos_code=5;$pos_size=6;$pos_agent=7;$pos_referer=8; @fieldlib=('date','host','logname','method','url','code','size','ua','referer'); } elsif ($LogFormat eq '3') { $PerlParsingFormat="([^\\t]*\\t[^\\t]*)\\t([^\\t]*)\\t([\\d|-]*)\\t([^\\t]*)\\t([^\\t]*)\\t([^\\t]*)\\t[^\\t]*\\t([^\\t]*)\\t([\\d]*)"; $pos_date=0;$pos_method=1;$pos_code=2;$pos_host=3;$pos_agent=4;$pos_referer=5;$pos_url=6;$pos_size=7; @fieldlib=('date','method','code','host','ua','referer','url','size'); } elsif ($LogFormat eq '4') { # Same than "%h %l %u %t \"%r\" %>s %b" # %u (user) is "(.+)" instead of "[^ ]+" because can contain space (Lotus Notes). $PerlParsingFormat="([^ ]+) [^ ]+ (.+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) ([^ ]+)(?: [^\\\"]+|)\\\" ([\\d|-]+) ([\\d|-]+)"; $pos_host=0;$pos_logname=1;$pos_date=2;$pos_method=3;$pos_url=4;$pos_code=5;$pos_size=6; @fieldlib=('host','logname','date','method','url','code','size'); } } else { # Personalized log format my $LogFormatString=$LogFormat; # Replacement for Notes format string that are not Apache $LogFormatString =~ s/%vh/%virtualname/g; # Replacement for Apache format string $LogFormatString =~ s/%v(\s)/%virtualname$1/g; $LogFormatString =~ s/%v$/%virtualname/g; $LogFormatString =~ s/%h(\s)/%host$1/g; $LogFormatString =~ s/%h$/%host/g; $LogFormatString =~ s/%l(\s)/%other$1/g; $LogFormatString =~ s/%l$/%other/g; $LogFormatString =~ s/\"%u\"/%lognamequot/g; $LogFormatString =~ s/%u(\s)/%logname$1/g; $LogFormatString =~ s/%u$/%logname/g; $LogFormatString =~ s/%t(\s)/%time1$1/g; $LogFormatString =~ s/%t$/%time1/g; $LogFormatString =~ s/\"%r\"/%methodurl/g; $LogFormatString =~ s/%>s/%code/g; $LogFormatString =~ s/%b(\s)/%bytesd$1/g; $LogFormatString =~ s/%b$/%bytesd/g; $LogFormatString =~ s/\"%{Referer}i\"/%refererquot/g; $LogFormatString =~ s/\"%{User-Agent}i\"/%uaquot/g; $LogFormatString =~ s/%{mod_gzip_input_size}n/%gzipin/g; $LogFormatString =~ s/%{mod_gzip_output_size}n/%gzipout/g; $LogFormatString =~ s/%{mod_gzip_compression_ratio}n/%gzipratio/g; $LogFormatString =~ s/\(%{ratio}n\)/%deflateratio/g; # Replacement for a IIS and ISA format string $LogFormatString =~ s/cs-uri-query/%query/g; # Must be before cs-uri $LogFormatString =~ s/date\stime/%time2/g; $LogFormatString =~ s/c-ip/%host/g; $LogFormatString =~ s/cs-username/%logname/g; $LogFormatString =~ s/cs-method/%method/g; # GET, POST, SMTP, RETR STOR $LogFormatString =~ s/cs-uri-stem/%url/g; $LogFormatString =~ s/cs-uri/%url/g; $LogFormatString =~ s/sc-status/%code/g; $LogFormatString =~ s/sc-bytes/%bytesd/g; $LogFormatString =~ s/cs-version/%other/g; # Protocol $LogFormatString =~ s/cs\(User-Agent\)/%ua/g; $LogFormatString =~ s/c-agent/%ua/g; $LogFormatString =~ s/cs\(Referer\)/%referer/g; $LogFormatString =~ s/cs-referred/%referer/g; $LogFormatString =~ s/sc-authenticated/%other/g; $LogFormatString =~ s/s-svcname/%other/g; $LogFormatString =~ s/s-computername/%other/g; $LogFormatString =~ s/r-host/%virtualname/g; $LogFormatString =~ s/cs-host/%virtualname/g; $LogFormatString =~ s/r-ip/%other/g; $LogFormatString =~ s/r-port/%other/g; $LogFormatString =~ s/time-taken/%other/g; $LogFormatString =~ s/cs-bytes/%other/g; $LogFormatString =~ s/cs-protocol/%other/g; $LogFormatString =~ s/cs-transport/%other/g; $LogFormatString =~ s/s-operation/%method/g; # GET, POST, SMTP, RETR STOR $LogFormatString =~ s/cs-mime-type/%other/g; $LogFormatString =~ s/s-object-source/%other/g; $LogFormatString =~ s/s-cache-info/%other/g; $LogFormatString =~ s/cluster-node/%cluster/g; # Added for MMS $LogFormatString =~ s/protocol/%protocolmms/g; # cs-method might not be available $LogFormatString =~ s/c-status/%codemms/g; # c-status used when sc-status not available if ($Debug) { debug(" LogFormatString=$LogFormatString"); } # $LogFormatString has an AWStats format, so we can generate PerlParsingFormat variable my $i = 0; my $LogSeparatorWithoutStar=$LogSeparator; $LogSeparatorWithoutStar =~ s/[\*\+]//g; foreach my $f (split(/\s+/,$LogFormatString)) { # Add separator for next field if ($PerlParsingFormat) { $PerlParsingFormat.="$LogSeparator"; } # Special for logname if ($f =~ /%lognamequot$/) { $pos_logname = $i; $i++; push @fieldlib, 'logname'; $PerlParsingFormat .= "\\\"?([^\\\"]*)\\\"?"; # logname can be "value", "" and - in same log (Lotus notes) } # Date format elsif ($f =~ /%time1$/ || $f =~ /%time1b$/) { # [dd/mmm/yyyy:hh:mm:ss +0000] or [dd/mmm/yyyy:hh:mm:ss], time1b kept for backward compatibility $pos_date = $i; $i++; push @fieldlib, 'date'; $pos_tz = $i; $i++; push @fieldlib, 'tz'; $PerlParsingFormat .= "\\[([^$LogSeparatorWithoutStar]+)( [^$LogSeparatorWithoutStar]+)?\\]"; } elsif ($f =~ /%time2$/) { # yyyy-mm-dd hh:mm:ss $pos_date = $i; $i++; push @fieldlib, 'date'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+\\s[^$LogSeparatorWithoutStar]+)"; # Need \s for Exchange log files } elsif ($f =~ /%time3$/) { # mon d hh:mm:ss or mon d hh:mm:ss or mon dd hh:mm:ss yyyy or day mon dd hh:mm:ss or day mon dd hh:mm:ss yyyy $pos_date = $i; $i++; push @fieldlib, 'date'; $PerlParsingFormat .= "(?:\\w\\w\\w )?(\\w\\w\\w \\s?\\d+ \\d\\d:\\d\\d:\\d\\d(?: \\d\\d\\d\\d)?)"; } elsif ($f =~ /%time4$/) { # ddddddddddddd $pos_date = $i; $i++; push @fieldlib, 'date'; $PerlParsingFormat .= "(\\d+)"; } # Special for methodurl and methodurlnoprot elsif ($f =~ /%methodurl$/) { $pos_method = $i; $i++; push @fieldlib, 'method'; $pos_url = $i; $i++; push @fieldlib, 'url'; $PerlParsingFormat .= "\\\"([^$LogSeparatorWithoutStar]+) ([^$LogSeparatorWithoutStar]+) [^\\\"]+\\\""; } elsif ($f =~ /%methodurlnoprot$/) { $pos_method = $i; $i++; push @fieldlib, 'method'; $pos_url = $i; $i++; push @fieldlib, 'url'; $PerlParsingFormat .= "\\\"([^$LogSeparatorWithoutStar]+) ([^$LogSeparatorWithoutStar]+)\\\""; } # Common command tags elsif ($f =~ /%virtualnamequot$/) { $pos_vh = $i; $i++; push @fieldlib, 'vhost'; $PerlParsingFormat .= "\\\"([^$LogSeparatorWithoutStar]+)\\\""; } elsif ($f =~ /%virtualname$/) { $pos_vh = $i; $i++; push @fieldlib, 'vhost'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%host_r$/) { $pos_hostr = $i; $i++; push @fieldlib, 'hostr'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%host$/) { $pos_host = $i; $i++; push @fieldlib, 'host'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%logname$/) { $pos_logname = $i; $i++; push @fieldlib, 'logname'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%method$/) { $pos_method = $i; $i++; push @fieldlib, 'method'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%url$/) { $pos_url = $i; $i++; push @fieldlib, 'url'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%query$/) { $pos_query = $i; $i++; push @fieldlib, 'query'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%code$/) { $pos_code = $i; $i++; push @fieldlib, 'code'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%bytesd$/) { $pos_size = $i; $i++; push @fieldlib, 'size'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%refererquot$/) { $pos_referer = $i; $i++; push @fieldlib, 'referer'; $PerlParsingFormat .= "\\\"([^\\\"]*)\\\""; # referer might be "" } elsif ($f =~ /%referer$/) { $pos_referer = $i; $i++; push @fieldlib, 'referer'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%uaquot$/) { $pos_agent = $i; $i++; push @fieldlib, 'ua'; $PerlParsingFormat .= "\\\"([^\\\"]*)\\\""; # ua might be "" } elsif ($f =~ /%uabracket$/) { $pos_agent = $i; $i++; push @fieldlib, 'ua'; $PerlParsingFormat .= "\\\[([^\\\]]*)\\\]"; # ua might be [] } elsif ($f =~ /%ua$/) { $pos_agent = $i; $i++; push @fieldlib, 'ua'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%gzipin$/ ) { $pos_gzipin=$i;$i++; push @fieldlib, 'gzipin'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%gzipout/ ) { # Compare $f to /%gzipout/ and not to /%gzipout$/ like other fields $pos_gzipout=$i;$i++; push @fieldlib, 'gzipout'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%gzipratio/ ) { # Compare $f to /%gzipratio/ and not to /%gzipratio$/ like other fields $pos_compratio=$i;$i++; push @fieldlib, 'gzipratio'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%deflateratio/ ) { # Compare $f to /%deflateratio/ and not to /%deflateratio$/ like other fields $pos_compratio=$i;$i++; push @fieldlib, 'deflateratio'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%email_r$/) { $pos_emailr = $i; $i++; push @fieldlib, 'email_r'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%email$/) { $pos_emails = $i; $i++; push @fieldlib, 'email'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%cluster$/) { $pos_cluster = $i; $i++; push @fieldlib, 'clusternb'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } elsif ($f =~ /%timetaken$/) { $pos_timetaken = $i; $i++; push @fieldlib, 'timetaken'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } # Special for protocolmms, used for method if method not already found (for MMS) elsif ($f =~ /%protocolmms$/) { if ($pos_method < 0) { $pos_method = $i; $i++; push @fieldlib, 'method'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } } # Special for codemms, used for code only if code not already found (for MMS) elsif ($f =~ /%codemms$/) { if ($pos_code < 0) { $pos_code = $i; $i++; push @fieldlib, 'code'; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } } # Extra tag elsif ($f =~ /%extra(\d+)$/) { $pos_extra[$1] = $i; $i++; push @fieldlib, "extra$1"; $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; } # Other tag elsif ($f =~ /%other$/) { $PerlParsingFormat .= "[^$LogSeparatorWithoutStar]+"; } elsif ($f =~ /%otherquot$/) { $PerlParsingFormat .= "\\\"[^\\\"]*\\\""; } # Unknown tag (no parenthesis) else { $PerlParsingFormat .= "[^$LogSeparatorWithoutStar]+"; } } if (! $PerlParsingFormat) { error("No recognized format tag in personalized LogFormat string"); } } if ($pos_host < 0) { error("Your personalized LogFormat does not include all fields required by AWStats (Add \%host in your LogFormat string)."); } if ($pos_date < 0) { error("Your personalized LogFormat does not include all fields required by AWStats (Add \%time1 or \%time2 in your LogFormat string)."); } if ($pos_method < 0) { error("Your personalized LogFormat does not include all fields required by AWStats (Add \%methodurl or \%method in your LogFormat string)."); } if ($pos_url < 0) { error("Your personalized LogFormat does not include all fields required by AWStats (Add \%methodurl or \%url in your LogFormat string)."); } if ($pos_code < 0) { error("Your personalized LogFormat does not include all fields required by AWStats (Add \%code in your LogFormat string)."); } if ($pos_size < 0) { error("Your personalized LogFormat does not include all fields required by AWStats (Add \%bytesd in your LogFormat string)."); } $PerlParsingFormat=qr/^$PerlParsingFormat/; if ($Debug) { debug(" PerlParsingFormat is $PerlParsingFormat"); } } sub ShowMenuCateg { my ($categ,$categtext,$categicon,$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget)=(shift,shift,shift,shift,shift,shift,shift,shift); $categicon=''; # Comment this to enabme category icons my ($menu,$menulink,$menutext)=(shift,shift,shift); my $linetitle=0; # Call to plugins' function AddHTMLMenuLink foreach my $pluginname (keys %{$PluginsLoaded{'AddHTMLMenuLink'}}) { # my $function="AddHTMLMenuLink_$pluginname('$categ',\$menu,\$menulink,\$menutext)"; # eval("$function"); my $function="AddHTMLMenuLink_$pluginname"; &$function($categ,$menu,$menulink,$menutext); } foreach my $key (%$menu) { if ($menu->{$key} && $menu->{$key} > 0) { $linetitle++; last; } } if (! $linetitle) { return; } # At least one entry in menu for this category, we can show categpry and entries my $WIDTHMENU1=($FrameName eq 'mainleft'?$FRAMEWIDTH:150); print "".($categicon?" ":"")."$categtext:\n"; print ($frame?"\n":""); foreach my $key (sort { $menu->{$a} <=> $menu->{$b} } keys %$menu) { if ($menu->{$key}==0) { next; } if ($menulink->{$key}==1) { print ($frame?"":""); print "$menutext->{$key}"; print ($frame?"\n":"   "); } if ($menulink->{$key}==2) { print ($frame?"   \"...\" ":""); print "$menutext->{$key}\n"; print ($frame?"\n":"   "); } } print ($frame?"":"\n"); } sub ShowEmailSendersChart { my $NewLinkParams=shift; my $NewLinkTarget=shift; my $MaxLengthOfShownEMail=48; my $total_p;my $total_h;my $total_k; my $max_p;my $max_h;my $max_k; my $rest_p;my $rest_h;my $rest_k; # Show filter form #&ShowFormFilter("emailsfilter",$EmailsFilter); # Show emails list print "$Center 
    \n"; my $title; if ($HTMLOutput{'allemails'} || $HTMLOutput{'lastemails'}) { $title="$Message[131]"; } else { $title="$Message[131] ($Message[77] $MaxNbOf{'EMailsShown'})   -   $Message[80]"; if ($ShowEMailSenders =~ /L/i) { $title.="   -   $Message[9]"; } } &tab_head("$title",19,0,'emailsenders'); print "$Message[131] : ".(scalar keys %_emails_h).""; if ($ShowEMailSenders =~ /H/i) { print "$Message[57]"; } if ($ShowEMailSenders =~ /B/i) { print "$Message[75]"; } if ($ShowEMailSenders =~ /M/i) { print "$Message[106]"; } if ($ShowEMailSenders =~ /L/i) { print "$Message[9]"; } print "\n"; print "Local External"; $total_p=$total_h=$total_k=0; $max_h=1; foreach (values %_emails_h) { if ($_ > $max_h) { $max_h = $_; } } $max_k=1; foreach (values %_emails_k) { if ($_ > $max_k) { $max_k = $_; } } my $count=0; if (! $HTMLOutput{'allemails'} && ! $HTMLOutput{'lastemails'}) { &BuildKeyList($MaxNbOf{'EMailsShown'},$MinHit{'EMail'},\%_emails_h,\%_emails_h); } if ($HTMLOutput{'allemails'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'EMail'},\%_emails_h,\%_emails_h); } if ($HTMLOutput{'lastemails'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'EMail'},\%_emails_h,\%_emails_l); } foreach my $key (@keylist) { my $newkey=$key; if (length($key)>$MaxLengthOfShownEMail) { $newkey=substr($key,0,$MaxLengthOfShownEMail)."..."; } my $bredde_h=0;my $bredde_k=0; if ($max_h > 0) { $bredde_h=int($BarWidth*$_emails_h{$key}/$max_h)+1; } if ($max_k > 0) { $bredde_k=int($BarWidth*$_emails_k{$key}/$max_k)+1; } print ""; my $direction=IsLocalEMail($key); if ($direction > 0) { print "$newkey-> "; } if ($direction == 0) { print "$newkey"; } if ($direction < 0) { print " <-$newkey"; } if ($ShowEMailSenders =~ /H/i) { print "$_emails_h{$key}"; } if ($ShowEMailSenders =~ /B/i) { print "".Format_Bytes($_emails_k{$key}).""; } if ($ShowEMailSenders =~ /M/i) { print "".Format_Bytes($_emails_k{$key}/($_emails_h{$key}||1)).""; } if ($ShowEMailSenders =~ /L/i) { print "".($_emails_l{$key}?Format_Date($_emails_l{$key},1):'-').""; } print "\n"; #$total_p += $_emails_p{$key}; $total_h += $_emails_h{$key}; $total_k += $_emails_k{$key}; $count++; } $rest_p=0; # $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other sender emails print "$Message[2]"; if ($ShowEMailSenders =~ /H/i) { print "$rest_h"; } if ($ShowEMailSenders =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowEMailSenders =~ /M/i) { print "".Format_Bytes($rest_k/($rest_h||1)).""; } if ($ShowEMailSenders =~ /L/i) { print " "; } print "\n"; } &tab_end(); } sub ShowEmailReceiversChart { my $NewLinkParams=shift; my $NewLinkTarget=shift; my $MaxLengthOfShownEMail=48; my $total_p;my $total_h;my $total_k; my $max_p;my $max_h;my $max_k; my $rest_p;my $rest_h;my $rest_k; # Show filter form #&ShowFormFilter("emailrfilter",$EmailrFilter); # Show emails list print "$Center 
    \n"; my $title; if ($HTMLOutput{'allemailr'} || $HTMLOutput{'lastemailr'}) { $title="$Message[132]"; } else { $title="$Message[132] ($Message[77] $MaxNbOf{'EMailsShown'})   -   $Message[80]"; if ($ShowEMailReceivers =~ /L/i) { $title.="   -   $Message[9]"; } } &tab_head("$title",19,0,'emailreceivers'); print "$Message[132] : ".(scalar keys %_emailr_h).""; if ($ShowEMailReceivers =~ /H/i) { print "$Message[57]"; } if ($ShowEMailReceivers =~ /B/i) { print "$Message[75]"; } if ($ShowEMailReceivers =~ /M/i) { print "$Message[106]"; } if ($ShowEMailReceivers =~ /L/i) { print "$Message[9]"; } print "\n"; print "Local External"; $total_p=$total_h=$total_k=0; $max_h=1; foreach (values %_emailr_h) { if ($_ > $max_h) { $max_h = $_; } } $max_k=1; foreach (values %_emailr_k) { if ($_ > $max_k) { $max_k = $_; } } my $count=0; if (! $HTMLOutput{'allemailr'} && ! $HTMLOutput{'lastemailr'}) { &BuildKeyList($MaxNbOf{'EMailsShown'},$MinHit{'EMail'},\%_emailr_h,\%_emailr_h); } if ($HTMLOutput{'allemailr'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'EMail'},\%_emailr_h,\%_emailr_h); } if ($HTMLOutput{'lastemailr'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'EMail'},\%_emailr_h,\%_emailr_l); } foreach my $key (@keylist) { my $newkey=$key; if (length($key)>$MaxLengthOfShownEMail) { $newkey=substr($key,0,$MaxLengthOfShownEMail)."..."; } my $bredde_h=0;my $bredde_k=0; if ($max_h > 0) { $bredde_h=int($BarWidth*$_emailr_h{$key}/$max_h)+1; } if ($max_k > 0) { $bredde_k=int($BarWidth*$_emailr_k{$key}/$max_k)+1; } print ""; my $direction=IsLocalEMail($key); if ($direction > 0) { print "$newkey<- "; } if ($direction == 0) { print "$newkey"; } if ($direction < 0) { print " ->$newkey"; } if ($ShowEMailReceivers =~ /H/i) { print "$_emailr_h{$key}"; } if ($ShowEMailReceivers =~ /B/i) { print "".Format_Bytes($_emailr_k{$key}).""; } if ($ShowEMailReceivers =~ /M/i) { print "".Format_Bytes($_emailr_k{$key}/($_emailr_h{$key}||1)).""; } if ($ShowEMailReceivers =~ /L/i) { print "".($_emailr_l{$key}?Format_Date($_emailr_l{$key},1):'-').""; } print "\n"; #$total_p += $_emailr_p{$key}; $total_h += $_emailr_h{$key}; $total_k += $_emailr_k{$key}; $count++; } $rest_p=0; # $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other receiver emails print "$Message[2]"; if ($ShowEMailReceivers =~ /H/i) { print "$rest_h"; } if ($ShowEMailReceivers =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowEMailReceivers =~ /M/i) { print "".Format_Bytes($rest_k/($rest_h||1)).""; } if ($ShowEMailReceivers =~ /L/i) { print " "; } print "\n"; } &tab_end(); } #------------------------------------------------------------------------------ # MAIN #------------------------------------------------------------------------------ ($DIR=$0) =~ s/([^\/\\]+)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; $DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/; $starttime=time(); # Get current time (time when AWStats was started) ($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear,$nowwday,$nowyday) = localtime($starttime); $nowweekofmonth=int($nowday/7); $nowweekofyear=int(($nowyday-1+6-($nowwday==0?6:$nowwday-1))/7)+1; if ($nowweekofyear > 52) { $nowweekofyear = 1; } $nowdaymod=$nowday%7; $nowwday++; $nowns=Time::Local::timegm(0,0,0,$nowday,$nowmonth,$nowyear); if ($nowdaymod <= $nowwday) { if (($nowwday != 7) || ($nowdaymod != 0)) { $nowweekofmonth=$nowweekofmonth+1; } } if ($nowdaymod > $nowwday) { $nowweekofmonth=$nowweekofmonth+2; } # Change format of time variables $nowweekofmonth="0$nowweekofmonth"; if ($nowweekofyear < 10) { $nowweekofyear = "0$nowweekofyear"; } if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; } $nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//; if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; } if ($nowday < 10) { $nowday = "0$nowday"; } if ($nowhour < 10) { $nowhour = "0$nowhour"; } if ($nowmin < 10) { $nowmin = "0$nowmin"; } if ($nowsec < 10) { $nowsec = "0$nowsec"; } $nowtime=int($nowyear.$nowmonth.$nowday.$nowhour.$nowmin.$nowsec); # Get tomorrow time (will be used to discard some record with corrupted date (future date)) my ($tomorrowsec,$tomorrowmin,$tomorrowhour,$tomorrowday,$tomorrowmonth,$tomorrowyear) = localtime($starttime+86400); if ($tomorrowyear < 100) { $tomorrowyear+=2000; } else { $tomorrowyear+=1900; } if (++$tomorrowmonth < 10) { $tomorrowmonth = "0$tomorrowmonth"; } if ($tomorrowday < 10) { $tomorrowday = "0$tomorrowday"; } if ($tomorrowhour < 10) { $tomorrowhour = "0$tomorrowhour"; } if ($tomorrowmin < 10) { $tomorrowmin = "0$tomorrowmin"; } if ($tomorrowsec < 10) { $tomorrowsec = "0$tomorrowsec"; } $tomorrowtime=int($tomorrowyear.$tomorrowmonth.$tomorrowday.$tomorrowhour.$tomorrowmin.$tomorrowsec); # Allowed option my @AllowedCLIArgs=('migrate','config', 'logfile','output','runascli','update', 'staticlinks','staticlinksext','noloadplugin','loadplugin', 'hostfilter','urlfilter','refererpagesfilter', 'lang','month','year','framename','debug', 'showsteps','showdropped','showcorrupted','showunknownorigin','showdirectorigin', 'limitflush','confdir','updatefor', 'hostfilter','hostfilterex','urlfilter','urlfilterex','refererpagesfilter','refererpagesfilterex', 'pluginmode','filterrawlog'); # Parse input parameters and sanitize them for security reasons $QueryString=''; # AWStats use GATEWAY_INTERFACE to known if ran as CLI or CGI. AWSTATS_DEL_GATEWAY_INTERFACE can # be set to force AWStats to be ran as CLI even from a web page. if ($ENV{'AWSTATS_DEL_GATEWAY_INTERFACE'}) { $ENV{'GATEWAY_INTERFACE'}=''; } if ($ENV{'GATEWAY_INTERFACE'}) { # Run from a browser as CGI $DebugMessages=0; # Prepare QueryString if ($ENV{'CONTENT_LENGTH'}) { binmode STDIN; read(STDIN, $QueryString, $ENV{'CONTENT_LENGTH'}); } if ($ENV{'QUERY_STRING'}) { $QueryString = $ENV{'QUERY_STRING'}; # Set & and & to & $QueryString =~ s/&/&/g; $QueryString =~ s/&/&/g; } # Remove all XSS vulnerabilities coming from AWStats parameters $QueryString = CleanXSS(&DecodeEncodedString($QueryString)); # Security test if ($QueryString =~ /LogFile=([^&]+)/i) { error("Logfile parameter can't be overwritten when AWStats is used from a CGI"); } # No update but report by default when run from a browser $UpdateStats=($QueryString=~/update=1/i?1:0); if ($QueryString =~ /config=([^&]+)/i) { $SiteConfig=&Sanitize("$1"); } if ($QueryString =~ /diricons=([^&]+)/i) { $DirIcons="$1"; } if ($QueryString =~ /pluginmode=([^&]+)/i) { $PluginMode=&Sanitize("$1",1); } if ($QueryString =~ /configdir=([^&]+)/i) { $DirConfig=&Sanitize("$1"); } # All filters if ($QueryString =~ /hostfilter=([^&]+)/i) { $FilterIn{'host'}="$1"; } # Filter on host list can also be defined with hostfilter=filter if ($QueryString =~ /hostfilterex=([^&]+)/i) { $FilterEx{'host'}="$1"; } # if ($QueryString =~ /urlfilter=([^&]+)/i) { $FilterIn{'url'}="$1"; } # Filter on URL list can also be defined with urlfilter=filter if ($QueryString =~ /urlfilterex=([^&]+)/i) { $FilterEx{'url'}="$1"; } # if ($QueryString =~ /refererpagesfilter=([^&]+)/i) { $FilterIn{'refererpages'}="$1"; } # Filter on referer list can also be defined with refererpagesfilter=filter if ($QueryString =~ /refererpagesfilterex=([^&]+)/i) { $FilterEx{'refererpages'}="$1"; } # # All output if ($QueryString =~ /output=allhosts:([^&]+)/i) { $FilterIn{'host'}="$1"; } # Filter on host list can be defined with output=allhosts:filter to reduce number of lines read and showed if ($QueryString =~ /output=lasthosts:([^&]+)/i) { $FilterIn{'host'}="$1"; } # Filter on host list can be defined with output=lasthosts:filter to reduce number of lines read and showed if ($QueryString =~ /output=urldetail:([^&]+)/i) { $FilterIn{'url'}="$1"; } # Filter on URL list can be defined with output=urldetail:filter to reduce number of lines read and showed if ($QueryString =~ /output=refererpages:([^&]+)/i) { $FilterIn{'refererpages'}="$1"; } # Filter on referer list can be defined with output=refererpages:filter to reduce number of lines read and showed # If migrate if ($QueryString =~ /(^|-|&|&)migrate=([^&]+)/i) { $MigrateStats=&Sanitize("$2"); $MigrateStats =~ /^(.*)$PROG(\d{0,2})(\d\d)(\d\d\d\d)(.*)\.txt$/; $SiteConfig=$5?$5:'xxx'; $SiteConfig =~ s/^\.//; # SiteConfig is used to find config file } } else { # Run from command line $DebugMessages=1; # Prepare QueryString for (0..@ARGV-1) { # If migrate if ($ARGV[$_] =~ /(^|-|&|&)migrate=([^&]+)/i) { $MigrateStats="$2"; $MigrateStats =~ /^(.*)$PROG(\d{0,2})(\d\d)(\d\d\d\d)(.*)\.txt$/; $SiteConfig=$5?$5:'xxx'; $SiteConfig =~ s/^\.//; # SiteConfig is used to find config file next; } # TODO Check if ARGV is in @AllowedArg if ($QueryString) { $QueryString .= '&'; } my $NewLinkParams=$ARGV[$_]; $NewLinkParams =~ s/^-+//; $QueryString .= "$NewLinkParams"; } # Remove all XSS vulnerabilities coming from AWStats parameters $QueryString = CleanXSS($QueryString); # Security test if ($ENV{'AWSTATS_DEL_GATEWAY_INTERFACE'} && $QueryString =~ /LogFile=([^&]+)/i) { error("Logfile parameter can't be overwritten when AWStats is used from a CGI"); } # Update with no report by default when run from command line $UpdateStats=1; if ($QueryString =~ /config=([^&]+)/i) { $SiteConfig=&Sanitize("$1"); } if ($QueryString =~ /diricons=([^&]+)/i) { $DirIcons="$1"; } if ($QueryString =~ /pluginmode=([^&]+)/i) { $PluginMode=&Sanitize("$1",1); } if ($QueryString =~ /configdir=([^&]+)/i) { $DirConfig=&Sanitize("$1"); } # All filters if ($QueryString =~ /hostfilter=([^&]+)/i) { $FilterIn{'host'}="$1"; } # Filter on host list can also be defined with hostfilter=filter if ($QueryString =~ /hostfilterex=([^&]+)/i) { $FilterEx{'host'}="$1"; } # if ($QueryString =~ /urlfilter=([^&]+)/i) { $FilterIn{'url'}="$1"; } # Filter on URL list can also be defined with urlfilter=filter if ($QueryString =~ /urlfilterex=([^&]+)/i) { $FilterEx{'url'}="$1"; } # if ($QueryString =~ /refererpagesfilter=([^&]+)/i) { $FilterIn{'refererpages'}="$1"; } # Filter on referer list can also be defined with refererpagesfilter=filter if ($QueryString =~ /refererpagesfilterex=([^&]+)/i) { $FilterEx{'refererpages'}="$1"; } # # All output if ($QueryString =~ /output=allhosts:([^&]+)/i) { $FilterIn{'host'}="$1"; } # Filter on host list can be defined with output=allhosts:filter to reduce number of lines read and showed if ($QueryString =~ /output=lasthosts:([^&]+)/i) { $FilterIn{'host'}="$1"; } # Filter on host list can be defined with output=lasthosts:filter to reduce number of lines read and showed if ($QueryString =~ /output=urldetail:([^&]+)/i) { $FilterIn{'url'}="$1"; } # Filter on URL list can be defined with output=urldetail:filter to reduce number of lines read and showed if ($QueryString =~ /output=refererpages:([^&]+)/i) { $FilterIn{'refererpages'}="$1"; } # Filter on referer list can be defined with output=refererpages:filter to reduce number of lines read and showed # Config parameters if ($QueryString =~ /LogFile=([^&]+)/i) { $LogFile="$1"; } # If show options if ($QueryString =~ /showsteps/i) { $ShowSteps=1; $QueryString=~s/showsteps[^&]*//i; } if ($QueryString =~ /showcorrupted/i) { $ShowCorrupted=1; $QueryString=~s/showcorrupted[^&]*//i; } if ($QueryString =~ /showdropped/i) { $ShowDropped=1; $QueryString=~s/showdropped[^&]*//i; } if ($QueryString =~ /showunknownorigin/i) { $ShowUnknownOrigin=1; $QueryString=~s/showunknownorigin[^&]*//i; } if ($QueryString =~ /showdirectorigin/i) { $ShowDirectOrigin=1; $QueryString=~s/showdirectorigin[^&]*//i; } } if ($QueryString =~ /(^|&|&)staticlinks/i) { $StaticLinks=".$SiteConfig"; } if ($QueryString =~ /(^|&|&)staticlinks=([^&]+)/i) { $StaticLinks=".$2"; } # When ran from awstatsbuildstaticpages.pl if ($QueryString =~ /(^|&|&)staticlinksext=([^&]+)/i) { $StaticExt="$2"; } if ($QueryString =~ /(^|&|&)framename=([^&]+)/i) { $FrameName="$2"; } if ($QueryString =~ /(^|&|&)debug=(\d+)/i) { $Debug=$2; } if ($QueryString =~ /(^|&|&)databasebreak=(\w+)/i) { $DatabaseBreak=$2; } if ($QueryString =~ /(^|&|&)updatefor=(\d+)/i) { $UpdateFor=$2; } if ($QueryString =~ /(^|&|&)noloadplugin=([^&]+)/i) { foreach (split(/,/,$2)) { $NoLoadPlugin{&Sanitize("$_",1)}=1; } } if ($QueryString =~ /(^|&|&)limitflush=(\d+)/i) { $LIMITFLUSH=$2; } # Get/Define output if ($QueryString =~ /(^|&|&)output(=[^&]*|)(.*)(&|&)output(=[^&]*|)(&|$)/i) { error("Only 1 output option is allowed","","",1); } if ($QueryString =~ /(^|&|&)output(=[^&]*|)(&|$)/i) { # At least one output expected. We define %HTMLOutput my $outputlist="$2"; if ($outputlist) { $outputlist =~ s/^=//; foreach my $outputparam (split(/,/,$outputlist)) { $outputparam=~s/:(.*)$//; if ($outputparam) { $HTMLOutput{lc($outputparam)}="$1"||1; } } } # If on command line and no update if (! $ENV{'GATEWAY_INTERFACE'} && $QueryString !~ /update/i) { $UpdateStats=0; } # If no output defined, used default value if (! scalar keys %HTMLOutput) { $HTMLOutput{'main'}=1; } } if ($ENV{'GATEWAY_INTERFACE'} && ! scalar keys %HTMLOutput) { $HTMLOutput{'main'}=1; } # Remove -output option with no = from QueryString $QueryString=~s/(^|&|&)output(&|$)/$1$2/i; $QueryString=~s/&+$//; # Check year, month, day, hour parameters if ($QueryString =~ /(^|&|&)month=(year)/i) { error("month=year is a deprecated option. Use month=all instead."); } if ($QueryString =~ /(^|&|&)year=(\d\d\d\d)/i) { $YearRequired=sprintf("%04d",$2); } else { $YearRequired="$nowyear"; } if ($QueryString =~ /(^|&|&)month=(\d{1,2})/i) { $MonthRequired=sprintf("%02d",$2); } elsif ($QueryString =~ /(^|&|&)month=(all)/i) { $MonthRequired='all'; } else { $MonthRequired="$nowmonth"; } if ($QueryString =~ /(^|&|&)day=(\d{1,2})/i) { $DayRequired=sprintf("%02d",$2); } # day is a hidden option. Must not be used (Make results not understandable). Available for users that rename history files with day. else { $DayRequired=''; } if ($QueryString =~ /(^|&|&)hour=(\d{1,2})/i) { $HourRequired=sprintf("%02d",$2); } # hour is a hidden option. Must not be used (Make results not understandable). Available for users that rename history files with day. else { $HourRequired=''; } # Check parameter validity # TODO # Print AWStats and Perl version if ($Debug) { debug(ucfirst($PROG)." - $VERSION - Perl $^X $]",1); debug("DIR=$DIR PROG=$PROG Extension=$Extension",2); debug("QUERY_STRING=$QueryString",2); debug("HTMLOutput=".join(',',keys %HTMLOutput),1); debug("YearRequired=$YearRequired, MonthRequired=$MonthRequired",2); debug("DayRequired=$DayRequired, HourRequired=$HourRequired",2); debug("UpdateFor=$UpdateFor",2); debug("PluginMode=$PluginMode",2); debug("DirConfig=$DirConfig",2); } # Force SiteConfig if AWSTATS_FORCE_CONFIG is defined if ($ENV{'AWSTATS_CONFIG'}) { $ENV{'AWSTATS_FORCE_CONFIG'}=$ENV{'AWSTATS_CONFIG'}; } # For backward compatibility if ($ENV{'AWSTATS_FORCE_CONFIG'}) { if ($Debug) { debug("AWSTATS_FORCE_CONFIG parameter is defined to '".$ENV{'AWSTATS_FORCE_CONFIG'}."'. $PROG will use this as config value."); } $SiteConfig=&Sanitize($ENV{'AWSTATS_FORCE_CONFIG'}); } if ((! $ENV{'GATEWAY_INTERFACE'}) && (! $SiteConfig)) { &Read_Ref_Data('browsers','domains','operating_systems','robots','search_engines','worms'); print "----- $PROG $VERSION (c) 2000-2008 Laurent Destailleur -----\n"; print "AWStats is a free web server logfile analyzer to show you advanced web\n"; print "statistics.\n"; print "AWStats comes with ABSOLUTELY NO WARRANTY. It's a free software distributed\n"; print "with a GNU General Public License (See LICENSE file for details).\n"; print "\n"; print "Syntax: $PROG.$Extension -config=virtualhostname [options]\n"; print "\n"; print " This runs $PROG in command line to update statistics of a web site, from\n"; print " the log file defined in AWStats config file (with -update option), or build\n"; print " a HTML report (with -output option).\n"; print " First, $PROG tries to read $PROG.virtualhostname.conf as the config file.\n"; print " If not found, $PROG tries to read $PROG.conf\n"; print " Note 1: Config files ($PROG.virtualhostname.conf or $PROG.conf) must be\n"; print " in /etc/awstats, /usr/local/etc/awstats, /etc or same directory than\n"; print " awstats.pl script file.\n"; print " Note 2: If AWSTATS_FORCE_CONFIG environment variable is defined, AWStats will\n"; print " use it as the \"config\" value, whatever is the value on command line or URL.\n"; print " See AWStats documentation for all setup instrutions.\n"; print "\n"; print "Options to update statistics:\n"; print " -update to update statistics (default)\n"; print " -showsteps to add benchmark information every $NBOFLINESFORBENCHMARK lines processed\n"; print " -showcorrupted to add output for each corrupted lines found, with reason\n"; print " -showdropped to add output for each dropped lines found, with reason\n"; print " -showunknownorigin to output referer when it can't be parsed\n"; print " -showdirectorigin to output log line when origin is a direct access\n"; print " -updatefor=n to stop the update process after parsing n lines\n"; print " -LogFile=x to change log to analyze whatever is 'LogFile' in config file\n"; print " Be care to process log files in chronological order when updating statistics.\n"; print "\n"; print "Options to show statistics:\n"; print " -output to output main HTML report (no update made except with -update)\n"; print " -output=x to output other report pages where x is:\n"; print " alldomains to build page of all domains/countries\n"; print " allhosts to build page of all hosts\n"; print " lasthosts to build page of last hits for hosts\n"; print " unknownip to build page of all unresolved IP\n"; print " allemails to build page of all email senders (maillog)\n"; print " lastemails to build page of last email senders (maillog)\n"; print " allemailr to build page of all email receivers (maillog)\n"; print " lastemailr to build page of last email receivers (maillog)\n"; print " alllogins to build page of all logins used\n"; print " lastlogins to build page of last hits for logins\n"; print " allrobots to build page of all robots/spider visits\n"; print " lastrobots to build page of last hits for robots\n"; print " urldetail to list most often viewed pages \n"; print " urldetail:filter to list most often viewed pages matching filter\n"; print " urlentry to list entry pages\n"; print " urlentry:filter to list entry pages matching filter\n"; print " urlexit to list exit pages\n"; print " urlexit:filter to list exit pages matching filter\n"; print " osdetail to build page with os detailed versions\n"; print " browserdetail to build page with browsers detailed versions\n"; print " unknownbrowser to list 'User Agents' with unknown browser\n"; print " unknownos to list 'User Agents' with unknown OS\n"; print " refererse to build page of all refering search engines\n"; print " refererpages to build page of all refering pages\n"; #print " referersites to build page of all refering sites\n"; print " keyphrases to list all keyphrases used on search engines\n"; print " keywords to list all keywords used on search engines\n"; print " errors404 to list 'Referers' for 404 errors\n"; print " allextraX to build page of all values for ExtraSection X\n"; print " -staticlinks to have static links in HTML report page\n"; print " -staticlinksext=xxx to have static links with .xxx extension instead of .html\n"; print " -lang=LL to output a HTML report in language LL (en,de,es,fr,it,nl,...)\n"; print " -month=MM to output a HTML report for an old month MM\n"; print " -year=YYYY to output a HTML report for an old year YYYY\n"; print " Those 'date' options doesn't allow you to process old log file. They only\n"; print " allow you to see a past report for a chosen month/year period instead of\n"; print " current month/year.\n"; print "\n"; print "Other options:\n"; print " -debug=X to add debug informations lesser than level X (speed reduced)\n"; print "\n"; print "Now supports/detects:\n"; print " Web/Ftp/Mail/streaming server log analyzis (and load balanced log files)\n"; print " Reverse DNS lookup (IPv4 and IPv6) and GeoIP lookup\n"; print " Number of visits, number of unique visitors\n"; print " Visits duration and list of last visits\n"; print " Authenticated users\n"; print " Days of week and rush hours\n"; print " Hosts list and unresolved IP addresses list\n"; print " Most viewed, entry and exit pages\n"; print " Files type and Web compression (mod_gzip, mod_deflate stats)\n"; print " Screen size\n"; print " Number of times site is 'added to favorites bookmarks'\n"; print " Ratio of Browsers with support of: Java, Flash, RealG2 reader,\n"; print " Quicktime reader, WMA reader, PDF reader\n"; print " Configurable personalized reports\n"; print " ".(scalar keys %DomainsHashIDLib)." domains/countries\n"; print " ".(scalar keys %RobotsHashIDLib)." robots\n"; print " ".(scalar keys %WormsHashLib)." worm's families\n"; print " ".(scalar keys %OSHashLib)." operating systems\n"; print " ".(scalar keys %BrowsersHashIDLib)." browsers"; &Read_Ref_Data('browsers_phone'); print " (".(scalar keys %BrowsersHashIDLib)." with phone browsers database)\n"; print " ".(scalar keys %SearchEnginesHashLib)." search engines (and keyphrases/keywords used from them)\n"; print " All HTTP errors with last referrer\n"; print " Report by day/month/year\n"; print " Dynamic or static HTML or XHTML reports, static PDF reports\n"; print " Indexed text or XML monthly database\n"; print " And a lot of other advanced features and options...\n"; print "New versions and FAQ at http://awstats.sourceforge.net\n"; exit 2; } $SiteConfig||=&Sanitize($ENV{'SERVER_NAME'}); #$ENV{'SERVER_NAME'}||=$SiteConfig; # For thoose who use __SERVER_NAME__ in conf file and use CLI. $ENV{'AWSTATS_CURRENT_CONFIG'}=$SiteConfig; # Read config file (SiteConfig must be defined) &Read_Config($DirConfig); # Check language if ($QueryString =~ /(^|&|&)lang=([^&]+)/i) { $Lang="$2"; } if (! $Lang || $Lang eq 'auto') { # If lang not defined or forced to auto my $langlist=$ENV{'HTTP_ACCEPT_LANGUAGE'}||''; $langlist =~ s/;[^,]*//g; if ($Debug) { debug("Search an available language among HTTP_ACCEPT_LANGUAGE=$langlist",1); } foreach my $code (split(/,/,$langlist)) { # Search for a valid lang in priority if ($LangBrowserToLangAwstats{$code}) { $Lang=$LangBrowserToLangAwstats{$code}; if ($Debug) { debug(" Will try to use Lang=$Lang",1); } last; } $code =~ s/-.*$//; if ($LangBrowserToLangAwstats{$code}) { $Lang=$LangBrowserToLangAwstats{$code}; if ($Debug) { debug(" Will try to use Lang=$Lang",1); } last; } } } if (! $Lang || $Lang eq 'auto') { if ($Debug) { debug(" No language defined or available. Will use Lang=en",1); } $Lang='en'; } # Check and correct bad parameters &Check_Config(); # Now SiteDomain is defined if ($Debug && ! $DebugMessages) { error("Debug has not been allowed. Change DebugMessages parameter in config file to allow debug."); } # Define frame name and correct variable for frames if (! $FrameName) { if ($ENV{'GATEWAY_INTERFACE'} && $UseFramesWhenCGI && $HTMLOutput{'main'} && ! $PluginMode) { $FrameName='index'; } else { $FrameName='main'; } } # Load Message files, Reference data files and Plugins if ($Debug) { debug("FrameName=$FrameName",1); } if ($FrameName ne 'index') { &Read_Language_Data($Lang); if ($FrameName ne 'mainleft') { my %datatoload=(); my ($filedomains,$filemime,$filerobots,$fileworms,$filebrowser,$fileos,$filese)=('domains','mime','robots','worms','browsers','operating_systems','search_engines'); my ($filestatushttp,$filestatussmtp)=('status_http','status_smtp'); if ($LevelForBrowsersDetection eq 'allphones') { $filebrowser='browsers_phone'; } if ($UpdateStats) { # If update if ($LevelForFileTypesDetection<2) { $datatoload{$filemime}=1; } # Only if need to filter on known extensions if ($LevelForRobotsDetection) { $datatoload{$filerobots}=1; } # ua if ($LevelForWormsDetection) { $datatoload{$fileworms}=1; } # url if ($LevelForBrowsersDetection) { $datatoload{$filebrowser}=1; } # ua if ($LevelForOSDetection) { $datatoload{$fileos}=1; } # ua if ($LevelForRefererAnalyze) { $datatoload{$filese}=1; } # referer # if (...) { $datatoload{'referer_spam'}=1; } } if (scalar keys %HTMLOutput) { # If output if ($ShowDomainsStats || $ShowHostsStats) { $datatoload{$filedomains}=1; } # TODO Replace by test if ($ShowDomainsStats) when plugins geoip can force load of domains datafile. if ($ShowFileTypesStats) { $datatoload{$filemime}=1; } if ($ShowRobotsStats) { $datatoload{$filerobots}=1; } if ($ShowWormsStats) { $datatoload{$fileworms}=1; } if ($ShowBrowsersStats) { $datatoload{$filebrowser}=1; } if ($ShowOSStats) { $datatoload{$fileos}=1; } if ($ShowOriginStats) { $datatoload{$filese}=1; } if ($ShowHTTPErrorsStats) { $datatoload{$filestatushttp}=1; } if ($ShowSMTPErrorsStats) { $datatoload{$filestatussmtp}=1; } } &Read_Ref_Data(keys %datatoload); } &Read_Plugins(); } # Here charset is defined, so we can send the http header (Need BuildReportFormat,PageCode) if (! $HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'}) { http_head(); } # Run from a browser as CGI # Init other parameters $NBOFLINESFORBENCHMARK--; if ($ENV{'GATEWAY_INTERFACE'}) { $DirCgi=''; } if ($DirCgi && !($DirCgi =~ /\/$/) && !($DirCgi =~ /\\$/)) { $DirCgi .= '/'; } if (! $DirData || $DirData =~ /^\./) { if (! $DirData || $DirData eq '.') { $DirData="$DIR"; } # If not defined or chosen to '.' value then DirData is current dir elsif ($DIR && $DIR ne '.') { $DirData="$DIR/$DirData"; } } $DirData||='.'; # If current dir not defined then we put it to '.' $DirData =~ s/[\\\/]+$//; if ($FirstDayOfWeek == 1) { @DOWIndex = (1,2,3,4,5,6,0); } else { @DOWIndex = (0,1,2,3,4,5,6); } # Should we link to ourselves or to a wrapper script $AWScript=($WrapperScript?"$WrapperScript":"$DirCgi$PROG.$Extension"); # Print html header (Need HTMLOutput,Expires,Lang,StyleSheet,HTMLHeadSectionExpires defined by Read_Config, PageCode defined by Read_Language_Data) if (! $HeaderHTMLSent) { &html_head; } # AWStats output is replaced by a plugin output if ($PluginMode) { # my $function="BuildFullHTMLOutput_$PluginMode()"; # eval("$function"); my $function="BuildFullHTMLOutput_$PluginMode"; &$function(); if ($? || $@) { error("$@"); } &html_end(0); exit 0; } # Security check if ($AllowAccessFromWebToAuthenticatedUsersOnly && $ENV{'GATEWAY_INTERFACE'}) { if ($Debug) { debug("REMOTE_USER=".$ENV{"REMOTE_USER"}); } if (! $ENV{"REMOTE_USER"}) { error("Access to statistics is only allowed from an authenticated session to authenticated users."); } if (@AllowAccessFromWebToFollowingAuthenticatedUsers) { my $userisinlist=0; my $remoteuser=quotemeta($ENV{"REMOTE_USER"}); $remoteuser =~ s/\s/%20/g; # Allow authenticated user with space in name to be compared to allowed user list my $currentuser=qr/^$remoteuser$/i; # Set precompiled regex foreach (@AllowAccessFromWebToFollowingAuthenticatedUsers) { if (/$currentuser/o) { $userisinlist=1; last; } } if (! $userisinlist) { error("User '".$ENV{"REMOTE_USER"}."' is not allowed to access statistics of this domain/config."); } } } if ($AllowAccessFromWebToFollowingIPAddresses && $ENV{'GATEWAY_INTERFACE'}) { my $IPAddress=$ENV{"REMOTE_ADDR"}; # IPv4 or IPv6 my $useripaddress=&Convert_IP_To_Decimal($IPAddress); my @allowaccessfromipaddresses = split (/[\s,]+/, $AllowAccessFromWebToFollowingIPAddresses); my $allowaccess = 0; foreach my $ipaddressrange (@allowaccessfromipaddresses) { if ($ipaddressrange !~ /^(\d+\.\d+\.\d+\.\d+)(?:-(\d+\.\d+\.\d+\.\d+))*$/ && $ipaddressrange !~ /^([0-9A-Fa-f]{1,4}:){1,7}(:|)([0-9A-Fa-f]{1,4}|\/\d)/) { error("AllowAccessFromWebToFollowingIPAddresses is defined to '$AllowAccessFromWebToFollowingIPAddresses' but part of value does not match the correct syntax: IPv4AddressMin[-IPv4AddressMax] or IPv6Address[\/prefix] in \"$ipaddressrange\""); } # Test ip v4 if ($ipaddressrange =~ /^(\d+\.\d+\.\d+\.\d+)(?:-(\d+\.\d+\.\d+\.\d+))*$/) { my $ipmin=&Convert_IP_To_Decimal($1); my $ipmax=$2?&Convert_IP_To_Decimal($2):$ipmin; # Is it an authorized ip ? if (($useripaddress >= $ipmin) && ($useripaddress <= $ipmax)) { $allowaccess = 1; last; } } # Test ip v6 if ($ipaddressrange =~ /^([0-9A-Fa-f]{1,4}:){1,7}(:|)([0-9A-Fa-f]{1,4}|\/\d)/) { if ($ipaddressrange =~ /::\//) { my @IPv6split = split (/::/, $ipaddressrange); if ($IPAddress =~ /^$IPv6split[0]/) { $allowaccess = 1; last; } } elsif ($ipaddressrange == $IPAddress) { $allowaccess = 1; last; } } } if (! $allowaccess) { error("Access to statistics is not allowed from your IP Address ".$ENV{"REMOTE_ADDR"}); } } if (($UpdateStats || $MigrateStats) && (! $AllowToUpdateStatsFromBrowser) && $ENV{'GATEWAY_INTERFACE'}) { error("".($UpdateStats?"Update":"Migrate")." of statistics has not been allowed from a browser (AllowToUpdateStatsFromBrowser should be set to 1)."); } if (scalar keys %HTMLOutput && $MonthRequired eq 'all') { if (! $AllowFullYearView) { error("Full year view has not been allowed (AllowFullYearView is set to 0)."); } if ($AllowFullYearView < 3 && $ENV{'GATEWAY_INTERFACE'}) { error("Full year view has not been allowed from a browser (AllowFullYearView should be set to 3)."); } } #------------------------------------------ # MIGRATE PROCESS (Must be after reading config cause we need MaxNbOf... and Min...) #------------------------------------------ if ($MigrateStats) { if ($Debug) { debug("MigrateStats is $MigrateStats",2); } if ($MigrateStats !~ /^(.*)$PROG(\d\d)(\d\d\d\d)(\d{0,2})(\d{0,2})(.*)\.txt$/) { error("AWStats history file name must match following syntax: ${PROG}MMYYYY[.config].txt","","",1); } $DirData="$1"; $MonthRequired="$2"; $YearRequired="$3"; $DayRequired="$4"; $HourRequired="$5"; $FileSuffix="$6"; # Correct DirData if (! $DirData || $DirData =~ /^\./) { if (! $DirData || $DirData eq '.') { $DirData="$DIR"; } # If not defined or chosen to '.' value then DirData is current dir elsif ($DIR && $DIR ne '.') { $DirData="$DIR/$DirData"; } } $DirData||='.'; # If current dir not defined then we put it to '.' $DirData =~ s/[\\\/]+$//; print "Start migration for file '$MigrateStats'."; print $ENV{'GATEWAY_INTERFACE'}?"
    \n":"\n"; if ($EnableLockForUpdate) { &Lock_Update(1); } my $newhistory=&Read_History_With_TmpUpdate($YearRequired,$MonthRequired,$DayRequired,$HourRequired,1,0,'all'); if (rename("$newhistory","$MigrateStats")==0) { unlink "$newhistory"; error("Failed to rename \"$newhistory\" into \"$MigrateStats\".\nWrite permissions on \"$MigrateStats\" might be wrong".($ENV{'GATEWAY_INTERFACE'}?" for a 'migration from web'":"")." or file might be opened."); } if ($EnableLockForUpdate) { &Lock_Update(0); } print "Migration for file '$MigrateStats' successful."; print $ENV{'GATEWAY_INTERFACE'}?"
    \n":"\n"; &html_end(1); exit 0; } # Output main frame page and exit. This must be after the security check. if ($FrameName eq 'index') { # Define the NewLinkParams for main chart my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } # Exit if main frame print "\n"; print "\n"; print "\n"; print "<body>"; print "Your browser does not support frames.<br />\n"; print "You must set AWStats UseFramesWhenCGI parameter to 0\n"; print "to see your reports.<br />\n"; print "</body>\n"; print "\n"; &html_end(0); exit 0; } %MonthNumLib = ("01","$Message[60]","02","$Message[61]","03","$Message[62]","04","$Message[63]","05","$Message[64]","06","$Message[65]","07","$Message[66]","08","$Message[67]","09","$Message[68]","10","$Message[69]","11","$Message[70]","12","$Message[71]"); # Build ListOfYears list with all existing years ($lastyearbeforeupdate,$lastmonthbeforeupdate,$lastdaybeforeupdate,$lasthourbeforeupdate,$lastdatebeforeupdate)=(0,0,0,0,0); my $datemask=''; if ($DatabaseBreak eq 'month') { $datemask='(\d\d)(\d\d\d\d)'; } elsif ($DatabaseBreak eq 'year') { $datemask='(\d\d\d\d)'; } elsif ($DatabaseBreak eq 'day') { $datemask='(\d\d)(\d\d\d\d)(\d\d)'; } elsif ($DatabaseBreak eq 'hour') { $datemask='(\d\d)(\d\d\d\d)(\d\d)(\d\d)'; } if ($Debug) { debug("Scan for last history files into DirData='$DirData' with mask='$datemask'"); } opendir(DIR,"$DirData"); my $regfilesuffix=quotemeta($FileSuffix); foreach (grep /^$PROG$datemask$regfilesuffix\.txt(|\.gz)$/i, file_filt sort readdir DIR) { /^$PROG$datemask$regfilesuffix\.txt(|\.gz)$/i; if (! $ListOfYears{"$2"} || "$1" gt $ListOfYears{"$2"}) { # ListOfYears contains max month found $ListOfYears{"$2"}="$1"; } my $rangestring=($2||"").($1||"").($3||"").($4||""); if ($rangestring gt $lastdatebeforeupdate) { # We are on a new max for mask $lastyearbeforeupdate=($2||""); $lastmonthbeforeupdate=($1||""); $lastdaybeforeupdate=($3||""); $lasthourbeforeupdate=($4||""); $lastdatebeforeupdate=$rangestring; } } close DIR; # If at least one file found, get value for LastLine if ($lastyearbeforeupdate) { # Read 'general' section of last history file for LastLine &Read_History_With_TmpUpdate($lastyearbeforeupdate,$lastmonthbeforeupdate,$lastdaybeforeupdate,$lasthourbeforeupdate,0,0,"general"); } # Warning if lastline in future if ($LastLine > ($nowtime + 20000)) { warning("WARNING: LastLine parameter in history file is '$LastLine' so in future. May be you need to correct manually the line LastLine in some awstats*.$SiteConfig.conf files."); } # Force LastLine if ($QueryString =~ /lastline=(\d{14})/i) { $LastLine=$1; } if ($Debug) { debug("Last year=$lastyearbeforeupdate - Last month=$lastmonthbeforeupdate"); debug("Last day=$lastdaybeforeupdate - Last hour=$lasthourbeforeupdate"); debug("LastLine=$LastLine"); debug("LastLineNumber=$LastLineNumber"); debug("LastLineOffset=$LastLineOffset"); debug("LastLineChecksum=$LastLineChecksum"); } # Init vars &Init_HashArray(); #------------------------------------------ # UPDATE PROCESS #------------------------------------------ my $lastlinenb=0; my $lastlineoffset=0; my $lastlineoffsetnext=0; if ($Debug) { debug("UpdateStats is $UpdateStats",2); } if ($UpdateStats && $FrameName ne 'index' && $FrameName ne 'mainleft') { # Update only on index page or when not framed to avoid update twice my %MonthNum = ("Jan","01","jan","01","Feb","02","feb","02","Mar","03","mar","03","Apr","04","apr","04","May","05","may","05","Jun","06","jun","06","Jul","07","jul","07","Aug","08","aug","08","Sep","09","sep","09","Oct","10","oct","10","Nov","11","nov","11","Dec","12","dec","12"); # MonthNum must be in english because used to translate log date in apache log files if (! scalar keys %HTMLOutput) { print "Create/Update database for config \"$FileConfig\" by AWStats version $VERSION\n"; print "From data in log file \"$LogFile\"...\n"; } my $lastprocessedyear=$lastyearbeforeupdate||0; my $lastprocessedmonth=$lastmonthbeforeupdate||0; my $lastprocessedday=$lastdaybeforeupdate||0; my $lastprocessedhour=$lasthourbeforeupdate||0; my $lastprocesseddate=''; if ($DatabaseBreak eq 'month') { $lastprocesseddate=sprintf("%04i%02i",$lastprocessedyear,$lastprocessedmonth); } elsif ($DatabaseBreak eq 'year') { $lastprocesseddate=sprintf("%04i%",$lastprocessedyear); } elsif ($DatabaseBreak eq 'day') { $lastprocesseddate=sprintf("%04i%02i%02i",$lastprocessedyear,$lastprocessedmonth,$lastprocessedday); } elsif ($DatabaseBreak eq 'hour') { $lastprocesseddate=sprintf("%04i%02i%02i%02i",$lastprocessedyear,$lastprocessedmonth,$lastprocessedday,$lastprocessedhour); } my @list; # Init RobotsSearchIDOrder required for update process @list=(); if ($LevelForRobotsDetection >= 1) { foreach (1..$LevelForRobotsDetection) { push @list,"list$_"; } push @list,"listgen"; # Always added } foreach my $key (@list) { push @RobotsSearchIDOrder,@{"RobotsSearchIDOrder_$key"}; if ($Debug) { debug("Add ".@{"RobotsSearchIDOrder_$key"}." elements from RobotsSearchIDOrder_$key into RobotsSearchIDOrder",2); } } if ($Debug) { debug("RobotsSearchIDOrder has now ".@RobotsSearchIDOrder." elements",1); } # Init SearchEnginesIDOrder required for update process @list=(); if ($LevelForSearchEnginesDetection >= 1) { foreach (1..$LevelForSearchEnginesDetection) { push @list,"list$_"; } push @list,"listgen"; # Always added } foreach my $key (@list) { push @SearchEnginesSearchIDOrder,@{"SearchEnginesSearchIDOrder_$key"}; if ($Debug) { debug("Add ".@{"SearchEnginesSearchIDOrder_$key"}." elements from SearchEnginesSearchIDOrder_$key into SearchEnginesSearchIDOrder",2); } } if ($Debug) { debug("SearchEnginesSearchIDOrder has now ".@SearchEnginesSearchIDOrder." elements",1); } # Complete HostAliases array my $sitetoanalyze=quotemeta(lc($SiteDomain)); if (! @HostAliases) { warning("Warning: HostAliases parameter is not defined, $PROG choose \"$SiteDomain localhost 127.0.0.1\"."); push @HostAliases,qr/^$sitetoanalyze$/i; push @HostAliases,qr/^localhost$/i; push @HostAliases,qr/^127\.0\.0\.1$/i; } else { unshift @HostAliases,qr/^$sitetoanalyze$/i; } # Add SiteDomain as first value # Optimize arrays @HostAliases=&OptimizeArray(\@HostAliases,1); if ($Debug) { debug("HostAliases precompiled regex list is now @HostAliases",1); } @SkipDNSLookupFor=&OptimizeArray(\@SkipDNSLookupFor,1); if ($Debug) { debug("SkipDNSLookupFor precompiled regex list is now @SkipDNSLookupFor",1); } @SkipHosts=&OptimizeArray(\@SkipHosts,1); if ($Debug) { debug("SkipHosts precompiled regex list is now @SkipHosts",1); } @SkipReferrers=&OptimizeArray(\@SkipReferrers,1); if ($Debug) { debug("SkipReferrers precompiled regex list is now @SkipReferrers",1); } @SkipUserAgents=&OptimizeArray(\@SkipUserAgents,1); if ($Debug) { debug("SkipUserAgents precompiled regex list is now @SkipUserAgents",1); } @SkipFiles=&OptimizeArray(\@SkipFiles,$URLNotCaseSensitive); if ($Debug) { debug("SkipFiles precompiled regex list is now @SkipFiles",1); } @OnlyHosts=&OptimizeArray(\@OnlyHosts,1); if ($Debug) { debug("OnlyHosts precompiled regex list is now @OnlyHosts",1); } @OnlyUsers=&OptimizeArray(\@OnlyUsers,1); if ($Debug) { debug("OnlyUsers precompiled regex list is now @OnlyUsers",1); } @OnlyUserAgents=&OptimizeArray(\@OnlyUserAgents,1); if ($Debug) { debug("OnlyUserAgents precompiled regex list is now @OnlyUserAgents",1); } @OnlyFiles=&OptimizeArray(\@OnlyFiles,$URLNotCaseSensitive); if ($Debug) { debug("OnlyFiles precompiled regex list is now @OnlyFiles",1); } @NotPageFiles=&OptimizeArray(\@NotPageFiles,$URLNotCaseSensitive); if ($Debug) { debug("NotPageFiles precompiled regex list is now @NotPageFiles",1); } # Precompile the regex search strings with qr @RobotsSearchIDOrder=map{qr/$_/i} @RobotsSearchIDOrder; @WormsSearchIDOrder=map{qr/$_/i} @WormsSearchIDOrder; @BrowsersSearchIDOrder=map{qr/$_/i} @BrowsersSearchIDOrder; @OSSearchIDOrder=map{qr/$_/i} @OSSearchIDOrder; @SearchEnginesSearchIDOrder=map{qr/$_/i} @SearchEnginesSearchIDOrder; my $miscquoted=quotemeta("$MiscTrackerUrl"); my $defquoted=quotemeta("/$DefaultFile[0]"); my $sitewithoutwww=lc($SiteDomain); $sitewithoutwww =~ s/www\.//; $sitewithoutwww=quotemeta($sitewithoutwww); # Define precompiled regex my $regmisc=qr/^$miscquoted/; my $regfavico=qr/\/favicon\.ico$/i; my $regrobot=qr/^\/robots\.txt$/i; my $regtruncanchor=qr/#(\w*)$/; my $regtruncurl=qr/([$URLQuerySeparators])(.*)$/; my $regext=qr/\.(\w{1,6})$/; my $regdefault; if ($URLNotCaseSensitive) { $regdefault=qr/$defquoted$/i; } else { $regdefault=qr/$defquoted$/; } my $regipv4=qr/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; my $regipv6=qr/^[0-9A-F]*:/i; my $regvermsie=qr/msie([+_ ]|)([\d\.]*)/i; my $regvernetscape=qr/netscape.?\/([\d\.]*)/i; my $regverfirefox=qr/firefox\/([\d\.]*)/i; my $regversvn=qr/svn\/([\d\.]*)/i; my $regvermozilla=qr/mozilla(\/|)([\d\.]*)/i; my $regnotie=qr/webtv|omniweb|opera/i; my $regnotnetscape=qr/gecko|compatible|opera|galeon|safari/i; my $regreferer=qr/^(\w+):\/\/([^\/:]+)(:\d+|)/; my $regreferernoquery=qr/^([^$URLQuerySeparators]+)/; my $reglocal=qr/^(www\.|)$sitewithoutwww/i; my $regget=qr/get|out/i; my $regsent=qr/sent|put|in/i; # Define value of $pos_xxx, @fieldlib, $PerlParsingFormat &DefinePerlParsingFormat($LogFormat); # Load DNS Cache Files #------------------------------------------ if ($DNSLookup) { &Read_DNS_Cache(\%MyDNSTable,"$DNSStaticCacheFile","",1); # Load with save into a second plugin file if plugin enabled and second file not up to date. No use of FileSuffix if ($DNSLookup == 1) { # System DNS lookup required #if (! eval("use Socket;")) { error("Failed to load perl module Socket."); } #use Socket; &Read_DNS_Cache(\%TmpDNSLookup,"$DNSLastUpdateCacheFile","$FileSuffix",0); # Load with no save into a second plugin file. Use FileSuffix } } # Processing log #------------------------------------------ if ($EnableLockForUpdate) { # Trap signals to remove lock $SIG{INT} = \&SigHandler; # 2 #$SIG{KILL} = \&SigHandler; # 9 #$SIG{TERM} = \&SigHandler; # 15 # Set AWStats update lock &Lock_Update(1); } if ($Debug) { debug("Start Update process (lastprocesseddate=$lastprocesseddate)"); } # Open log file if ($Debug) { debug("Open log file \"$LogFile\""); } open(LOG,"$LogFile") || error("Couldn't open server log file \"$LogFile\" : $!"); binmode LOG; # Avoid premature EOF due to log files corrupted with \cZ or bin chars # Define local variables for loop scan my @field=(); my $counterforflushtest=0; my $qualifdrop=''; my $countedtraffic=0; # Reset chrono for benchmark (first call to GetDelaySinceStart) &GetDelaySinceStart(1); if (! scalar keys %HTMLOutput) { print "Phase 1 : First bypass old records, searching new record...\n"; } # Can we try a direct seek access in log ? my $line; if ($LastLine && $LastLineNumber && $LastLineOffset && $LastLineChecksum) { # Try a direct seek access to save time if ($Debug) { debug("Try a direct access to LastLine=$LastLine, LastLineNumber=$LastLineNumber, LastLineOffset=$LastLineOffset, LastLineChecksum=$LastLineChecksum"); } seek(LOG,$LastLineOffset,0); if ($line=) { chomp $line; $line =~ s/\r$//; @field=map(/$PerlParsingFormat/,$line); if ($Debug) { my $string=''; foreach (0..@field-1) { $string.="$fieldlib[$_]=$field[$_] "; } if ($Debug) { debug(" Read line after direct access: $string",1); } } my $checksum=&CheckSum($line); if ($Debug) { debug(" LastLineChecksum=$LastLineChecksum, Read line checksum=$checksum",1); } if ($checksum == $LastLineChecksum ) { if (! scalar keys %HTMLOutput) { print "Direct access after last parsed record (after line $LastLineNumber)\n"; } $lastlinenb=$LastLineNumber; $lastlineoffset=$LastLineOffset; $lastlineoffsetnext=tell LOG; $NewLinePhase=1; } else { if (! scalar keys %HTMLOutput) { print "Direct access to last remembered record has fallen on another record.\nSo searching new records from beginning of log file...\n"; } $lastlinenb=0; $lastlineoffset=0; $lastlineoffsetnext=0; seek(LOG,0,0); } } else { if (! scalar keys %HTMLOutput) { print "Direct access to last remembered record is out of file.\nSo searching it from beginning of log file...\n"; } $lastlinenb=0; $lastlineoffset=0; $lastlineoffsetnext=0; seek(LOG,0,0); } } else { # No try of direct seek access if (! scalar keys %HTMLOutput) { print "Searching new records from beginning of log file...\n"; } $lastlinenb=0; $lastlineoffset=0; $lastlineoffsetnext=0; } # # Loop on each log line # while ($line=) { chomp $line; $line =~ s/\r$//; if ($UpdateFor && $NbOfLinesParsed >= $UpdateFor) { last; } $NbOfLinesParsed++; $lastlineoffset=$lastlineoffsetnext; $lastlineoffsetnext=tell LOG; if ($ShowSteps) { if ((++$NbOfLinesShowsteps & $NBOFLINESFORBENCHMARK) == 0) { my $delay=&GetDelaySinceStart(0); print "$NbOfLinesParsed lines processed (".($delay>0?$delay:1000)." ms, ".int(1000*$NbOfLinesShowsteps/($delay>0?$delay:1000))." lines/second)\n"; } } if ($LogFormat eq '2' && $line =~ /^#Fields:/) { my @fixField=map(/^#Fields: (.*)/, $line); if ($fixField[0] !~ /s-kernel-time/) { debug("Found new log format: '". $fixField[0] ."'",1); &DefinePerlParsingFormat($fixField[0]); } } # Parse line record to get all required fields if (! (@field=map(/$PerlParsingFormat/,$line))) { $NbOfLinesCorrupted++; if ($ShowCorrupted) { if ($line =~ /^#/ || $line =~ /^!/) { print "Corrupted record line ".($lastlinenb+$NbOfLinesParsed)." (comment line): $line\n"; } elsif ($line =~ /^\s*$/) { print "Corrupted record line ".($lastlinenb+$NbOfLinesParsed)." (blank line)\n"; } else { print "Corrupted record line ".($lastlinenb+$NbOfLinesParsed)." (record format does not match LogFormat parameter): $line\n"; } } if ($NbOfLinesParsed >= $NbOfLinesForCorruptedLog && $NbOfLinesParsed == $NbOfLinesCorrupted) { error("Format error",$line,$LogFile); } # Exit with format error if ($line =~ /^__end_of_file__/i) { last; } # For test purpose only next; } if ($Debug) { my $string=''; foreach (0..@field-1) { $string.="$fieldlib[$_]=$field[$_] "; } if ($Debug) { debug(" Correct format line ".($lastlinenb+$NbOfLinesParsed).": $string",4); } } # Drop wrong virtual host name #---------------------------------------------------------------------- if ($pos_vh>=0 && $field[$pos_vh] !~ /^$SiteDomain$/i) { my $skip=1; foreach (@HostAliases) { if ($field[$pos_vh] =~ /$_/) { $skip=0; last; } } if ($skip) { $NbOfLinesDropped++; if ($ShowDropped) { print "Dropped record (virtual hostname '$field[$pos_vh]' does not match SiteDomain='$SiteDomain' nor HostAliases parameters): $line\n"; } next; } } # Drop wrong method/protocol #--------------------------- if ($LogType ne 'M') { $field[$pos_url] =~ s/\s/%20/g; } if ($LogType eq 'W' && ($field[$pos_method] eq 'GET' || $field[$pos_method] eq 'POST' || $field[$pos_method] eq 'HEAD' || $field[$pos_method] eq 'PROPFIND' || $field[$pos_method] eq 'CHECKOUT' || $field[$pos_method] eq 'LOCK' || $field[$pos_method] eq 'PROPPATCH' || $field[$pos_method] eq 'OPTIONS' || $field[$pos_method] eq 'MKACTIVITY' || $field[$pos_method] eq 'PUT' || $field[$pos_method] eq 'MERGE' || $field[$pos_method] eq 'DELETE' || $field[$pos_method] eq 'REPORT' || $field[$pos_method] eq 'MKCOL' || $field[$pos_method] eq 'COPY' || $field[$pos_method] eq 'RPC_IN_DATA' || $field[$pos_method] eq 'RPC_OUT_DATA' || $field[$pos_method] eq 'OK' # Webstar || $field[$pos_method] eq 'ERR!' # Webstar || $field[$pos_method] eq 'PRIV' # Webstar )) { # HTTP request. Keep only GET, POST, HEAD, *OK* and ERR! for Webstar. Do not keep OPTIONS, TRACE } elsif (($LogType eq 'W' || $LogType eq 'S') && ($field[$pos_method] eq 'GET' || $field[$pos_method] eq 'mms' || $field[$pos_method] eq 'rtsp' || $field[$pos_method] eq 'http' || $field[$pos_method] eq 'RTP')) { # Streaming request (windows media server, realmedia or darwin streaming server) } elsif ($LogType eq 'M' && $field[$pos_method] eq 'SMTP') { # Mail request ('SMTP' for mail log with maillogconvert.pl preprocessor) } elsif ($LogType eq 'F' && ($field[$pos_method] eq 'RETR' || $field[$pos_method] eq 'o' || $field[$pos_method] =~ /$regget/o)) { # FTP GET request } elsif ($LogType eq 'F' && ($field[$pos_method] eq 'STOR' || $field[$pos_method] eq 'i' || $field[$pos_method] =~ /$regsent/o)) { # FTP SENT request } else { $NbOfLinesDropped++; if ($ShowDropped) { print "Dropped record (method/protocol '$field[$pos_method]' not qualified when LogType=$LogType): $line\n"; } next; } $field[$pos_date] =~ tr/,-\/ \t/:::::/s; # " \t" is used instead of "\s" not known with tr my @dateparts=split(/:/,$field[$pos_date]); # tr and split faster than @dateparts=split(/[\/\-:\s]/,$field[$pos_date]) # Detected date format: dddddddddd, YYYY-MM-DD HH:MM:SS (IIS), MM/DD/YY\tHH:MM:SS, # DD/Month/YYYY:HH:MM:SS (Apache), DD/MM/YYYY HH:MM:SS, Mon DD HH:MM:SS if (! $dateparts[1]) { # Unix timestamp ($dateparts[5],$dateparts[4],$dateparts[3],$dateparts[0],$dateparts[1],$dateparts[2]) = localtime(int($field[$pos_date])); $dateparts[1]++;$dateparts[2]+=1900; } elsif ($dateparts[0] =~ /^....$/) { my $tmp=$dateparts[0]; $dateparts[0]=$dateparts[2]; $dateparts[2]=$tmp; } elsif ($field[$pos_date] =~ /^..:..:..:/) { $dateparts[2]+=2000; my $tmp=$dateparts[0]; $dateparts[0]=$dateparts[1]; $dateparts[1]=$tmp; } elsif ($dateparts[0] =~ /^...$/) { my $tmp=$dateparts[0]; $dateparts[0]=$dateparts[1]; $dateparts[1]=$tmp; $tmp=$dateparts[5]; $dateparts[5]=$dateparts[4]; $dateparts[4]=$dateparts[3]; $dateparts[3]=$dateparts[2]; $dateparts[2]=$tmp||$nowyear; } if (exists($MonthNum{$dateparts[1]})) { $dateparts[1]=$MonthNum{$dateparts[1]}; } # Change lib month in num month if necessary if ($dateparts[1] <= 0) { # Date corrupted (for example $dateparts[1]='dic' for december month in a spanish log file) $NbOfLinesCorrupted++; if ($ShowCorrupted) { print "Corrupted record line ".($lastlinenb+$NbOfLinesParsed)." (bad date format for month, may be month are not in english ?): $line\n"; } next; } # Now @dateparts is (DD,MM,YYYY,HH,MM,SS) and we're going to create $timerecord=YYYYMMDDHHMMSS if ($PluginsLoaded{'ChangeTime'}{'timezone'}) { @dateparts=ChangeTime_timezone(\@dateparts); } my $yearrecord=int($dateparts[2]); my $monthrecord=int($dateparts[1]); my $dayrecord=int($dateparts[0]); my $hourrecord=int($dateparts[3]); my $daterecord=''; if ($DatabaseBreak eq 'month') { $daterecord=sprintf("%04i%02i",$yearrecord,$monthrecord); } elsif ($DatabaseBreak eq 'year') { $daterecord=sprintf("%04i%",$yearrecord); } elsif ($DatabaseBreak eq 'day') { $daterecord=sprintf("%04i%02i%02i",$yearrecord,$monthrecord,$dayrecord); } elsif ($DatabaseBreak eq 'hour') { $daterecord=sprintf("%04i%02i%02i%02i",$yearrecord,$monthrecord,$dayrecord,$hourrecord); } # TODO essayer de virer yearmonthrecord my $yearmonthdayrecord=sprintf("$dateparts[2]%02i%02i",$dateparts[1],$dateparts[0]); my $timerecord=((int("$yearmonthdayrecord")*100+$dateparts[3])*100+$dateparts[4])*100+$dateparts[5]; # Check date #----------------------- if ($LogType eq 'M' && $timerecord > $tomorrowtime) { # Postfix/Sendmail does not store year, so we assume that year is year-1 if record is in future $yearrecord--; if ($DatabaseBreak eq 'month') { $daterecord=sprintf("%04i%02i",$yearrecord,$monthrecord); } elsif ($DatabaseBreak eq 'year') { $daterecord=sprintf("%04i%",$yearrecord); } elsif ($DatabaseBreak eq 'day') { $daterecord=sprintf("%04i%02i%02i",$yearrecord,$monthrecord,$dayrecord); } elsif ($DatabaseBreak eq 'hour') { $daterecord=sprintf("%04i%02i%02i%02i",$yearrecord,$monthrecord,$dayrecord,$hourrecord); } # TODO essayer de virer yearmonthrecord $yearmonthdayrecord=sprintf("$yearrecord%02i%02i",$dateparts[1],$dateparts[0]); $timerecord=((int("$yearmonthdayrecord")*100+$dateparts[3])*100+$dateparts[4])*100+$dateparts[5]; } if ($timerecord < 10000000000000 || $timerecord > $tomorrowtime) { $NbOfLinesCorrupted++; if ($ShowCorrupted) { print "Corrupted record (invalid date, timerecord=$timerecord): $line\n"; } next; # Should not happen, kept in case of parasite/corrupted line } if ($NewLinePhase) { # TODO NOTSORTEDRECORDTOLERANCE does not work around midnight if ($timerecord < ($LastLine - $NOTSORTEDRECORDTOLERANCE)) { # Should not happen, kept in case of parasite/corrupted old line $NbOfLinesCorrupted++; if ($ShowCorrupted) { print "Corrupted record (date $timerecord lower than $LastLine-$NOTSORTEDRECORDTOLERANCE): $line\n"; } next; } } else { if ($timerecord <= $LastLine) { # Already processed $NbOfOldLines++; next; } # We found a new line. This will replace comparison "<=" with "<" between timerecord and LastLine (we should have only new lines now) $NewLinePhase=1; # We will never enter here again if ($ShowSteps) { if ($NbOfLinesShowsteps > 1 && ($NbOfLinesShowsteps & $NBOFLINESFORBENCHMARK)) { my $delay=&GetDelaySinceStart(0); print "".($NbOfLinesParsed-1)." lines processed (".($delay>0?$delay:1000)." ms, ".int(1000*($NbOfLinesShowsteps-1)/($delay>0?$delay:1000))." lines/second)\n"; } &GetDelaySinceStart(1); $NbOfLinesShowsteps=1; } if (! scalar keys %HTMLOutput) { print "Phase 2 : Now process new records (Flush history on disk after ".($LIMITFLUSH<<2)." hosts)...\n"; #print "Phase 2 : Now process new records (Flush history on disk after ".($LIMITFLUSH<<2)." hosts or ".($LIMITFLUSH)." URLs)...\n"; } } # Convert URL for Webstar to common URL if ($LogFormat eq '3') { $field[$pos_url]=~s/:/\//g; if ($field[$pos_code] eq '-') { $field[$pos_code]='200'; } } # Here, field array, timerecord and yearmonthdayrecord are initialized for log record if ($Debug) { debug(" This is a not already processed record ($timerecord)",4); } # We found a new line #---------------------------------------- if ($timerecord > $LastLine) { $LastLine = $timerecord; } # Test should always be true except with not sorted log files # Skip for some client host IP addresses, some URLs, other URLs if (@SkipHosts && (&SkipHost($field[$pos_host]) || ($pos_hostr && &SkipHost($field[$pos_hostr])))) { $qualifdrop="Dropped record (host $field[$pos_host]".($pos_hostr?" and $field[$pos_hostr]":"")." not qualified by SkipHosts)"; } elsif (@SkipFiles && &SkipFile($field[$pos_url])) { $qualifdrop="Dropped record (URL $field[$pos_url] not qualified by SkipFiles)"; } elsif (@SkipUserAgents && $pos_agent >= 0 && &SkipUserAgent($field[$pos_agent])) { $qualifdrop="Dropped record (user agent '$field[$pos_agent]' not qualified by SkipUserAgents)"; } elsif (@SkipReferrers && $pos_referer >= 0 && &SkipReferrer($field[$pos_referer])) { $qualifdrop="Dropped record (URL $field[$pos_referer] not qualified by SkipReferrers)"; } elsif (@OnlyHosts && ! &OnlyHost($field[$pos_host]) && (! $pos_hostr || ! &OnlyHost($field[$pos_hostr]))) { $qualifdrop="Dropped record (host $field[$pos_host]".($pos_hostr?" and $field[$pos_hostr]":"")." not qualified by OnlyHosts)"; } elsif (@OnlyUsers && ! &OnlyUser($field[$pos_logname])) { $qualifdrop="Dropped record (URL $field[$pos_logname] not qualified by OnlyUsers)"; } elsif (@OnlyFiles && ! &OnlyFile($field[$pos_url])) { $qualifdrop="Dropped record (URL $field[$pos_url] not qualified by OnlyFiles)"; } elsif (@OnlyUserAgents && ! &OnlyUserAgent($field[$pos_agent])) { $qualifdrop="Dropped record (user agent '$field[$pos_agent]' not qualified by OnlyUserAgents)"; } if ($qualifdrop) { $NbOfLinesDropped++; if ($Debug) { debug("$qualifdrop: $line",4); } if ($ShowDropped) { print "$qualifdrop: $line\n"; } $qualifdrop=''; next; } # Record is approved #------------------- # Is it in a new break section ? #------------------------------- if ($daterecord > $lastprocesseddate) { # A new break to process if ($lastprocesseddate > 0) { # We save data of previous break &Read_History_With_TmpUpdate($lastprocessedyear,$lastprocessedmonth,$lastprocessedday,$lastprocessedhour,1,1,"all",($lastlinenb+$NbOfLinesParsed),$lastlineoffset,&CheckSum($line)); $counterforflushtest=0; # We reset counterforflushtest } $lastprocessedyear=$yearrecord; $lastprocessedmonth=$monthrecord; $lastprocessedday=$dayrecord; $lastprocessedhour=$hourrecord; if ($DatabaseBreak eq 'month') { $lastprocesseddate=sprintf("%04i%02i",$yearrecord,$monthrecord); } elsif ($DatabaseBreak eq 'year') { $lastprocesseddate=sprintf("%04i%",$yearrecord); } elsif ($DatabaseBreak eq 'day') { $lastprocesseddate=sprintf("%04i%02i%02i",$yearrecord,$monthrecord,$dayrecord); } elsif ($DatabaseBreak eq 'hour') { $lastprocesseddate=sprintf("%04i%02i%02i%02i",$yearrecord,$monthrecord,$dayrecord,$hourrecord); } } $countedtraffic=0; $NbOfNewLines++; # Convert $field[$pos_size] # if ($field[$pos_size] eq '-') { $field[$pos_size]=0; } # Define a clean target URL and referrer URL # We keep a clean $field[$pos_url] and # we store original value for urlwithnoquery, tokenquery and standalonequery #--------------------------------------------------------------------------- if ($URLNotCaseSensitive) { $field[$pos_url]=lc($field[$pos_url]); } # Possible URL syntax for $field[$pos_url]: /mydir/mypage.ext?param1=x¶m2=y#aaa, /mydir/mypage.ext#aaa, / my $urlwithnoquery; my $tokenquery; my $standalonequery; my $anchor=''; if ($field[$pos_url] =~ s/$regtruncanchor//o) { $anchor=$1; } # Remove and save anchor if ($URLWithQuery) { $urlwithnoquery=$field[$pos_url]; my $foundparam=($urlwithnoquery =~ s/$regtruncurl//o); $tokenquery=$1||''; $standalonequery=$2||''; # For IIS setup, if pos_query is enabled we need to combine the URL to query strings if (! $foundparam && $pos_query >=0 && $field[$pos_query] && $field[$pos_query] ne '-') { $foundparam=1; $tokenquery='?'; $standalonequery=$field[$pos_query]; # Define query $field[$pos_url] .= '?'.$field[$pos_query]; } if ($foundparam) { # Keep only params that are defined in URLWithQueryWithOnlyFollowingParameters my $newstandalonequery=''; if (@URLWithQueryWithOnly) { foreach (@URLWithQueryWithOnly) { foreach my $p (split(/&/,$standalonequery)) { if ($URLNotCaseSensitive) { if ($p =~ /^$_=/i) { $newstandalonequery.="$p&"; last; } } else { if ($p =~ /^$_=/) { $newstandalonequery.="$p&"; last; } } } } chop $newstandalonequery; } # Remove params that are marked to be ignored in URLWithQueryWithoutFollowingParameters elsif (@URLWithQueryWithout) { foreach my $p (split(/&/,$standalonequery)) { my $found=0; foreach (@URLWithQueryWithout) { #if ($Debug) { debug(" Check if '$_=' is param '$p' to remove it from query",5); } if ($URLNotCaseSensitive) { if ($p =~ /^$_=/i) { $found=1; last; } } else { if ($p =~ /^$_=/) { $found=1; last; } } } if (! $found) { $newstandalonequery.="$p&"; } } chop $newstandalonequery; } else { $newstandalonequery=$standalonequery; } # Define query $field[$pos_url]=$urlwithnoquery; if ($newstandalonequery) { $field[$pos_url].="$tokenquery$newstandalonequery"; } } } else { # Trunc parameters of URL $field[$pos_url] =~ s/$regtruncurl//o; $urlwithnoquery=$field[$pos_url]; $tokenquery=$1||''; $standalonequery=$2||''; # For IIS setup, if pos_query is enabled we need to use it for query strings if ($pos_query >=0 && $field[$pos_query] && $field[$pos_query] ne '-') { $tokenquery='?'; $standalonequery=$field[$pos_query]; } } if ($URLWithAnchor && $anchor) { $field[$pos_url].="#$anchor"; } # Restore anchor # Here now urlwithnoquery is /mydir/mypage.ext, /mydir, /, /page#XXX # Here now tokenquery is '' or '?' or ';' # Here now standalonequery is '' or 'param1=x' # Define page and extension #-------------------------- my $PageBool=1; # Extension my $extension; if ($urlwithnoquery =~ /$regext/o || ($urlwithnoquery =~ /[\\\/]$/ && $DefaultFile[0] =~ /$regext/o)) { $extension=($LevelForFileTypesDetection>=2 || $MimeHashFamily{$1})?lc($1):'Unknown'; if ($NotPageList{$extension}) { $PageBool=0; } } else { $extension='Unknown'; } if (@NotPageFiles && &NotPageFile($field[$pos_url])) { $PageBool=0; } # Analyze: misc tracker (must be before return code) #--------------------------------------------------- if ($urlwithnoquery =~ /$regmisc/o) { if ($Debug) { debug(" Found an URL that is a MiscTracker record with standalonequery=$standalonequery",2); } my $foundparam=0; foreach (split(/&/,$standalonequery)) { if ($_ =~ /^screen=(\d+)x(\d+)/i) { $foundparam++; $_screensize_h{"$1x$2"}++; next; } #if ($_ =~ /cdi=(\d+)/i) { $foundparam++; $_screendepth_h{"$1"}++; next; } if ($_ =~ /^nojs=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"JavascriptDisabled"}++; } next; } if ($_ =~ /^java=(\w+)/i) { $foundparam++; if ($1 eq 'true') { $_misc_h{"JavaEnabled"}++; } next; } if ($_ =~ /^shk=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"DirectorSupport"}++; } next; } if ($_ =~ /^fla=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"FlashSupport"}++; } next; } if ($_ =~ /^rp=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"RealPlayerSupport"}++; } next; } if ($_ =~ /^mov=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"QuickTimeSupport"}++; } next; } if ($_ =~ /^wma=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"WindowsMediaPlayerSupport"}++; } next; } if ($_ =~ /^pdf=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"PDFSupport"}++; } next; } } if ($foundparam) { $_misc_h{"TotalMisc"}++; } } # Analyze: favicon (=> countedtraffic=1 if favicon) #-------------------------------------------------- if ($pos_referer >= 0 && $field[$pos_referer] && $urlwithnoquery =~ /$regfavico/o) { if (($field[$pos_code] != 404 || $urlwithnoquery !~ /\/.+\/favicon\.ico$/i) && ($field[$pos_agent] =~ /MSIE/)) { # We don't count one hit if (not on root and error) and MSIE # If error not on root, another hit will be made on root. If not MSIE, hit are made not only for "Adding". $_misc_h{'AddToFavourites'}++; # Hit on favicon on root or without error, we count it } $countedtraffic=1; # favicon is a case that must not be counted anywhere else } # Analyze: Worms (=> countedtraffic=2 if worm) #--------------------------------------------- if (! $countedtraffic) { if ($LevelForWormsDetection) { foreach (@WormsSearchIDOrder) { if ($field[$pos_url] =~ /$_/) { # It's a worm my $worm=&UnCompileRegex($_); if ($Debug) { debug(" Record is a hit from a worm identified by '$worm'",2); } $worm=$WormsHashID{$worm}||'unknown'; $_worm_h{$worm}++; $_worm_k{$worm}+=int($field[$pos_size]); $_worm_l{$worm}=$timerecord; $countedtraffic=2; if ($PageBool) { $_time_nv_p[$hourrecord]++; } $_time_nv_h[$hourrecord]++; $_time_nv_k[$hourrecord]+=int($field[$pos_size]); last; } } } } # Analyze: Status code (=> countedtraffic=3 if error) #---------------------------------------------------- if (! $countedtraffic) { if ($LogType eq 'W' || $LogType eq 'S') { # HTTP record or Stream record if ($ValidHTTPCodes{$field[$pos_code]}) { # Code is valid if ($field[$pos_code] == 304) { $field[$pos_size]=0; } } else { # Code is not valid if ($field[$pos_code] !~ /^\d\d\d$/) { $field[$pos_code]=999; } $_errors_h{$field[$pos_code]}++; $_errors_k{$field[$pos_code]}+=int($field[$pos_size]); foreach my $code (keys %TrapInfosForHTTPErrorCodes) { if ($field[$pos_code] == $code) { # This is an error code which referrer need to be tracked my $newurl=substr($field[$pos_url],0,$MaxLengthOfStoredURL); $newurl =~ s/[$URLQuerySeparators].*$//; $_sider404_h{$newurl}++; if ($pos_referer >= 0) { my $newreferer=$field[$pos_referer]; if (! $URLReferrerWithQuery) { $newreferer =~ s/[$URLQuerySeparators].*$//; } $_referer404_h{$newurl}=$newreferer; last; } } } if ($Debug) { debug(" Record stored in the status code chart (status code=$field[$pos_code])",3); } $countedtraffic=3; if ($PageBool) { $_time_nv_p[$hourrecord]++; } $_time_nv_h[$hourrecord]++; $_time_nv_k[$hourrecord]+=int($field[$pos_size]); } } elsif ($LogType eq 'M') { # Mail record if (! $ValidSMTPCodes{$field[$pos_code]}) { # Code is not valid $_errors_h{$field[$pos_code]}++; $_errors_k{$field[$pos_code]}+=int($field[$pos_size]); # Size is often 0 when error if ($Debug) { debug(" Record stored in the status code chart (status code=$field[$pos_code])",3); } $countedtraffic=3; if ($PageBool) { $_time_nv_p[$hourrecord]++; } $_time_nv_h[$hourrecord]++; $_time_nv_k[$hourrecord]+=int($field[$pos_size]); } } elsif ($LogType eq 'F') { # FTP record } } # Analyze: Robot from robot database (=> countedtraffic=4 if robot) #------------------------------------------------------------------ if (! $countedtraffic) { if ($pos_agent >= 0) { if ($DecodeUA) { $field[$pos_agent] =~ s/%20/_/g; } # This is to support servers (like Roxen) that writes user agent with %20 in it $UserAgent=$field[$pos_agent]; if ($UserAgent && $UserAgent eq '-') { $UserAgent=''; } if ($LevelForRobotsDetection) { if ($UserAgent) { my $uarobot=$TmpRobot{$UserAgent}; if (! $uarobot) { #study $UserAgent; Does not increase speed foreach (@RobotsSearchIDOrder) { if ($UserAgent =~ /$_/) { my $bot=&UnCompileRegex($_); $TmpRobot{$UserAgent}=$uarobot="$bot"; # Last time, we won't search if robot or not. We know it is. if ($Debug) { debug(" UserAgent '$UserAgent' is added to TmpRobot with value '$bot'",2); } last; } } if (! $uarobot) { # Last time, we won't search if robot or not. We know it's not. $TmpRobot{$UserAgent}=$uarobot='-'; } } if ($uarobot ne '-') { # If robot, we stop here if ($Debug) { debug(" UserAgent '$UserAgent' contains robot ID '$uarobot'",2); } $_robot_h{$uarobot}++; $_robot_k{$uarobot}+=int($field[$pos_size]); $_robot_l{$uarobot}=$timerecord; if ($urlwithnoquery =~ /$regrobot/o) { $_robot_r{$uarobot}++; } $countedtraffic=4; if ($PageBool) { $_time_nv_p[$hourrecord]++; } $_time_nv_h[$hourrecord]++; $_time_nv_k[$hourrecord]+=int($field[$pos_size]); } } else { my $uarobot='no_user_agent'; # It's a robot or at least a bad browser, we stop here if ($Debug) { debug(" UserAgent not defined so it should be a robot, saved as robot 'no_user_agent'",2); } $_robot_h{$uarobot}++; $_robot_k{$uarobot}+=int($field[$pos_size]); $_robot_l{$uarobot}=$timerecord; if ($urlwithnoquery =~ /$regrobot/o) { $_robot_r{$uarobot}++; } $countedtraffic=4; if ($PageBool) { $_time_nv_p[$hourrecord]++; } $_time_nv_h[$hourrecord]++; $_time_nv_k[$hourrecord]+=int($field[$pos_size]); } } } } # Analyze: Robot from "hit on robots.txt" file (=> countedtraffic=5 if robot) # ------------------------------------------------------------------------- if (! $countedtraffic) { if ($urlwithnoquery =~ /$regrobot/o) { if ($Debug) { debug(" It's an unknown robot",2); } $_robot_h{'unknown'}++; $_robot_k{'unknown'}+=int($field[$pos_size]); $_robot_l{'unknown'}=$timerecord; $_robot_r{'unknown'}++; $countedtraffic=5; # Must not be counted somewhere else if ($PageBool) { $_time_nv_p[$hourrecord]++; } $_time_nv_h[$hourrecord]++; $_time_nv_k[$hourrecord]+=int($field[$pos_size]); } } # Analyze: File type - Compression #--------------------------------- if (! $countedtraffic) { if ($LevelForFileTypesDetection) { $_filetypes_h{$extension}++; $_filetypes_k{$extension}+=int($field[$pos_size]); # TODO can cause a warning # Compression if ($pos_gzipin>=0 && $field[$pos_gzipin]) { # If in and out in log my ($notused,$in)=split(/:/,$field[$pos_gzipin]); my ($notused1,$out,$notused2)=split(/:/,$field[$pos_gzipout]); if ($out) { $_filetypes_gz_in{$extension}+=$in; $_filetypes_gz_out{$extension}+=$out; } } elsif ($pos_compratio>=0 && ($field[$pos_compratio] =~ /(\d+)/)) { # Calculate in/out size from percentage if ($fieldlib[$pos_compratio] eq 'gzipratio') { # with mod_gzip: % is size (before-after)/before (low for jpg) ?????????? $_filetypes_gz_in{$extension}+=int($field[$pos_size]*100/((100-$1)||1)); } else { # with mod_deflate: % is size after/before (high for jpg) $_filetypes_gz_in{$extension}+=int($field[$pos_size]*100/($1||1)); } $_filetypes_gz_out{$extension}+=int($field[$pos_size]); } } # Analyze: Date - Hour - Pages - Hits - Kilo #------------------------------------------- if ($PageBool) { # Replace default page name with / only ('if' is to increase speed when only 1 value in @DefaultFile) if (@DefaultFile > 1) { foreach my $elem (@DefaultFile) { if ($field[$pos_url] =~ s/\/$elem$/\//o) { last; } } } else { $field[$pos_url] =~ s/$regdefault/\//o; } # FirstTime and LastTime are First and Last human visits (so changed if access to a page) $FirstTime{$lastprocesseddate}||=$timerecord; $LastTime{$lastprocesseddate}=$timerecord; $DayPages{$yearmonthdayrecord}++; $_url_p{$field[$pos_url]}++; #Count accesses for page (page) $_url_k{$field[$pos_url]}+=int($field[$pos_size]); $_time_p[$hourrecord]++; #Count accesses for hour (page) # TODO Use an id for hash key of url # $_url_t{$_url_id} } $_time_h[$hourrecord]++; $_time_k[$hourrecord]+=int($field[$pos_size]); $DayHits{$yearmonthdayrecord}++; #Count accesses for hour (hit) $DayBytes{$yearmonthdayrecord}+=int($field[$pos_size]); #Count accesses for hour (kb) # Analyze: Login #--------------- if ($pos_logname>=0 && $field[$pos_logname] && $field[$pos_logname] ne '-') { $field[$pos_logname] =~ s/ /_/g; # This is to allow space in logname if ($LogFormat eq '6') { $field[$pos_logname] =~ s/^\"//; $field[$pos_logname] =~ s/\"$//;} # logname field has " with Domino 6+ if ($AuthenticatedUsersNotCaseSensitive) { $field[$pos_logname]=lc($field[$pos_logname]); } # We found an authenticated user if ($PageBool) { $_login_p{$field[$pos_logname]}++; } #Count accesses for page (page) $_login_h{$field[$pos_logname]}++; #Count accesses for page (hit) $_login_k{$field[$pos_logname]}+=int($field[$pos_size]); #Count accesses for page (kb) $_login_l{$field[$pos_logname]}=$timerecord; } } # Do DNS lookup #-------------- my $Host=$field[$pos_host]; my $HostResolved=''; # HostResolved will be defined in next paragraf if countedtraffic is true if (! $countedtraffic) { my $ip=0; if ($DNSLookup) { # DNS lookup is 1 or 2 if ($Host =~ /$regipv4/o) { $ip=4; } # IPv4 elsif ($Host =~ /$regipv6/o) { $ip=6; } # IPv6 if ($ip) { # Check in static DNS cache file $HostResolved=$MyDNSTable{$Host}; if ($HostResolved) { if ($Debug) { debug(" DNS lookup asked for $Host and found in static DNS cache file: $HostResolved",4); } } elsif ($DNSLookup==1) { # Check in session cache (dynamic DNS cache file + session DNS cache) $HostResolved=$TmpDNSLookup{$Host}; if (! $HostResolved) { if (@SkipDNSLookupFor && &SkipDNSLookup($Host)) { $HostResolved=$TmpDNSLookup{$Host}='*'; if ($Debug) { debug(" No need of reverse DNS lookup for $Host, skipped at user request.",4); } } else { if ($ip == 4) { my $lookupresult=gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET); # This is very slow, may spend 20 seconds if (! $lookupresult || $lookupresult =~ /$regipv4/o || ! IsAscii($lookupresult)) { $TmpDNSLookup{$Host}=$HostResolved='*'; } else { $TmpDNSLookup{$Host}=$HostResolved=$lookupresult; } if ($Debug) { debug(" Reverse DNS lookup for $Host done: $HostResolved",4); } } elsif ($ip == 6) { if ($PluginsLoaded{'GetResolvedIP'}{'ipv6'}) { my $lookupresult=GetResolvedIP_ipv6($Host); if (! $lookupresult || ! IsAscii($lookupresult)) { $TmpDNSLookup{$Host}=$HostResolved='*'; } else { $TmpDNSLookup{$Host}=$HostResolved=$lookupresult; } } else { $TmpDNSLookup{$Host}=$HostResolved='*'; warning("Reverse DNS lookup for $Host not available without ipv6 plugin enabled."); } } else { error("Bad value vor ip"); } } } } else { $HostResolved='*'; if ($Debug) { debug(" DNS lookup by static DNS cache file asked for $Host but not found.",4); } } } else { if ($Debug) { debug(" DNS lookup asked for $Host but this is not an IP address.",4); } $DNSLookupAlreadyDone=$LogFile; } } else { if ($Host =~ /$regipv4/o) { $HostResolved='*'; $ip=4; } # IPv4 elsif ($Host =~ /$regipv6/o) { $HostResolved='*'; $ip=6; } # IPv6 if ($Debug) { debug(" No DNS lookup asked.",4); } } # Analyze: Country (Top-level domain) #------------------------------------ if ($Debug) { debug(" Search country (Host=$Host HostResolved=$HostResolved ip=$ip)",4); } my $Domain='ip'; # Set $HostResolved to host and resolve domain if ($HostResolved eq '*') { # $Host is an IP address and is not resolved (failed or not asked) or resolution gives an IP address $HostResolved = $Host; # Resolve Domain if ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip'}) { $Domain=GetCountryCodeByAddr_geoip($HostResolved); } # elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_region_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_region_maxmind($HostResolved); } # elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_city_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_city_maxmind($HostResolved); } elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoipfree'}) { $Domain=GetCountryCodeByAddr_geoipfree($HostResolved); } if ($AtLeastOneSectionPlugin) { foreach my $pluginname (keys %{$PluginsLoaded{'SectionProcessIp'}}) { my $function="SectionProcessIp_$pluginname"; if ($Debug) { debug(" Call to plugin function $function",5); } &$function($HostResolved); } } } else { # $Host was already a host name ($ip=0, $Host=name, $HostResolved='') or has been resolved ($ip>0, $Host=ip, $HostResolved defined) $HostResolved = lc($HostResolved?$HostResolved:$Host); # Resolve Domain if ($ip) { # If we have ip, we use it in priority instead of hostname if ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip'}) { $Domain=GetCountryCodeByAddr_geoip($Host); } # elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_region_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_region_maxmind($Host); } # elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_city_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_city_maxmind($Host); } elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoipfree'}) { $Domain=GetCountryCodeByAddr_geoipfree($Host); } elsif ($HostResolved =~ /\.(\w+)$/) { $Domain=$1; } if ($AtLeastOneSectionPlugin) { foreach my $pluginname (keys %{$PluginsLoaded{'SectionProcessIp'}}) { my $function="SectionProcessIp_$pluginname"; if ($Debug) { debug(" Call to plugin function $function",5); } &$function($Host); } } } else { if ($PluginsLoaded{'GetCountryCodeByName'}{'geoip'}) { $Domain=GetCountryCodeByName_geoip($HostResolved); } # elsif ($PluginsLoaded{'GetCountryCodeByName'}{'geoip_region_maxmind'}) { $Domain=GetCountryCodeByName_geoip_region_maxmind($HostResolved); } # elsif ($PluginsLoaded{'GetCountryCodeByName'}{'geoip_city_maxmind'}) { $Domain=GetCountryCodeByName_geoip_city_maxmind($HostResolved); } elsif ($PluginsLoaded{'GetCountryCodeByName'}{'geoipfree'}) { $Domain=GetCountryCodeByName_geoipfree($HostResolved); } elsif ($HostResolved =~ /\.(\w+)$/) { $Domain=$1; } if ($AtLeastOneSectionPlugin) { foreach my $pluginname (keys %{$PluginsLoaded{'SectionProcessHostname'}}) { my $function="SectionProcessHostname_$pluginname"; if ($Debug) { debug(" Call to plugin function $function",5); } &$function($HostResolved); } } } } # Store country if ($PageBool) { $_domener_p{$Domain}++; } $_domener_h{$Domain}++; $_domener_k{$Domain}+=int($field[$pos_size]); # Analyze: Host, URL entry+exit and Session #------------------------------------------ if ($PageBool) { my $timehostl=$_host_l{$HostResolved}; if ($timehostl) { # A visit for this host was already detected # TODO everywhere there is $VISITTIMEOUT # $timehostl =~ /^\d\d\d\d\d\d(\d\d)/; my $daytimehostl=$1; # if ($timerecord > ($timehostl+$VISITTIMEOUT+($dateparts[3]>$daytimehostl?$NEWDAYVISITTIMEOUT:0))) { if ($timerecord > ($timehostl+$VISITTIMEOUT)) { # This is a second visit or more if (! $_waithost_s{$HostResolved}) { # This is a second visit or more # We count 'visit','exit','entry','DayVisits' if ($Debug) { debug(" This is a second visit for $HostResolved.",4); } my $timehosts=$_host_s{$HostResolved}; my $page=$_host_u{$HostResolved}; if ($page) { $_url_x{$page}++; } $_url_e{$field[$pos_url]}++; $DayVisits{$yearmonthdayrecord}++; # We can't count session yet because we don't have the start so # we save params of first 'wait' session $_waithost_l{$HostResolved}=$timehostl; $_waithost_s{$HostResolved}=$timehosts; $_waithost_u{$HostResolved}=$page; } else { # This is third visit or more # We count 'session','visit','exit','entry','DayVisits' if ($Debug) { debug(" This is a third visit or more for $HostResolved.",4); } my $timehosts=$_host_s{$HostResolved}; my $page=$_host_u{$HostResolved}; if ($page) { $_url_x{$page}++; } $_url_e{$field[$pos_url]}++; $DayVisits{$yearmonthdayrecord}++; if ($timehosts) { $_session{GetSessionRange($timehosts,$timehostl)}++; } } # Save new session properties $_host_s{$HostResolved}=$timerecord; $_host_l{$HostResolved}=$timerecord; $_host_u{$HostResolved}=$field[$pos_url]; } elsif ($timerecord > $timehostl) { # This is a same visit we can count if ($Debug) { debug(" This is same visit still running for $HostResolved. host_l/host_u changed to $timerecord/$field[$pos_url]",4); } $_host_l{$HostResolved}=$timerecord; $_host_u{$HostResolved}=$field[$pos_url]; } elsif ($timerecord == $timehostl) { # This is a same visit we can count if ($Debug) { debug(" This is same visit still running for $HostResolved. host_l/host_u changed to $timerecord/$field[$pos_url]",4); } $_host_u{$HostResolved}=$field[$pos_url]; } elsif ($timerecord < $_host_s{$HostResolved}) { # Should happens only with not correctly sorted log files if ($Debug) { debug(" This is same visit still running for $HostResolved with start not in order. host_s changed to $timerecord (entry page also changed if first visit)",4); } if (! $_waithost_s{$HostResolved}) { # We can reorder entry page only if it's the first visit found in this update run (The saved entry page was $_waithost_e if $_waithost_s{$HostResolved} is not defined. If second visit or more, entry was directly counted and not saved) $_waithost_e{$HostResolved}=$field[$pos_url]; } else { # We can't change entry counted as we dont't know what was the url counted as entry } $_host_s{$HostResolved}=$timerecord; } else { if ($Debug) { debug(" This is same visit still running for $HostResolved with hit between start and last hits. No change",4); } } } else { # This is a new visit (may be). First new visit found for this host. We save in wait array the entry page to count later if ($Debug) { debug(" New session (may be) for $HostResolved. Save in wait array to see later",4); } $_waithost_e{$HostResolved}=$field[$pos_url]; # Save new session properties $_host_u{$HostResolved}=$field[$pos_url]; $_host_s{$HostResolved}=$timerecord; $_host_l{$HostResolved}=$timerecord; } $_host_p{$HostResolved}++; } $_host_h{$HostResolved}++; $_host_k{$HostResolved}+=int($field[$pos_size]); # Analyze: Browser - OS #---------------------- if ($pos_agent >= 0) { if ($LevelForBrowsersDetection) { # Analyze: Browser #----------------- my $uabrowser=$TmpBrowser{$UserAgent}; if (! $uabrowser) { my $found=1; # IE ? if ($UserAgent =~ /$regvermsie/o && $UserAgent !~ /$regnotie/o) { $_browser_h{"msie$2"}++; $TmpBrowser{$UserAgent}="msie$2"; } # Firefox ? elsif ($UserAgent =~ /$regverfirefox/o) { $_browser_h{"firefox$1"}++; $TmpBrowser{$UserAgent}="firefox$1"; } # Subversion ? elsif ($UserAgent =~ /$regversvn/o) { $_browser_h{"svn$1"}++; $TmpBrowser{$UserAgent}="svn$1"; } # Netscape 6.x, 7.x ... ? elsif ($UserAgent =~ /$regvernetscape/o) { $_browser_h{"netscape$1"}++; $TmpBrowser{$UserAgent}="netscape$1"; } # Netscape 3.x, 4.x ... ? elsif ($UserAgent =~ /$regvermozilla/o && $UserAgent !~ /$regnotnetscape/o) { $_browser_h{"netscape$2"}++; $TmpBrowser{$UserAgent}="netscape$2"; } # Other known browsers ? else { $found=0; foreach (@BrowsersSearchIDOrder) { # Search ID in order of BrowsersSearchIDOrder if ($UserAgent =~ /$_/) { my $browser=&UnCompileRegex($_); # TODO If browser is in a family, use version $_browser_h{"$browser"}++; $TmpBrowser{$UserAgent}="$browser"; $found=1; last; } } } # Unknown browser ? if (!$found) { $_browser_h{'Unknown'}++; $TmpBrowser{$UserAgent}='Unknown'; my $newua=$UserAgent; $newua =~ tr/\+ /__/; $_unknownrefererbrowser_l{$newua}=$timerecord; } } else { $_browser_h{$uabrowser}++; if ($uabrowser eq 'Unknown') { my $newua=$UserAgent; $newua =~ tr/\+ /__/; $_unknownrefererbrowser_l{$newua}=$timerecord; } } } if ($LevelForOSDetection) { # Analyze: OS #------------ my $uaos=$TmpOS{$UserAgent}; if (! $uaos) { my $found=0; # in OSHashID list ? foreach (@OSSearchIDOrder) { # Search ID in order of OSSearchIDOrder if ($UserAgent =~ /$_/) { my $osid=$OSHashID{&UnCompileRegex($_)}; $_os_h{"$osid"}++; $TmpOS{$UserAgent}="$osid"; $found=1; last; } } # Unknown OS ? if (!$found) { $_os_h{'Unknown'}++; $TmpOS{$UserAgent}='Unknown'; my $newua=$UserAgent; $newua =~ tr/\+ /__/; $_unknownreferer_l{$newua}=$timerecord; } } else { $_os_h{$uaos}++; if ($uaos eq 'Unknown') { my $newua=$UserAgent; $newua =~ tr/\+ /__/; $_unknownreferer_l{$newua}=$timerecord; } } } } else { $_browser_h{'Unknown'}++; $_os_h{'Unknown'}++; } # Analyze: Referer #----------------- my $found=0; if ($pos_referer >= 0 && $LevelForRefererAnalyze && $field[$pos_referer]) { # Direct ? if ($field[$pos_referer] eq '-' || $field[$pos_referer] eq 'bookmarks') { # "bookmarks" is sent by Netscape, '-' by all others browsers # Direct access if ($PageBool) { if ($ShowDirectOrigin) { print "Direct access for line $line\n"; } $_from_p[0]++; } $_from_h[0]++; $found=1; } else { $field[$pos_referer] =~ /$regreferer/o; my $refererprot=$1; my $refererserver=($2||'').(! $3 || $3 eq ':80'?'':$3); # refererserver is www.xxx.com or www.xxx.com:81 but not www.xxx.com:80 # HTML link ? if ($refererprot =~ /^http/i) { #if ($Debug) { debug(" Analyze referer refererprot=$refererprot refererserver=$refererserver",5); } # Kind of origin if (!$TmpRefererServer{$refererserver}) { # TmpRefererServer{$refererserver} is "=" if same site, "search egine key" if search engine, not defined otherwise if ($refererserver =~ /$reglocal/o) { # Intern (This hit came from another page of the site) if ($Debug) { debug(" Server '$refererserver' is added to TmpRefererServer with value '='",2); } $TmpRefererServer{$refererserver}='='; $found=1; } else { foreach (@HostAliases) { if ($refererserver =~ /$_/) { # Intern (This hit came from another page of the site) if ($Debug) { debug(" Server '$refererserver' is added to TmpRefererServer with value '='",2); } $TmpRefererServer{$refererserver}='='; $found=1; last; } } if (! $found) { # Extern (This hit came from an external web site). if ($LevelForSearchEnginesDetection) { foreach (@SearchEnginesSearchIDOrder) { # Search ID in order of SearchEnginesSearchIDOrder if ($refererserver =~ /$_/) { my $key=&UnCompileRegex($_); if (! $NotSearchEnginesKeys{$key} || $refererserver !~ /$NotSearchEnginesKeys{$key}/i) { # This hit came from the search engine $key if ($Debug) { debug(" Server '$refererserver' is added to TmpRefererServer with value '$key'",2); } $TmpRefererServer{$refererserver}=$SearchEnginesHashID{$key}; $found=1; } last; } } } } } } my $tmprefererserver=$TmpRefererServer{$refererserver}; if ($tmprefererserver) { if ($tmprefererserver eq '=') { # Intern (This hit came from another page of the site) if ($PageBool) { $_from_p[4]++; } $_from_h[4]++; $found=1; } else { # This hit came from a search engine if ($PageBool) { $_from_p[2]++; $_se_referrals_p{$tmprefererserver}++; } $_from_h[2]++; $_se_referrals_h{$tmprefererserver}++; $found=1; if ($PageBool && $LevelForKeywordsDetection) { # we will complete %_keyphrases hash array my @refurl=split(/\?/,$field[$pos_referer],2); # TODO Use \? or [$URLQuerySeparators] ? if ($refurl[1]) { # Extract params of referer query string (q=cache:mmm:www/zzz+aaa+bbb q=aaa+bbb/ccc key=ddd%20eee lang_en ie=UTF-8 ...) if ($SearchEnginesKnownUrl{$tmprefererserver}) { # Search engine with known URL syntax foreach my $param (split(/&/,$KeyWordsNotSensitive?lc($refurl[1]):$refurl[1])) { if ($param =~ s/^$SearchEnginesKnownUrl{$tmprefererserver}//) { # We found good parameter # Now param is keyphrase: "cache:mmm:www/zzz+aaa+bbb/ccc+ddd%20eee'fff,ggg" $param =~ s/^(cache|related):[^\+]+//; # Should be useless since this is for hit on 'not pages' &ChangeWordSeparatorsIntoSpace($param); # Change [ aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ aaa bbb/ccc ddd eee fff ggg] $param =~ s/^ +//; $param =~ s/ +$//; # Trim $param =~ tr/ /\+/s; if ((length $param) > 0) { $_keyphrases{$param}++; } last; } } } elsif ($LevelForKeywordsDetection >= 2) { # Search engine with unknown URL syntax foreach my $param (split(/&/,$KeyWordsNotSensitive?lc($refurl[1]):$refurl[1])) { my $foundexcludeparam=0; foreach my $paramtoexclude (@WordsToCleanSearchUrl) { if ($param =~ /$paramtoexclude/i) { $foundexcludeparam=1; last; } # Not the param with search criteria } if ($foundexcludeparam) { next; } # We found good parameter $param =~ s/.*=//; # Now param is keyphrase: "aaa+bbb/ccc+ddd%20eee'fff,ggg" $param =~ s/^(cache|related):[^\+]+//; # Should be useless since this is for hit on 'not pages' &ChangeWordSeparatorsIntoSpace($param); # Change [ aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ aaa bbb/ccc ddd eee fff ggg ] $param =~ s/^ +//; $param =~ s/ +$//; # Trim $param =~ tr/ /\+/s; if ((length $param) > 2) { $_keyphrases{$param}++; last; } } } } # End of elsif refurl[1] elsif ($SearchEnginesWithKeysNotInQuery{$tmprefererserver}) { # debug("xxx".$refurl[0]); # If search engine with key inside page url like a9 (www.a9.com/searchkey1%20searchkey2) if ($refurl[0] =~ /$SearchEnginesKnownUrl{$tmprefererserver}(.*)$/) { my $param=$1; &ChangeWordSeparatorsIntoSpace($param); $param =~ tr/ /\+/s; if ((length $param) > 0) { $_keyphrases{$param}++; } } } } } } # End of if ($TmpRefererServer) else { # This hit came from a site other than a search engine if ($PageBool) { $_from_p[3]++; } $_from_h[3]++; # http://www.mysite.com/ must be same referer than http://www.mysite.com but .../mypage/ differs of .../mypage #if ($refurl[0] =~ /^[^\/]+\/$/) { $field[$pos_referer] =~ s/\/$//; } # Code moved in Save_History # TODO: lowercase the value for referer server to have refering server not case sensitive if ($URLReferrerWithQuery) { if ($PageBool) { $_pagesrefs_p{$field[$pos_referer]}++; } $_pagesrefs_h{$field[$pos_referer]}++; } else { # We discard query for referer if ($field[$pos_referer]=~/$regreferernoquery/o) { if ($PageBool) { $_pagesrefs_p{"$1"}++; } $_pagesrefs_h{"$1"}++; } else { if ($PageBool) { $_pagesrefs_p{$field[$pos_referer]}++; } $_pagesrefs_h{$field[$pos_referer]}++; } } $found=1; } } # News Link ? #if (! $found && $refererprot =~ /^news/i) { # $found=1; # if ($PageBool) { $_from_p[5]++; } # $_from_h[5]++; #} } } # Origin not found if (!$found) { if ($ShowUnknownOrigin) { print "Unknown origin: $field[$pos_referer]\n"; } if ($PageBool) { $_from_p[1]++; } $_from_h[1]++; } # Analyze: EMail #--------------- if ($pos_emails>=0 && $field[$pos_emails]) { if ($field[$pos_emails] eq '<>') { $field[$pos_emails]='Unknown'; } elsif ($field[$pos_emails] !~ /\@/) { $field[$pos_emails].="\@$SiteDomain"; } $_emails_h{lc($field[$pos_emails])}++; #Count accesses for sender email (hit) $_emails_k{lc($field[$pos_emails])}+=int($field[$pos_size]); #Count accesses for sender email (kb) $_emails_l{lc($field[$pos_emails])}=$timerecord; } if ($pos_emailr>=0 && $field[$pos_emailr]) { if ($field[$pos_emailr] !~ /\@/) { $field[$pos_emailr].="\@$SiteDomain"; } $_emailr_h{lc($field[$pos_emailr])}++; #Count accesses for receiver email (hit) $_emailr_k{lc($field[$pos_emailr])}+=int($field[$pos_size]); #Count accesses for receiver email (kb) $_emailr_l{lc($field[$pos_emailr])}=$timerecord; } } # Check cluster #-------------- if ($pos_cluster>=0) { if ($PageBool) { $_cluster_p{$field[$pos_cluster]}++; } #Count accesses for page (page) $_cluster_h{$field[$pos_cluster]}++; #Count accesses for page (hit) $_cluster_k{$field[$pos_cluster]}+=int($field[$pos_size]); #Count accesses for page (kb) } # Analyze: Extra #--------------- foreach my $extranum (1..@ExtraName-1) { if ($Debug) { debug(" Process extra analyze $extranum",4); } # Check code my $conditionok=0; if ($ExtraCodeFilter[$extranum]) { foreach my $condnum (0..@{$ExtraCodeFilter[$extranum]}-1) { if ($Debug) { debug(" Check code '$field[$pos_code]' must be '$ExtraCodeFilter[$extranum][$condnum]'",5); } if ($field[$pos_code] eq "$ExtraCodeFilter[$extranum][$condnum]") { $conditionok=1; last; } } if (! $conditionok && @{$ExtraCodeFilter[$extranum]}) { next; } # End for this section if ($Debug) { debug(" No check on code or code is OK. Now we check other conditions.",5); } } # Check conditions $conditionok=0; foreach my $condnum (0..@{$ExtraConditionType[$extranum]}-1) { my $conditiontype=$ExtraConditionType[$extranum][$condnum]; my $conditiontypeval=$ExtraConditionTypeVal[$extranum][$condnum]; if ($conditiontype eq 'URL') { if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$urlwithnoquery'",5); } if ($urlwithnoquery =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype eq 'QUERY_STRING') { if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$standalonequery'",5); } if ($standalonequery =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype eq 'URLWITHQUERY') { if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$urlwithnoquery$tokenquery$standalonequery'",5); } if ("$urlwithnoquery$tokenquery$standalonequery" =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype eq 'REFERER') { if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_referer]'",5); } if ($field[$pos_referer] =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype eq 'UA') { if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_agent]'",5); } if ($field[$pos_agent] =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype eq 'HOSTINLOG') { if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_host]'",5); } if ($field[$pos_host] =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype eq 'HOST') { my $hosttouse=($HostResolved?$HostResolved:$Host); if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$hosttouse'",5); } if ($hosttouse =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype eq 'VHOST') { if ($Debug) { debug(" Check condision '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_vh]'",5); } if ($field[$pos_vh] =~ /$conditiontypeval/) { $conditionok=1; last; } } elsif ($conditiontype =~ /extra(\d+)/i) { if ($Debug) { debug(" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_extra[$1]]'",5); } if ($field[$pos_extra[$1]] =~ /$conditiontypeval/) { $conditionok=1; last; } } else { error("Wrong value of parameter ExtraSectionCondition$extranum"); } } if (! $conditionok && @{$ExtraConditionType[$extranum]}) { next; } # End for this section if ($Debug) { debug(" No condition or condition is OK. Now we extract value for first column of extra chart.",5); } # Determine actual column value to use. my $rowkeyval; my $rowkeyok=0; foreach my $rowkeynum (0..@{$ExtraFirstColumnValuesType[$extranum]}-1) { my $rowkeytype=$ExtraFirstColumnValuesType[$extranum][$rowkeynum]; my $rowkeytypeval=$ExtraFirstColumnValuesTypeVal[$extranum][$rowkeynum]; if ($rowkeytype eq 'URL') { if ($urlwithnoquery =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype eq 'QUERY_STRING') { if ($Debug) { debug(" Extract value from '$standalonequery' with regex '$rowkeytypeval'.",5); } if ($standalonequery =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype eq 'URLWITHQUERY') { if ("$urlwithnoquery$tokenquery$standalonequery" =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype eq 'REFERER') { if ($field[$pos_referer] =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype eq 'UA') { if ($field[$pos_agent] =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype eq 'HOSTINLOG') { if ($field[$pos_host] =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype eq 'HOST') { my $hosttouse=($HostResolved?$HostResolved:$Host); if ($hosttouse =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype eq 'VHOST') { if ($field[$pos_vh] =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } elsif ($rowkeytype =~ /extra(\d+)/i) { if ($field[$pos_extra[$1]] =~ /$rowkeytypeval/) { $rowkeyval = "$1"; $rowkeyok = 1; last; } } else { error("Wrong value of parameter ExtraSectionFirstColumnValues$extranum"); } } if (! $rowkeyok) { next; } # End for this section if (! $rowkeyval) { $rowkeyval='Failed to extract key'; } if ($Debug) { debug(" Key val found: $rowkeyval",5); } # Apply function on $rowkeyval if ($ExtraFirstColumnFunction[$extranum]) { # Todo call function on string $rowkeyval } # Here we got all values to increase counters if ($PageBool && $ExtraStatTypes[$extranum] =~ /P/i) { ${'_section_' . $extranum . '_p'}{$rowkeyval}++; } ${'_section_' . $extranum . '_h'}{$rowkeyval}++; # Must be set if ($ExtraStatTypes[$extranum] =~ /B/i) { ${'_section_' . $extranum . '_k'}{$rowkeyval}+=int($field[$pos_size]); } if ($ExtraStatTypes[$extranum] =~ /L/i) { if (${'_section_' . $extranum . '_l'}{$rowkeyval}||0 < $timerecord) { ${'_section_' . $extranum . '_l'}{$rowkeyval}=$timerecord; } } # Check to avoid too large extra sections if (scalar keys %{'_section_' . $extranum . '_h'} > $ExtraTrackedRowsLimit) { error(<= 20000) { #if (++$counterforflushtest >= 1) { if ((scalar keys %_host_u) > ($LIMITFLUSH<<2) || (scalar keys %_url_p) > $LIMITFLUSH) { # warning("Warning: Try to run AWStats update process more frequently to analyze smaler log files."); if ($^X =~ /activestate/i || $^X =~ /activeperl/i) { # We don't flush if perl is activestate to avoid slowing process because of memory hole } else { # Clean tmp hash arrays #%TmpDNSLookup = (); %TmpOS = %TmpRefererServer = %TmpRobot = %TmpBrowser = (); # We flush if perl is not activestate print "Flush history file on disk"; if ((scalar keys %_host_u) > ($LIMITFLUSH<<2)) { print " (unique hosts reach flush limit of ".($LIMITFLUSH<<2).")"; } if ((scalar keys %_url_p) > $LIMITFLUSH) { print " (unique url reach flush limit of ".($LIMITFLUSH).")"; } print "\n"; if ($Debug) { debug("End of set of $counterforflushtest records: Some hash arrays are too large. We flush and clean some.",2); print " _host_p:".(scalar keys %_host_p)." _host_h:".(scalar keys %_host_h)." _host_k:".(scalar keys %_host_k)." _host_l:".(scalar keys %_host_l)." _host_s:".(scalar keys %_host_s)." _host_u:".(scalar keys %_host_u)."\n"; print " _url_p:".(scalar keys %_url_p)." _url_k:".(scalar keys %_url_k)." _url_e:".(scalar keys %_url_e)." _url_x:".(scalar keys %_url_x)."\n"; print " _waithost_e:".(scalar keys %_waithost_e)." _waithost_l:".(scalar keys %_waithost_l)." _waithost_s:".(scalar keys %_waithost_s)." _waithost_u:".(scalar keys %_waithost_u)."\n"; } &Read_History_With_TmpUpdate($lastprocessedyear,$lastprocessedmonth,$lastprocessedday,$lastprocessedhour,1,1,"all",($lastlinenb+$NbOfLinesParsed),$lastlineoffset,&CheckSum($_)); &GetDelaySinceStart(1); $NbOfLinesShowsteps=1; } } $counterforflushtest=0; } } # End of loop for processing new record. if ($Debug) { debug(" _host_p:".(scalar keys %_host_p)." _host_h:".(scalar keys %_host_h)." _host_k:".(scalar keys %_host_k)." _host_l:".(scalar keys %_host_l)." _host_s:".(scalar keys %_host_s)." _host_u:".(scalar keys %_host_u)."\n",1); debug(" _url_p:".(scalar keys %_url_p)." _url_k:".(scalar keys %_url_k)." _url_e:".(scalar keys %_url_e)." _url_x:".(scalar keys %_url_x)."\n",1); debug(" _waithost_e:".(scalar keys %_waithost_e)." _waithost_l:".(scalar keys %_waithost_l)." _waithost_s:".(scalar keys %_waithost_s)." _waithost_u:".(scalar keys %_waithost_u)."\n",1); debug("End of processing log file (AWStats memory cache is TmpDNSLookup=".(scalar keys %TmpDNSLookup)." TmpBrowser=".(scalar keys %TmpBrowser)." TmpOS=".(scalar keys %TmpOS)." TmpRefererServer=".(scalar keys %TmpRefererServer)." TmpRobot=".(scalar keys %TmpRobot).")",1); } # Save current processed break section # If lastprocesseddate > 0 means there is at least one approved new record in log or at least one existing history file if ($lastprocesseddate > 0) { # TODO: Do not save if we are sure a flush was just already done # Get last line seek(LOG,$lastlineoffset,0); my $line=; chomp $line; $line =~ s/\r$//; if (! $NbOfLinesParsed) { # TODO If there was no lines parsed (log was empty), we only update LastUpdate line with YYYYMMDDHHMMSS 0 0 0 0 0 &Read_History_With_TmpUpdate($lastprocessedyear,$lastprocessedmonth,$lastprocessedday,$lastprocessedhour,1,1,"all",($lastlinenb+$NbOfLinesParsed),$lastlineoffset,&CheckSum($line)); } else { &Read_History_With_TmpUpdate($lastprocessedyear,$lastprocessedmonth,$lastprocessedday,$lastprocessedhour,1,1,"all",($lastlinenb+$NbOfLinesParsed),$lastlineoffset,&CheckSum($line)); } } if ($Debug) { debug("Close log file \"$LogFile\""); } close LOG || error("Command for pipe '$LogFile' failed"); # Process the Rename - Archive - Purge phase my $renameok=1; my $archiveok=1; # Open Log file for writing if PurgeLogFile is on if ($PurgeLogFile) { if ($ArchiveLogRecords) { if ($ArchiveLogRecords == 1) { # For backward compatibility $ArchiveFileName="$DirData/${PROG}_archive$FileSuffix.log"; } else { $ArchiveFileName="$DirData/${PROG}_archive$FileSuffix.".&Substitute_Tags($ArchiveLogRecords).".log"; } open(LOG,"+<$LogFile") || error("Enable to archive log records of \"$LogFile\" into \"$ArchiveFileName\" because source can't be opened for read and write: $!
    \n"); } else { open(LOG,"+<$LogFile"); } binmode LOG; } # Rename all HISTORYTMP files into HISTORYTXT &Rename_All_Tmp_History(); # Purge Log file if option is on and all renaming are ok if ($PurgeLogFile) { # Archive LOG file into ARCHIVELOG if ($ArchiveLogRecords) { if ($Debug) { debug("Start of archiving log file"); } open(ARCHIVELOG,">>$ArchiveFileName") || error("Couldn't open file \"$ArchiveFileName\" to archive log: $!"); binmode ARCHIVELOG; while () { if (! print ARCHIVELOG $_) { $archiveok=0; last; } } close(ARCHIVELOG) || error("Archiving failed during closing archive: $!"); if ($SaveDatabaseFilesWithPermissionsForEveryone) { chmod 0666,"$ArchiveFileName"; } if ($Debug) { debug("End of archiving log file"); } } # If rename and archive ok if ($renameok && $archiveok) { if ($Debug) { debug("Purge log file"); } my $bold=($ENV{'GATEWAY_INTERFACE'}?'':''); my $unbold=($ENV{'GATEWAY_INTERFACE'}?'':''); my $br=($ENV{'GATEWAY_INTERFACE'}?'
    ':''); truncate(LOG,0) || warning("Warning: $bold$PROG$unbold couldn't purge logfile \"$bold$LogFile$unbold\".$br\nChange your logfile permissions to allow write for your web server CGI process or change PurgeLogFile=1 into PurgeLogFile=0 in configure file and think to purge sometimes manually your logfile (just after running an update process to not loose any not already processed records your log file contains)."); } close(LOG); } if ($DNSLookup==1 && $DNSLookupAlreadyDone) { # DNSLookup warning my $bold=($ENV{'GATEWAY_INTERFACE'}?'':''); my $unbold=($ENV{'GATEWAY_INTERFACE'}?'':''); my $br=($ENV{'GATEWAY_INTERFACE'}?'
    ':''); warning("Warning: $bold$PROG$unbold has detected that some hosts names were already resolved in your logfile $bold$DNSLookupAlreadyDone$unbold.$br\nIf DNS lookup was already made by the logger (web server), you should change your setup DNSLookup=$DNSLookup into DNSLookup=0 to increase $PROG speed."); } if ($DNSLookup==1 && $NbOfNewLines) { # Save new DNS last update cache file Save_DNS_Cache_File(\%TmpDNSLookup,"$DirData/$DNSLastUpdateCacheFile","$FileSuffix"); # Save into file using FileSuffix } if ($EnableLockForUpdate) { # Remove lock &Lock_Update(0); # Restore signals handler $SIG{INT} = 'DEFAULT'; # 2 #$SIG{KILL} = 'DEFAULT'; # 9 #$SIG{TERM} = 'DEFAULT'; # 15 } } # End of log processing if ($UPdateStats) #--------------------------------------------------------------------- # SHOW REPORT #--------------------------------------------------------------------- if (scalar keys %HTMLOutput) { debug("YearRequired=$YearRequired, MonthRequired=$MonthRequired",2); debug("DayRequired=$DayRequired, HourRequired=$HourRequired",2); my $max_p; my $max_h; my $max_k; my $max_v; my $total_u; my $total_v; my $total_p; my $total_h; my $total_k; my $total_e; my $total_x; my $total_s; my $total_l; my $total_r; my $average_u; my $average_v; my $average_p; my $average_h; my $average_k; my $average_s; my $rest_p; my $rest_h; my $rest_k; my $rest_e; my $rest_x; my $rest_s; my $rest_l; my $rest_r; my $average_nb; # Define the NewLinkParams for main chart my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; my $NewLinkTarget=''; if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { $NewLinkParams.="&framename=mainright"; $NewLinkTarget=" target=\"mainright\""; } $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } if ($FrameName ne 'mainleft') { # READING DATA #------------- &Init_HashArray(); # Lecture des fichiers history if ($DatabaseBreak eq 'month') { for (my $ix=12; $ix>=1; $ix--) { my $stringforload=''; my $monthix=sprintf("%02s",$ix); if ($MonthRequired eq 'all' || $monthix eq $MonthRequired) { $stringforload='all'; # Read full history file } elsif (($HTMLOutput{'main'} && $ShowMonthStats) || $HTMLOutput{'alldays'}) { $stringforload='general time'; # Read general and time sections. } if ($stringforload) { # On charge fichier &Read_History_With_TmpUpdate($YearRequired,$monthix,'','',0,0,$stringforload); } } } if ($DatabaseBreak eq 'day') { my $stringforload='all'; my $monthix=sprintf("%02s",$MonthRequired); my $dayix=sprintf("%02s",$DayRequired); &Read_History_With_TmpUpdate($YearRequired,$monthix,$dayix,'',0,0,$stringforload); } if ($DatabaseBreak eq 'hour') { my $stringforload='all'; my $monthix=sprintf("%02s",$MonthRequired); my $dayix=sprintf("%02s",$DayRequired); my $hourix=sprintf("%02s",$HourRequired); &Read_History_With_TmpUpdate($YearRequired,$monthix,$dayix,$hourix,0,0,$stringforload); } } # HTMLHeadSection if ($FrameName ne 'index' && $FrameName ne 'mainleft') { print " \n\n"; my $newhead=$HTMLHeadSection; $newhead =~ s/\\n/\n/g; print "$newhead\n"; print "\n"; } # Call to plugins' function AddHTMLBodyHeader foreach my $pluginname (keys %{$PluginsLoaded{'AddHTMLBodyHeader'}}) { # my $function="AddHTMLBodyHeader_$pluginname()"; # eval("$function"); my $function="AddHTMLBodyHeader_$pluginname"; &$function(); } my $WIDTHMENU1=($FrameName eq 'mainleft'?$FRAMEWIDTH:150); # TOP BAN #--------------------------------------------------------------------- if ($ShowMenu || $FrameName eq 'mainleft') { my $frame=($FrameName eq 'mainleft'); if ($Debug) { debug("ShowTopBan",2); } print "$Center \n"; if ($FrameName ne 'mainleft') { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)year=[^&]*//i; $NewLinkParams =~ s/(^|&|&)month=[^&]*//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; my $NewLinkTarget=''; if ($FrameName eq 'mainright') { $NewLinkTarget=" target=\"_parent\""; } print "
    \n"; } if ($QueryString !~ /buildpdf/i) { print "\n"; print "
    \n"; print "\n"; } else { print "
    \n"; } if ($FrameName ne 'mainright') { # Print Statistics Of if ($FrameName eq 'mainleft') { my $shortSiteDomain=$SiteDomain; if (length($SiteDomain) > 30) { $shortSiteDomain=substr($SiteDomain,0,20)."...".substr($SiteDomain,length($SiteDomain)-5,5); } print ""; } else { print ""; } # Logo and flags if ($FrameName ne 'mainleft') { if ($LogoLink =~ "http://awstats.sourceforge.net") { print ""; } print "\n"; } if ($FrameName ne 'mainleft') { # Print Last Update print ""; print ""; # Logo and flags if ($FrameName eq 'mainright') { if ($LogoLink =~ "http://awstats.sourceforge.net") { print ""; } print "\n"; # Print selected period of analysis (month and year required) print ""; print "\n"; } if ($QueryString !~ /buildpdf/i) { print "
    $Message[7]:
    $shortSiteDomain
    $Message[7]: $SiteDomain"; } else { print ""; } if (! $StaticLinks) { print "
    "; Show_Flag_Links($Lang); } print "
    $Message[35]: "; if ($LastUpdate) { print Format_Date($LastUpdate,0); } else { # Here NbOfOldLines = 0 (because LastUpdate is not defined) if (! $UpdateStats) { print "$Message[24]"; } else { print "No qualified records found in log ($NbOfLinesCorrupted corrupted, $NbOfLinesDropped dropped)"; } } print ""; # Print Update Now link if ($AllowToUpdateStatsFromBrowser && ! $StaticLinks) { my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; if ($FrameName eq 'mainright') { $NewLinkParams.="&framename=mainright"; } $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } print "       "; print "$Message[74]"; } print "\n"; } else { print "\n"; } if (! $StaticLinks) { print "
    "; Show_Flag_Links($Lang); } print "
    $Message[133]:"; if ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) { print "\n"; print "\n"; print "\n"; if ($SiteConfig) { print "\n"; } if ($DirConfig) { print "\n"; } if ($QueryString =~ /lang=(\w+)/i) { print "\n"; } if ($QueryString =~ /debug=(\d+)/i) { print "\n"; } if ($FrameName eq 'mainright') { print "\n"; } print ""; } else { print ""; if ($DayRequired) { print "$Message[4] $DayRequired - "; } if ($MonthRequired eq 'all') { print "$Message[6] $YearRequired"; } else { print "$Message[5] $MonthNumLib{$MonthRequired} $YearRequired"; } print ""; } print "
    \n"; print "
    \n"; } else { print "\n"; } if ($FrameName ne 'mainleft') { print "
    \n"; } else { print "
    \n"; } print "\n"; } # Call to plugins' function AddHTMLMenuHeader foreach my $pluginname (keys %{$PluginsLoaded{'AddHTMLMenuHeader'}}) { # my $function="AddHTMLMenuHeader_$pluginname()"; # eval("$function"); my $function="AddHTMLMenuHeader_$pluginname"; &$function(); } # MENU #--------------------------------------------------------------------- if ($ShowMenu || $FrameName eq 'mainleft') { my $frame=($FrameName eq 'mainleft'); if ($Debug) { debug("ShowMenu",2); } # Print menu links if (($HTMLOutput{'main'} && $FrameName ne 'mainright') || $FrameName eq 'mainleft') { # If main page asked # Define link anchor my $linkanchor=($FrameName eq 'mainleft'?"$AWScript?${NewLinkParams}":""); if ($linkanchor && ($linkanchor !~ /framename=mainright/)) { $linkanchor.="framename=mainright"; } $linkanchor =~ s/(&|&)$//; $linkanchor=XMLEncode("$linkanchor"); # Define target my $targetpage=($FrameName eq 'mainleft'?" target=\"mainright\"":""); # Print Menu my $linetitle; # TODO a virer if (! $PluginsLoaded{'ShowMenu'}{'menuapplet'}) { my $menuicon=0; # TODO a virer # Menu HTML print "\n"; if ($FrameName eq 'mainleft' && $ShowMonthStats) { print ($frame?"":""); print "$Message[128]"; print ($frame?"\n":"   "); } my %menu=(); my %menulink=(); my %menutext=(); # When %menu=('month'=>$ShowMonthStats?1:0,'daysofmonth'=>$ShowDaysOfMonthStats?2:0,'daysofweek'=>$ShowDaysOfWeekStats?3:0,'hours'=>$ShowHoursStats?4:0); %menulink=('month'=>1,'daysofmonth'=>1,'daysofweek'=>1,'hours'=>1); %menutext=('month'=>$Message[162],'daysofmonth'=>$Message[138],'daysofweek'=>$Message[91],'hours'=>$Message[20]); ShowMenuCateg('when',$Message[93],'menu4.png',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); # Who %menu=('countries'=>$ShowDomainsStats?1:0,'alldomains'=>$ShowDomainsStats?2:0,'visitors'=>$ShowHostsStats?3:0,'allhosts'=>$ShowHostsStats?4:0,'lasthosts'=>($ShowHostsStats =~ /L/i)?5:0,'unknownip'=>$ShowHostsStats?6:0,'logins'=>$ShowAuthenticatedUsers?7:0,'alllogins'=>$ShowAuthenticatedUsers?8:0,'lastlogins'=>($ShowAuthenticatedUsers =~ /L/i)?9:0,'emailsenders'=>$ShowEMailSenders?10:0,'allemails'=>$ShowEMailSenders?11:0,'lastemails'=>($ShowEMailSenders =~ /L/i)?12:0,'emailreceivers'=>$ShowEMailReceivers?13:0,'allemailr'=>$ShowEMailReceivers?14:0,'lastemailr'=>($ShowEMailReceivers =~ /L/i)?15:0,'robots'=>$ShowRobotsStats?16:0,'allrobots'=>$ShowRobotsStats?17:0,'lastrobots'=>($ShowRobotsStats =~ /L/i)?18:0,'worms'=>$ShowWormsStats?19:0); %menulink=('countries'=>1,'alldomains'=>2,'visitors'=>1,'allhosts'=>2,'lasthosts'=>2,'unknownip'=>2,'logins'=>1,'alllogins'=>2,'lastlogins'=>2,'emailsenders'=>1,'allemails'=>2,'lastemails'=>2,'emailreceivers'=>1,'allemailr'=>2,'lastemailr'=>2,'robots'=>1,'allrobots'=>2,'lastrobots'=>2,'worms'=>1); %menutext=('countries'=>$Message[148],'alldomains'=>$Message[80],'visitors'=>$Message[81],'allhosts'=>$Message[80],'lasthosts'=>$Message[9],'unknownip'=>$Message[45],'logins'=>$Message[94],'alllogins'=>$Message[80],'lastlogins'=>$Message[9],'emailsenders'=>$Message[131],'allemails'=>$Message[80],'lastemails'=>$Message[9],'emailreceivers'=>$Message[132],'allemailr'=>$Message[80],'lastemailr'=>$Message[9],'robots'=>$Message[53],'allrobots'=>$Message[80],'lastrobots'=>$Message[9],'worms'=>$Message[136]); ShowMenuCateg('who',$Message[92],'menu5.png',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); # Navigation $linetitle=&AtLeastOneNotNull($ShowSessionsStats,$ShowPagesStats,$ShowFileTypesStats,$ShowFileSizesStats,$ShowOSStats,$ShowBrowsersStats,$ShowScreenSizeStats); if ($linetitle) { print "".($menuicon?" ":"")."$Message[72]:\n"; } if ($linetitle) { print ($frame?"\n":""); } if ($ShowSessionsStats) { print ($frame?"":""); print "$Message[117]"; print ($frame?"\n":"   "); } if ($ShowFileTypesStats) { print ($frame?"":""); print "$Message[73]"; print ($frame?"\n":"   "); } if ($ShowPagesStats) { print ($frame?"":""); print "$Message[29]\n"; print ($frame?"\n":"   "); } if ($ShowPagesStats) { print ($frame?"   \"...\" ":""); print "$Message[80]\n"; print ($frame?"\n":"   "); } if ($ShowPagesStats =~ /E/i) { print ($frame?"   \"...\" ":""); print "$Message[104]\n"; print ($frame?"\n":"   "); } if ($ShowPagesStats =~ /X/i) { print ($frame?"   \"...\" ":""); print "$Message[116]\n"; print ($frame?"\n":"   "); } if ($ShowOSStats) { print ($frame?"":""); print "$Message[59]"; print ($frame?"\n":"   "); } if ($ShowOSStats) { print ($frame?"   \"...\" ":""); print "$Message[58]\n"; print ($frame?"\n":"   "); } if ($ShowOSStats) { print ($frame?"   \"...\" ":""); print "$Message[0]\n"; print ($frame?"\n":"   "); } if ($ShowBrowsersStats) { print ($frame?"":""); print "$Message[21]"; print ($frame?"\n":"   "); } if ($ShowBrowsersStats) { print ($frame?"   \"...\" ":""); print "$Message[58]\n"; print ($frame?"\n":"   "); } if ($ShowBrowsersStats) { print ($frame?"   \"...\" ":""); print "$Message[0]\n"; print ($frame?"\n":"   "); } if ($ShowScreenSizeStats) { print ($frame?"":""); print "$Message[135]"; print ($frame?"\n":"   "); } if ($linetitle) { print ($frame?"":"\n"); } # Referers %menu=('referer'=>$ShowOriginStats?1:0,'refererse'=>$ShowOriginStats?2:0,'refererpages'=>$ShowOriginStats?3:0,'keys'=>($ShowKeyphrasesStats || $ShowKeywordsStats)?4:0,'keyphrases'=>$ShowKeyphrasesStats?5:0,'keywords'=>$ShowKeywordsStats?6:0); %menulink=('referer'=>1,'refererse'=>2,'refererpages'=>2,'keys'=>1,'keyphrases'=>2,'keywords'=>2); %menutext=('referer'=>$Message[37],'refererse'=>$Message[126],'refererpages'=>$Message[127],'keys'=>$Message[14],'keyphrases'=>$Message[120],'keywords'=>$Message[121]); ShowMenuCateg('referers',$Message[23],'menu7.png',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); # Others %menu=('filetypes'=>($ShowFileTypesStats =~ /C/i)?1:0,'misc'=>$ShowMiscStats?2:0,'errors'=>($ShowHTTPErrorsStats||$ShowSMTPErrorsStats)?3:0,'clusters'=>$ShowClusterStats?5:0); %menulink=('filetypes'=>1,'misc'=>1,'errors'=>1,'clusters'=>1); %menutext=('filetypes'=>$Message[98],'misc'=>$Message[139],'errors'=>($ShowSMTPErrorsStats?$Message[147]:$Message[32]),'clusters'=>$Message[155]); foreach (keys %TrapInfosForHTTPErrorCodes) { $menu{"errors$_"}=$ShowHTTPErrorsStats?4:0; $menulink{"errors$_"}=2; $menutext{"errors$_"}=$Message[31]; } ShowMenuCateg('others',$Message[2],'menu8.png',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); # Extra/Marketing %menu=(); %menulink=(); %menutext=(); foreach (1..@ExtraName-1) { $menu{"extra$_"}=1; $menulink{"extra$_"}=1; $menutext{"extra$_"}=$ExtraName[$_]; $menu{"allextra$_"}=2; $menulink{"allextra$_"}=2; $menutext{"allextra$_"}=$Message[80]; } ShowMenuCateg('extra',$Message[134],'',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); print "\n"; } else { # Menu Applet if ($frame) { } else {} } #print ($frame?"":"
    \n"); print "
    \n"; } # Print Back link elsif (! $HTMLOutput{'main'}) { print "\n"; $NewLinkParams =~ s/(^|&|&)hostfilter=[^&]*//i; $NewLinkParams =~ s/(^|&|&)urlfilter=[^&]*//i; $NewLinkParams =~ s/(^|&|&)refererpagesfilter=[^&]*//i; $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if (! $DetailedReportsOnNewWindows || $FrameName eq 'mainright' || $QueryString =~ /buildpdf/i) { print "\n"; } else { print "\n"; } print "
    $Message[76]
    $Message[118]
    \n"; print "\n"; } } # Call to plugins' function AddHTMLMenuFooter foreach my $pluginname (keys %{$PluginsLoaded{'AddHTMLMenuFooter'}}) { # my $function="AddHTMLMenuFooter_$pluginname()"; # eval("$function"); my $function="AddHTMLMenuFooter_$pluginname"; &$function(); } # Exit if left frame if ($FrameName eq 'mainleft') { &html_end(0); exit 0; } # FirstTime LastTime my $FirstTime=0; my $LastTime=0; foreach my $key (keys %FirstTime) { my $keyqualified=0; if ($MonthRequired eq 'all') { $keyqualified=1; } if ($key =~ /^$YearRequired$MonthRequired/) { $keyqualified=1; } if ($keyqualified) { if ($FirstTime{$key} && ($FirstTime == 0 || $FirstTime > $FirstTime{$key})) { $FirstTime = $FirstTime{$key}; } if ($LastTime < ($LastTime{$key}||0)) { $LastTime = $LastTime{$key}; } } } # TotalVisits TotalUnique TotalPages TotalHits TotalBytes TotalHostsKnown TotalHostsUnknown $TotalUnique=$TotalVisits=$TotalPages=$TotalHits=$TotalBytes=0; $TotalNotViewedPages=$TotalNotViewedHits=$TotalNotViewedBytes=0; $TotalHostsKnown=$TotalHostsUnknown=0; my $beginmonth=$MonthRequired;my $endmonth=$MonthRequired; if ($MonthRequired eq 'all') { $beginmonth=1;$endmonth=12; } for (my $month=$beginmonth; $month<=$endmonth; $month++) { my $monthix=sprintf("%02s",$month); $TotalHostsKnown+=$MonthHostsKnown{$YearRequired.$monthix}||0; # Wrong in year view $TotalHostsUnknown+=$MonthHostsUnknown{$YearRequired.$monthix}||0; # Wrong in year view $TotalUnique+=$MonthUnique{$YearRequired.$monthix}||0; # Wrong in year view $TotalVisits+=$MonthVisits{$YearRequired.$monthix}||0; # Not completely true $TotalPages+=$MonthPages{$YearRequired.$monthix}||0; $TotalHits+=$MonthHits{$YearRequired.$monthix}||0; $TotalBytes+=$MonthBytes{$YearRequired.$monthix}||0; $TotalNotViewedPages+=$MonthNotViewedPages{$YearRequired.$monthix}||0; $TotalNotViewedHits+=$MonthNotViewedHits{$YearRequired.$monthix}||0; $TotalNotViewedBytes+=$MonthNotViewedBytes{$YearRequired.$monthix}||0; } # TotalHitsErrors TotalBytesErrors my $TotalHitsErrors=0; my $TotalBytesErrors=0; foreach (keys %_errors_h) { # print "xxxx".$_." zzz".$_errors_h{$_}; $TotalHitsErrors+=$_errors_h{$_}; $TotalBytesErrors+=$_errors_k{$_}; } # TotalEntries (if not already specifically counted, we init it from _url_e hash table) if (!$TotalEntries) { foreach (keys %_url_e) { $TotalEntries+=$_url_e{$_}; } } # TotalExits (if not already specifically counted, we init it from _url_x hash table) if (!$TotalExits) { foreach (keys %_url_x) { $TotalExits+=$_url_x{$_}; } } # TotalBytesPages (if not already specifically counted, we init it from _url_k hash table) if (!$TotalBytesPages) { foreach (keys %_url_k) { $TotalBytesPages+=$_url_k{$_}; } } # TotalKeyphrases (if not already specifically counted, we init it from _keyphrases hash table) if (!$TotalKeyphrases) { foreach (keys %_keyphrases) { $TotalKeyphrases+=$_keyphrases{$_}; } } # TotalKeywords (if not already specifically counted, we init it from _keywords hash table) if (!$TotalKeywords) { foreach (keys %_keywords) { $TotalKeywords+=$_keywords{$_}; } } # TotalSearchEnginesPages (if not already specifically counted, we init it from _se_referrals_p hash table) if (!$TotalSearchEnginesPages) { foreach (keys %_se_referrals_p) { $TotalSearchEnginesPages+=$_se_referrals_p{$_}; } } # TotalSearchEnginesHits (if not already specifically counted, we init it from _se_referrals_h hash table) if (!$TotalSearchEnginesHits) { foreach (keys %_se_referrals_h) { $TotalSearchEnginesHits+=$_se_referrals_h{$_}; } } # TotalRefererPages (if not already specifically counted, we init it from _pagesrefs_p hash table) if (!$TotalRefererPages) { foreach (keys %_pagesrefs_p) { $TotalRefererPages+=$_pagesrefs_p{$_}; } } # TotalRefererHits (if not already specifically counted, we init it from _pagesrefs_h hash table) if (!$TotalRefererHits) { foreach (keys %_pagesrefs_h) { $TotalRefererHits+=$_pagesrefs_h{$_}; } } # TotalDifferentPages (if not already specifically counted, we init it from _url_p hash table) $TotalDifferentPages||=scalar keys %_url_p; # TotalDifferentKeyphrases (if not already specifically counted, we init it from _keyphrases hash table) $TotalDifferentKeyphrases||=scalar keys %_keyphrases; # TotalDifferentKeywords (if not already specifically counted, we init it from _keywords hash table) $TotalDifferentKeywords||=scalar keys %_keywords; # TotalDifferentSearchEngines (if not already specifically counted, we init it from _se_referrals_h hash table) $TotalDifferentSearchEngines||=scalar keys %_se_referrals_h; # TotalDifferentReferer (if not already specifically counted, we init it from _pagesrefs_h hash table) $TotalDifferentReferer||=scalar keys %_pagesrefs_h; # Define firstdaytocountaverage, lastdaytocountaverage, firstdaytoshowtime, lastdaytoshowtime my $firstdaytocountaverage=$nowyear.$nowmonth."01"; # Set day cursor to 1st day of month my $firstdaytoshowtime=$nowyear.$nowmonth."01"; # Set day cursor to 1st day of month my $lastdaytocountaverage=$nowyear.$nowmonth.$nowday; # Set day cursor to today my $lastdaytoshowtime=$nowyear.$nowmonth."31"; # Set day cursor to last day of month if ($MonthRequired eq 'all') { $firstdaytocountaverage=$YearRequired."0101"; # Set day cursor to 1st day of the required year } if (($MonthRequired ne $nowmonth && $MonthRequired ne 'all') || $YearRequired ne $nowyear) { if ($MonthRequired eq 'all') { $firstdaytocountaverage=$YearRequired."0101"; # Set day cursor to 1st day of the required year $firstdaytoshowtime=$YearRequired."1201"; # Set day cursor to 1st day of last month of required year $lastdaytocountaverage=$YearRequired."1231"; # Set day cursor to last day of the required year $lastdaytoshowtime=$YearRequired."1231"; # Set day cursor to last day of last month of required year } else { $firstdaytocountaverage=$YearRequired.$MonthRequired."01"; # Set day cursor to 1st day of the required month $firstdaytoshowtime=$YearRequired.$MonthRequired."01"; # Set day cursor to 1st day of the required month $lastdaytocountaverage=$YearRequired.$MonthRequired."31"; # Set day cursor to last day of the required month $lastdaytoshowtime=$YearRequired.$MonthRequired."31"; # Set day cursor to last day of the required month } } if ($Debug) { debug("firstdaytocountaverage=$firstdaytocountaverage, lastdaytocountaverage=$lastdaytocountaverage",1); debug("firstdaytoshowtime=$firstdaytoshowtime, lastdaytoshowtime=$lastdaytoshowtime",1); } # Call to plugins' function AddHTMLContentHeader foreach my $pluginname (keys %{$PluginsLoaded{'AddHTMLContentHeader'}}) { # my $function="AddHTMLContentHeader_$pluginname()"; # eval("$function"); # to add unique visitors & number of visits, by J Ruano @ CAPSiDE if ($ShowDomainsStats =~ /U/i) { print "$Message[11]"; } if ($ShowDomainsStats =~ /V/i) { print "$Message[10]"; } my $function="AddHTMLContentHeader_$pluginname"; &$function(); } # Output particular part #----------------------- if (scalar keys %HTMLOutput == 1) { if ($HTMLOutput{'alldomains'}) { print "$Center 
    \n"; # Show domains list my $title=''; my $cpt=0; if ($HTMLOutput{'alldomains'}) { $title.="$Message[25]"; $cpt=(scalar keys %_domener_h); } &tab_head("$title",19,0,'domains'); print " $Message[17]"; if ($ShowDomainsStats =~ /P/i) { print "$Message[56]"; } if ($ShowDomainsStats =~ /H/i) { print "$Message[57]"; } if ($ShowDomainsStats =~ /B/i) { print "$Message[75]"; } print " "; print "\n"; $total_u=$total_v=$total_p=$total_h=$total_k=0; $max_h=1; foreach (values %_domener_h) { if ($_ > $max_h) { $max_h = $_; } } $max_k=1; foreach (values %_domener_k) { if ($_ > $max_k) { $max_k = $_; } } my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,1,\%_domener_h,\%_domener_p); foreach my $key (@keylist) { my ($_domener_u, $_domener_v); my $bredde_p=0;my $bredde_h=0;my $bredde_k=0; if ($max_h > 0) { $bredde_p=int($BarWidth*$_domener_p{$key}/$max_h)+1; } # use max_h to enable to compare pages with hits if ($_domener_p{$key} && $bredde_p==1) { $bredde_p=2; } if ($max_h > 0) { $bredde_h=int($BarWidth*$_domener_h{$key}/$max_h)+1; } if ($_domener_h{$key} && $bredde_h==1) { $bredde_h=2; } if ($max_k > 0) { $bredde_k=int($BarWidth*($_domener_k{$key}||0)/$max_k)+1; } if ($_domener_k{$key} && $bredde_k==1) { $bredde_k=2; } my $newkey=lc($key); if ($newkey eq 'ip' || ! $DomainsHashIDLib{$newkey}) { print "$Message[0]$newkey"; } else { print "$DomainsHashIDLib{$newkey}$newkey"; } ## to add unique visitors and number of visits, by Josep Ruano @ CAPSiDE if ($ShowDomainsStats =~ /U/i) { $_domener_u = ($_domener_p{$key} ? $_domener_p{$key}/$TotalPages : 0); $_domener_u += ($_domener_h{$key}/$TotalHits); $_domener_u = sprintf("%.0f", ($_domener_u * $TotalUnique) / 2); print "$_domener_u (" . sprintf("%.1f%", 100*$_domener_u/$TotalUnique) . ")"; } if ($ShowDomainsStats =~ /V/i) { $_domener_v = ($_domener_p{$key} ? $_domener_p{$key}/$TotalPages : 0); $_domener_v += ($_domener_h{$key}/$TotalHits); $_domener_v = sprintf("%.0f", ($_domener_v * $TotalVisits) / 2); print "$_domener_v (" . sprintf("%.1f%", 100*$_domener_v/$TotalVisits) . ")"; } if ($ShowDomainsStats =~ /P/i) { print "$_domener_p{$key}"; } if ($ShowDomainsStats =~ /H/i) { print "$_domener_h{$key}"; } if ($ShowDomainsStats =~ /B/i) { print "".Format_Bytes($_domener_k{$key}).""; } print ""; if ($ShowDomainsStats =~ /P/i) { print "
    \n"; } if ($ShowDomainsStats =~ /H/i) { print "
    \n"; } if ($ShowDomainsStats =~ /B/i) { print ""; } print ""; print "\n"; $total_u += $_domener_u; $total_v += $_domener_v; $total_p += $_domener_p{$key}; $total_h += $_domener_h{$key}; $total_k += $_domener_k{$key}||0; $count++; } my $rest_u = $TotalUnique - $total_u; my $rest_v = $TotalVisits - $total_v; $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_u > 0 || $rest_v > 0 || $rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other domains (known or not) print " $Message[2]"; if ($ShowDomainsStats =~ /U/i) { print "$rest_u"; } if ($ShowDomainsStats =~ /V/i) { print "$rest_v"; } if ($ShowDomainsStats =~ /P/i) { print "$rest_p"; } if ($ShowDomainsStats =~ /H/i) { print "$rest_h"; } if ($ShowDomainsStats =~ /B/i) { print "".Format_Bytes($rest_k).""; } print " "; print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'allhosts'} || $HTMLOutput{'lasthosts'}) { print "$Center 
    \n"; # Show filter form &ShowFormFilter("hostfilter",$FilterIn{'host'},$FilterEx{'host'}); # Show hosts list my $title=''; my $cpt=0; if ($HTMLOutput{'allhosts'}) { $title.="$Message[81]"; $cpt=(scalar keys %_host_h); } if ($HTMLOutput{'lasthosts'}) { $title.="$Message[9]"; $cpt=(scalar keys %_host_h); } &tab_head("$title",19,0,'hosts'); print ""; if ($FilterIn{'host'} || $FilterEx{'host'}) { # With filter if ($FilterIn{'host'}) { print "$Message[79] '$FilterIn{'host'}'"; } if ($FilterIn{'host'} && $FilterEx{'host'}) { print " - "; } if ($FilterEx{'host'}) { print " Exlude $Message[79] '$FilterEx{'host'}'"; } if ($FilterIn{'host'} || $FilterEx{'host'}) { print ": "; } print "$cpt $Message[81]"; if ($MonthRequired ne 'all') { if ($HTMLOutput{'allhosts'} || $HTMLOutput{'lasthosts'}) { print "
    $Message[102]: $TotalHostsKnown $Message[82], $TotalHostsUnknown $Message[1] - $TotalUnique $Message[11]"; } } } else { # Without filter if ($MonthRequired ne 'all') { print "$Message[102] : $TotalHostsKnown $Message[82], $TotalHostsUnknown $Message[1] - $TotalUnique $Message[11]"; } else { print "$Message[102] : ".(scalar keys %_host_h); } } print ""; &ShowHostInfo('__title__'); if ($ShowHostsStats =~ /P/i) { print "$Message[56]"; } if ($ShowHostsStats =~ /H/i) { print "$Message[57]"; } if ($ShowHostsStats =~ /B/i) { print "$Message[75]"; } if ($ShowHostsStats =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; if ($HTMLOutput{'allhosts'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Host'},\%_host_h,\%_host_p); } if ($HTMLOutput{'lasthosts'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Host'},\%_host_h,\%_host_l); } foreach my $key (@keylist) { my $host=CleanXSS($key); print "".($_robot_l{$key}?'':'')."$host".($_robot_l{$key}?'':'').""; &ShowHostInfo($key); if ($ShowHostsStats =~ /P/i) { print "".($_host_p{$key}?$_host_p{$key}:" ").""; } if ($ShowHostsStats =~ /H/i) { print "$_host_h{$key}"; } if ($ShowHostsStats =~ /B/i) { print "".Format_Bytes($_host_k{$key}).""; } if ($ShowHostsStats =~ /L/i) { print "".($_host_l{$key}?Format_Date($_host_l{$key},1):'-').""; } print "\n"; $total_p += $_host_p{$key}; $total_h += $_host_h{$key}; $total_k += $_host_k{$key}||0; $count++; } if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other visitors (known or not) print "$Message[2]"; &ShowHostInfo(''); if ($ShowHostsStats =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowHostsStats =~ /H/i) { print "$rest_h"; } if ($ShowHostsStats =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowHostsStats =~ /L/i) { print " "; } print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'unknownip'}) { print "$Center 
    \n"; &tab_head("$Message[45]",19,0,'unknownwip'); print "".(scalar keys %_host_h)." $Message[1]"; &ShowHostInfo('__title__'); if ($ShowHostsStats =~ /P/i) { print "$Message[56]"; } if ($ShowHostsStats =~ /H/i) { print "$Message[57]"; } if ($ShowHostsStats =~ /B/i) { print "$Message[75]"; } if ($ShowHostsStats =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Host'},\%_host_h,\%_host_p); foreach my $key (@keylist) { my $host=CleanXSS($key); print "$host"; &ShowHostInfo($key); if ($ShowHostsStats =~ /P/i) { print "".($_host_p{$key}?$_host_p{$key}:" ").""; } if ($ShowHostsStats =~ /H/i) { print "$_host_h{$key}"; } if ($ShowHostsStats =~ /B/i) { print "".Format_Bytes($_host_k{$key}).""; } if ($ShowHostsStats =~ /L/i) { print "".($_host_l{$key}?Format_Date($_host_l{$key},1):'-').""; } print "\n"; $total_p += $_host_p{$key}; $total_h += $_host_h{$key}; $total_k += $_host_k{$key}||0; $count++; } if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other visitors (known or not) print "$Message[82]"; &ShowHostInfo(''); if ($ShowHostsStats =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowHostsStats =~ /H/i) { print "$rest_h"; } if ($ShowHostsStats =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowHostsStats =~ /L/i) { print " "; } print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'allemails'} || $HTMLOutput{'lastemails'}) { &ShowEmailSendersChart($NewLinkParams,$NewLinkTarget); &html_end(1); } if ($HTMLOutput{'allemailr'} || $HTMLOutput{'lastemailr'}) { &ShowEmailReceiversChart($NewLinkParams,$NewLinkTarget); &html_end(1); } if ($HTMLOutput{'alllogins'} || $HTMLOutput{'lastlogins'}) { print "$Center 
    \n"; my $title=''; if ($HTMLOutput{'alllogins'}) { $title.="$Message[94]"; } if ($HTMLOutput{'lastlogins'}) { $title.="$Message[9]"; } &tab_head("$title",19,0,'logins'); print "$Message[94] : ".(scalar keys %_login_h).""; &ShowUserInfo('__title__'); if ($ShowAuthenticatedUsers =~ /P/i) { print "$Message[56]"; } if ($ShowAuthenticatedUsers =~ /H/i) { print "$Message[57]"; } if ($ShowAuthenticatedUsers =~ /B/i) { print "$Message[75]"; } if ($ShowAuthenticatedUsers =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; if ($HTMLOutput{'alllogins'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Host'},\%_login_h,\%_login_p); } if ($HTMLOutput{'lastlogins'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Host'},\%_login_h,\%_login_l); } foreach my $key (@keylist) { print "$key"; &ShowUserInfo($key); if ($ShowAuthenticatedUsers =~ /P/i) { print "".($_login_p{$key}?$_login_p{$key}:" ").""; } if ($ShowAuthenticatedUsers =~ /H/i) { print "$_login_h{$key}"; } if ($ShowAuthenticatedUsers =~ /B/i) { print "".Format_Bytes($_login_k{$key}).""; } if ($ShowAuthenticatedUsers =~ /L/i) { print "".($_login_l{$key}?Format_Date($_login_l{$key},1):'-').""; } print "\n"; $total_p += $_login_p{$key}||0; $total_h += $_login_h{$key}; $total_k += $_login_k{$key}||0; $count++; } if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other logins and/or anonymous print "$Message[125]"; &ShowUserInfo(''); if ($ShowAuthenticatedUsers =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowAuthenticatedUsers =~ /H/i) { print "$rest_h"; } if ($ShowAuthenticatedUsers =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowAuthenticatedUsers =~ /L/i) { print " "; } print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'allrobots'} || $HTMLOutput{'lastrobots'}) { print "$Center 
    \n"; my $title=''; if ($HTMLOutput{'allrobots'}) { $title.="$Message[53]"; } if ($HTMLOutput{'lastrobots'}) { $title.="$Message[9]"; } &tab_head("$title",19,0,'robots'); print "".(scalar keys %_robot_h)." $Message[51]"; if ($ShowRobotsStats =~ /H/i) { print "$Message[57]"; } if ($ShowRobotsStats =~ /B/i) { print "$Message[75]"; } if ($ShowRobotsStats =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=$total_r=0; my $count=0; if ($HTMLOutput{'allrobots'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Robot'},\%_robot_h,\%_robot_h); } if ($HTMLOutput{'lastrobots'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Robot'},\%_robot_h,\%_robot_l); } foreach my $key (@keylist) { print "".($RobotsHashIDLib{$key}?$RobotsHashIDLib{$key}:$key).""; if ($ShowRobotsStats =~ /H/i) { print "".($_robot_h{$key}-$_robot_r{$key}).($_robot_r{$key}?"+$_robot_r{$key}":"").""; } if ($ShowRobotsStats =~ /B/i) { print "".Format_Bytes($_robot_k{$key}).""; } if ($ShowRobotsStats =~ /L/i) { print "".($_robot_l{$key}?Format_Date($_robot_l{$key},1):'-').""; } print "\n"; #$total_p += $_robot_p{$key}||0; $total_h += $_robot_h{$key}; $total_k += $_robot_k{$key}||0; $total_r += $_robot_r{$key}||0; $count++; } # For bots we need to count Totals my $TotalPagesRobots = 0; #foreach (values %_robot_p) { $TotalPagesRobots+=$_; } my $TotalHitsRobots = 0; foreach (values %_robot_h) { $TotalHitsRobots+=$_; } my $TotalBytesRobots = 0; foreach (values %_robot_k) { $TotalBytesRobots+=$_; } my $TotalRRobots = 0; foreach (values %_robot_r) { $TotalRRobots+=$_; } $rest_p=0; #$rest_p=$TotalPagesRobots-$total_p; $rest_h=$TotalHitsRobots-$total_h; $rest_k=$TotalBytesRobots-$total_k; $rest_r=$TotalRRobots-$total_r; if ($Debug) { debug("Total real / shown : $TotalPagesRobots / $total_p - $TotalHitsRobots / $total_h - $TotalBytesRobots / $total_k",2); } if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0 || $rest_r > 0) { # All other robots print "$Message[2]"; if ($ShowRobotsStats =~ /H/i) { print "$rest_h"; } if ($ShowRobotsStats =~ /B/i) { print "".(Format_Bytes($rest_k)).""; } if ($ShowRobotsStats =~ /L/i) { print " "; } print "\n"; } &tab_end("* $Message[156]".($TotalRRobots?" $Message[157]":"")); &html_end(1); } if ($HTMLOutput{'urldetail'} || $HTMLOutput{'urlentry'} || $HTMLOutput{'urlexit'}) { # Call to plugins' function ShowPagesFilter foreach my $pluginname (keys %{$PluginsLoaded{'ShowPagesFilter'}}) { # my $function="ShowPagesFilter_$pluginname()"; # eval("$function"); my $function="ShowPagesFilter_$pluginname"; &$function(); } print "$Center 
    \n"; # Show filter form &ShowFormFilter("urlfilter",$FilterIn{'url'},$FilterEx{'url'}); # Show URL list my $title=''; my $cpt=0; if ($HTMLOutput{'urldetail'}) { $title=$Message[19]; $cpt=(scalar keys %_url_p); } if ($HTMLOutput{'urlentry'}) { $title=$Message[104]; $cpt=(scalar keys %_url_e); } if ($HTMLOutput{'urlexit'}) { $title=$Message[116]; $cpt=(scalar keys %_url_x); } &tab_head("$title",19,0,'urls'); print ""; if ($FilterIn{'url'} || $FilterEx{'url'}) { if ($FilterIn{'url'}) { print "$Message[79] $FilterIn{'url'}"; } if ($FilterIn{'url'} && $FilterEx{'url'}) { print " - "; } if ($FilterEx{'url'}) { print "Exclude $Message[79] $FilterEx{'url'}"; } if ($FilterIn{'url'} || $FilterEx{'url'}) { print ": "; } print "$cpt $Message[28]"; if ($MonthRequired ne 'all') { if ($HTMLOutput{'urldetail'}) { print "
    $Message[102]: $TotalDifferentPages $Message[28]"; } } } else { print "$Message[102]: $cpt $Message[28]"; } print ""; if ($ShowPagesStats =~ /P/i) { print "$Message[29]"; } if ($ShowPagesStats =~ /B/i) { print "$Message[106]"; } if ($ShowPagesStats =~ /E/i) { print "$Message[104]"; } if ($ShowPagesStats =~ /X/i) { print "$Message[116]"; } # Call to plugins' function ShowPagesAddField foreach my $pluginname (keys %{$PluginsLoaded{'ShowPagesAddField'}}) { # my $function="ShowPagesAddField_$pluginname('title')"; # eval("$function"); my $function="ShowPagesAddField_$pluginname"; &$function('title'); } print " \n"; $total_p=$total_k=$total_e=$total_x=0; my $count=0; if ($HTMLOutput{'urlentry'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'File'},\%_url_e,\%_url_e); } elsif ($HTMLOutput{'urlexit'}) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'File'},\%_url_x,\%_url_x); } else { &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'File'},\%_url_p,\%_url_p); } $max_p=1; $max_k=1; foreach my $key (@keylist) { if ($_url_p{$key} > $max_p) { $max_p = $_url_p{$key}; } if ($_url_k{$key}/($_url_p{$key}||1) > $max_k) { $max_k = $_url_k{$key}/($_url_p{$key}||1); } } foreach my $key (@keylist) { print ""; &ShowURLInfo($key); print ""; my $bredde_p=0; my $bredde_e=0; my $bredde_x=0; my $bredde_k=0; if ($max_p > 0) { $bredde_p=int($BarWidth*($_url_p{$key}||0)/$max_p)+1; } if (($bredde_p==1) && $_url_p{$key}) { $bredde_p=2; } if ($max_p > 0) { $bredde_e=int($BarWidth*($_url_e{$key}||0)/$max_p)+1; } if (($bredde_e==1) && $_url_e{$key}) { $bredde_e=2; } if ($max_p > 0) { $bredde_x=int($BarWidth*($_url_x{$key}||0)/$max_p)+1; } if (($bredde_x==1) && $_url_x{$key}) { $bredde_x=2; } if ($max_k > 0) { $bredde_k=int($BarWidth*(($_url_k{$key}||0)/($_url_p{$key}||1))/$max_k)+1; } if (($bredde_k==1) && $_url_k{$key}) { $bredde_k=2; } if ($ShowPagesStats =~ /P/i) { print "$_url_p{$key}"; } if ($ShowPagesStats =~ /B/i) { print "".($_url_k{$key}?Format_Bytes($_url_k{$key}/($_url_p{$key}||1)):" ").""; } if ($ShowPagesStats =~ /E/i) { print "".($_url_e{$key}?$_url_e{$key}:" ").""; } if ($ShowPagesStats =~ /X/i) { print "".($_url_x{$key}?$_url_x{$key}:" ").""; } # Call to plugins' function ShowPagesAddField foreach my $pluginname (keys %{$PluginsLoaded{'ShowPagesAddField'}}) { # my $function="ShowPagesAddField_$pluginname('$key')"; # eval("$function"); my $function="ShowPagesAddField_$pluginname"; &$function($key); } print ""; # alt and title are not provided to reduce page size if ($ShowPagesStats =~ /P/i) { print "
    "; } if ($ShowPagesStats =~ /B/i) { print "
    "; } if ($ShowPagesStats =~ /E/i) { print "
    "; } if ($ShowPagesStats =~ /X/i) { print ""; } print "\n"; $total_p += $_url_p{$key}; $total_e += $_url_e{$key}; $total_x += $_url_x{$key}; $total_k += $_url_k{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalEntries / $total_e - $TotalExits / $total_x - $TotalBytesPages / $total_k",2); } $rest_p=$TotalPages-$total_p; $rest_k=$TotalBytesPages-$total_k; $rest_e=$TotalEntries-$total_e; $rest_x=$TotalExits-$total_x; if ($rest_p > 0 || $rest_e > 0 || $rest_k > 0) { print "$Message[2]"; if ($ShowPagesStats =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowPagesStats =~ /B/i) { print "".($rest_k?Format_Bytes($rest_k/($rest_p||1)):" ").""; } if ($ShowPagesStats =~ /E/i) { print "".($rest_e?$rest_e:" ").""; } if ($ShowPagesStats =~ /X/i) { print "".($rest_x?$rest_x:" ").""; } # Call to plugins' function ShowPagesAddField foreach my $pluginname (keys %{$PluginsLoaded{'ShowPagesAddField'}}) { # my $function="ShowPagesAddField_$pluginname('')"; # eval("$function"); my $function="ShowPagesAddField_$pluginname"; &$function(''); } print " \n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'unknownos'}) { print "$Center 
    \n"; my $title="$Message[46]"; &tab_head("$title",19,0,'unknownos'); print "User agent (".(scalar keys %_unknownreferer_l).")$Message[9]\n"; $total_l=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,1,\%_unknownreferer_l,\%_unknownreferer_l); foreach my $key (@keylist) { my $useragent=XMLEncode(CleanXSS($key)); print "$useragent"; print "".Format_Date($_unknownreferer_l{$key},1).""; print "\n"; $total_l+=1; $count++; } $rest_l=(scalar keys %_unknownreferer_l)-$total_l; if ($rest_l > 0) { print "$Message[2]"; print "-"; print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'unknownbrowser'}) { print "$Center 
    \n"; my $title="$Message[50]"; &tab_head("$title",19,0,'unknownbrowser'); print "User agent (".(scalar keys %_unknownrefererbrowser_l).")$Message[9]\n"; $total_l=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,1,\%_unknownrefererbrowser_l,\%_unknownrefererbrowser_l); foreach my $key (@keylist) { my $useragent=XMLEncode(CleanXSS($key)); print "$useragent".Format_Date($_unknownrefererbrowser_l{$key},1)."\n"; $total_l+=1; $count++; } $rest_l=(scalar keys %_unknownrefererbrowser_l)-$total_l; if ($rest_l > 0) { print "$Message[2]"; print "-"; print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'osdetail'}) { # Show os versions print "$Center 
    "; my $title="$Message[59]"; &tab_head("$title",19,0,'osversions'); print "$Message[58]"; print "$Message[57]$Message[15]"; print " "; print "\n"; $total_h=0; my $count=0; &BuildKeyList(MinimumButNoZero(scalar keys %_os_h,500),1,\%_os_h,\%_os_h); my %keysinkeylist=(); $max_h=1; # Count total by family my %totalfamily_h=(); my $TotalFamily=0; OSLOOP: foreach my $key (@keylist) { $total_h+=$_os_h{$key}; if ($_os_h{$key} > $max_h) { $max_h = $_os_h{$key}; } foreach my $family (keys %OSFamily) { if ($key =~ /^$family/i) { $totalfamily_h{$family}+=$_os_h{$key}; $TotalFamily+=$_os_h{$key}; next OSLOOP; } } } # Write records grouped in a browser family foreach my $family (keys %OSFamily) { my $p=' '; if ($total_h) { $p=int($totalfamily_h{$family}/$total_h*1000)/10; $p="$p %"; } my $familyheadershown=0; foreach my $key (reverse sort keys %_os_h) { if ($key =~ /^$family(.*)/i) { if (! $familyheadershown) { my $family_name=''; if ($OSFamily{$family}) { $family_name=$OSFamily{$family}; } print "$family_name"; print "".int($totalfamily_h{$family})."$p "; print "\n"; $familyheadershown=1; } $keysinkeylist{$key}=1; my $ver=$1; my $p=' '; if ($total_h) { $p=int($_os_h{$key}/$total_h*1000)/10; $p="$p %"; } print ""; print ""; print "$OSHashLib{$key}"; my $bredde_h=0; if ($max_h > 0) { $bredde_h=int($BarWidth*($_os_h{$key}||0)/$max_h)+1; } if (($bredde_h==1) && $_os_h{$key}) { $bredde_h=2; } print "$_os_h{$key}$p"; print ""; # alt and title are not provided to reduce page size if ($ShowOSStats) { print "
    "; } print ""; print "\n"; $count++; } } } # Write other records my $familyheadershown=0; foreach my $key (@keylist) { if ($keysinkeylist{$key}) { next; } if (! $familyheadershown) { my $p=' '; if ($total_h) { $p=int(($total_h-$TotalFamily)/$total_h*1000)/10; $p="$p %"; } print "$Message[2]"; print "".($total_h-$TotalFamily)."$p "; print "\n"; $familyheadershown=1; } my $p=' '; if ($total_h) { $p=int($_os_h{$key}/$total_h*1000)/10; $p="$p %"; } print ""; if ($key eq 'Unknown') { print "$Message[0]"; } else { my $keywithoutcumul=$key; $keywithoutcumul =~ s/cumul$//i; my $libos=$OSHashLib{$keywithoutcumul}||$keywithoutcumul; my $nameicon=$keywithoutcumul; $nameicon =~ s/[^\w]//g; print "$libos"; } my $bredde_h=0; if ($max_h > 0) { $bredde_h=int($BarWidth*($_os_h{$key}||0)/$max_h)+1; } if (($bredde_h==1) && $_os_h{$key}) { $bredde_h=2; } print "$_os_h{$key}$p"; print ""; # alt and title are not provided to reduce page size if ($ShowOSStats) { print "
    "; } print ""; print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'browserdetail'}) { # Show browsers versions print "$Center 
    "; my $title="$Message[21]"; &tab_head("$title",19,0,'browsersversions'); print "$Message[58]"; print "$Message[111]$Message[57]$Message[15]"; print " "; print "\n"; $total_h=0; my $count=0; &BuildKeyList(MinimumButNoZero(scalar keys %_browser_h,500),1,\%_browser_h,\%_browser_h); my %keysinkeylist=(); $max_h=1; # Count total by family my %totalfamily_h=(); my $TotalFamily=0; BROWSERLOOP: foreach my $key (@keylist) { $total_h+=$_browser_h{$key}; if ($_browser_h{$key} > $max_h) { $max_h = $_browser_h{$key}; } foreach my $family (keys %BrowsersFamily) { if ($key =~ /^$family/i) { $totalfamily_h{$family}+=$_browser_h{$key}; $TotalFamily+=$_browser_h{$key}; next BROWSERLOOP; } } } # Write records grouped in a browser family foreach my $family (sort { $BrowsersFamily{$a} <=> $BrowsersFamily{$b} } keys %BrowsersFamily) { my $p=' '; if ($total_h) { $p=int($totalfamily_h{$family}/$total_h*1000)/10; $p="$p %"; } my $familyheadershown=0; foreach my $key (reverse sort keys %_browser_h) { if ($key =~ /^$family(.*)/i) { if (! $familyheadershown) { print "".uc($family).""; print " ".int($totalfamily_h{$family})."$p "; print "\n"; $familyheadershown=1; } $keysinkeylist{$key}=1; my $ver=$1; my $p=' '; if ($total_h) { $p=int($_browser_h{$key}/$total_h*1000)/10; $p="$p %"; } print ""; print ""; print "".ucfirst($family)." ".($ver?"$ver":"?").""; print "".($BrowsersHereAreGrabbers{$family}?"$Message[112]":"$Message[113]").""; my $bredde_h=0; if ($max_h > 0) { $bredde_h=int($BarWidth*($_browser_h{$key}||0)/$max_h)+1; } if (($bredde_h==1) && $_browser_h{$key}) { $bredde_h=2; } print "$_browser_h{$key}$p"; print ""; # alt and title are not provided to reduce page size if ($ShowBrowsersStats) { print "
    "; } print ""; print "\n"; $count++; } } } # Write other records my $familyheadershown=0; foreach my $key (@keylist) { if ($keysinkeylist{$key}) { next; } if (! $familyheadershown) { my $p=' '; if ($total_h) { $p=int(($total_h-$TotalFamily)/$total_h*1000)/10; $p="$p %"; } print "$Message[2]"; print " ".($total_h-$TotalFamily)."$p "; print "\n"; $familyheadershown=1; } my $p=' '; if ($total_h) { $p=int($_browser_h{$key}/$total_h*1000)/10; $p="$p %"; } print ""; if ($key eq 'Unknown') { print "$Message[0]?"; } else { my $keywithoutcumul=$key; $keywithoutcumul =~ s/cumul$//i; my $libbrowser=$BrowsersHashIDLib{$keywithoutcumul}||$keywithoutcumul; my $nameicon=$BrowsersHashIcon{$keywithoutcumul}||"notavailable"; print "$libbrowser".($BrowsersHereAreGrabbers{$key}?"$Message[112]":"$Message[113]").""; } my $bredde_h=0; if ($max_h > 0) { $bredde_h=int($BarWidth*($_browser_h{$key}||0)/$max_h)+1; } if (($bredde_h==1) && $_browser_h{$key}) { $bredde_h=2; } print "$_browser_h{$key}$p"; print ""; # alt and title are not provided to reduce page size if ($ShowBrowsersStats) { print "
    "; } print ""; print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'refererse'}) { print "$Center 
    \n"; my $title="$Message[40]"; &tab_head("$title",19,0,'refererse'); print "$TotalDifferentSearchEngines $Message[122]"; print "$Message[56]$Message[15]"; print "$Message[57]$Message[15]"; print "\n"; $total_s=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Refer'},\%_se_referrals_h,((scalar keys %_se_referrals_p)?\%_se_referrals_p:\%_se_referrals_h)); # before 5.4 only hits were recorded foreach my $key (@keylist) { my $newreferer=$SearchEnginesHashLib{$key}||CleanXSS($key); my $p_p; my $p_h; if ($TotalSearchEnginesPages) { $p_p=int($_se_referrals_p{$key}/$TotalSearchEnginesPages*1000)/10; } if ($TotalSearchEnginesHits) { $p_h=int($_se_referrals_h{$key}/$TotalSearchEnginesHits*1000)/10; } print "$newreferer"; print "".($_se_referrals_p{$key}?$_se_referrals_p{$key}:' ').""; print "".($_se_referrals_p{$key}?"$p_p %":' ').""; print "$_se_referrals_h{$key}"; print "$p_h %"; print "\n"; $total_p += $_se_referrals_p{$key}; $total_h += $_se_referrals_h{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalSearchEnginesPages / $total_p - $TotalSearchEnginesHits / $total_h",2); } $rest_p=$TotalSearchEnginesPages-$total_p; $rest_h=$TotalSearchEnginesHits-$total_h; if ($rest_p > 0 || $rest_h > 0) { my $p_p;my $p_h; if ($TotalSearchEnginesPages) { $p_p=int($rest_p/$TotalSearchEnginesPages*1000)/10; } if ($TotalSearchEnginesHits) { $p_h=int($rest_h/$TotalSearchEnginesHits*1000)/10; } print "$Message[2]"; print "".($rest_p?$rest_p:' ').""; print "".($rest_p?"$p_p %":' ').""; print "$rest_h"; print "$p_h %"; print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'refererpages'}) { print "$Center 
    \n"; # Show filter form &ShowFormFilter("refererpagesfilter",$FilterIn{'refererpages'},$FilterEx{'refererpages'}); my $title="$Message[41]"; my $cpt=0; $cpt=(scalar keys %_pagesrefs_h); &tab_head("$title",19,0,'refererpages'); print ""; if ($FilterIn{'refererpages'} || $FilterEx{'refererpages'}) { if ($FilterIn{'refererpages'}) { print "$Message[79] $FilterIn{'refererpages'}"; } if ($FilterIn{'refererpages'} && $FilterEx{'refererpages'}) { print " - "; } if ($FilterEx{'refererpages'}) { print "Exclude $Message[79] $FilterEx{'refererpages'}"; } if ($FilterIn{'refererpages'} || $FilterEx{'refererpages'}) { print ": "; } print "$cpt $Message[28]"; #if ($MonthRequired ne 'all') { # if ($HTMLOutput{'refererpages'}) { print "
    $Message[102]: $TotalDifferentPages $Message[28]"; } #} } else { print "$Message[102]: $cpt $Message[28]"; } print ""; print "$Message[56]$Message[15]"; print "$Message[57]$Message[15]"; print "\n"; $total_s=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Refer'},\%_pagesrefs_h,((scalar keys %_pagesrefs_p)?\%_pagesrefs_p:\%_pagesrefs_h)); foreach my $key (@keylist) { my $nompage=CleanXSS($key); if (length($nompage)>$MaxLengthOfShownURL) { $nompage=substr($nompage,0,$MaxLengthOfShownURL)."..."; } my $p_p; my $p_h; if ($TotalRefererPages) { $p_p=int($_pagesrefs_p{$key}/$TotalRefererPages*1000)/10; } if ($TotalRefererHits) { $p_h=int($_pagesrefs_h{$key}/$TotalRefererHits*1000)/10; } print ""; &ShowURLInfo($key); print ""; print "".($_pagesrefs_p{$key}?$_pagesrefs_p{$key}:' ')."".($_pagesrefs_p{$key}?"$p_p %":' ').""; print "".($_pagesrefs_h{$key}?$_pagesrefs_h{$key}:' ')."".($_pagesrefs_h{$key}?"$p_h %":' ').""; print "\n"; $total_p += $_pagesrefs_p{$key}; $total_h += $_pagesrefs_h{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalRefererPages / $total_p - $TotalRefererHits / $total_h",2); } $rest_p=$TotalRefererPages-$total_p; $rest_h=$TotalRefererHits-$total_h; if ($rest_p > 0 || $rest_h > 0) { my $p_p; my $p_h; if ($TotalRefererPages) { $p_p=int($rest_p/$TotalRefererPages*1000)/10; } if ($TotalRefererHits) { $p_h=int($rest_h/$TotalRefererHits*1000)/10; } print "$Message[2]"; print "".($rest_p?$rest_p:' ').""; print "".($rest_p?"$p_p %":' ').""; print "$rest_h"; print "$p_h %"; print "\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'keyphrases'}) { print "$Center 
    \n"; &tab_head($Message[43],19,0,'keyphrases'); print "$TotalDifferentKeyphrases $Message[103]$Message[14]$Message[15]\n"; $total_s=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Keyphrase'},\%_keyphrases,\%_keyphrases); foreach my $key (@keylist) { my $mot; # Convert coded keywords (utf8,...) to be correctly reported in HTML page. if ($PluginsLoaded{'DecodeKey'}{'decodeutfkeys'}) { $mot=CleanXSS(DecodeKey_decodeutfkeys($key,$PageCode||'iso-8859-1')); } else { $mot = CleanXSS(DecodeEncodedString($key)); } my $p; if ($TotalKeyphrases) { $p=int($_keyphrases{$key}/$TotalKeyphrases*1000)/10; } print "".XMLEncode($mot)."$_keyphrases{$key}$p %\n"; $total_s += $_keyphrases{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalKeyphrases / $total_s",2); } $rest_s=$TotalKeyphrases-$total_s; if ($rest_s > 0) { my $p; if ($TotalKeyphrases) { $p=int($rest_s/$TotalKeyphrases*1000)/10; } print "$Message[124]$rest_s"; print "$p %\n"; } &tab_end(); &html_end(1); } if ($HTMLOutput{'keywords'}) { print "$Center 
    \n"; &tab_head($Message[44],19,0,'keywords'); print "$TotalDifferentKeywords $Message[13]$Message[14]$Message[15]\n"; $total_s=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Keyword'},\%_keywords,\%_keywords); foreach my $key (@keylist) { my $mot; # Convert coded keywords (utf8,...) to be correctly reported in HTML page. if ($PluginsLoaded{'DecodeKey'}{'decodeutfkeys'}) { $mot=CleanXSS(DecodeKey_decodeutfkeys($key,$PageCode||'iso-8859-1')); } else { $mot = CleanXSS(DecodeEncodedString($key)); } my $p; if ($TotalKeywords) { $p=int($_keywords{$key}/$TotalKeywords*1000)/10; } print "".XMLEncode($mot)."$_keywords{$key}$p %\n"; $total_s += $_keywords{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalKeywords / $total_s",2); } $rest_s=$TotalKeywords-$total_s; if ($rest_s > 0) { my $p; if ($TotalKeywords) { $p=int($rest_s/$TotalKeywords*1000)/10; } print "$Message[30]$rest_s"; print "$p %\n"; } &tab_end(); &html_end(1); } foreach my $code (keys %TrapInfosForHTTPErrorCodes) { if ($HTMLOutput{"errors$code"}) { print "$Center 
    \n"; &tab_head($Message[47],19,0,"errors$code"); print "URL (".(scalar keys %_sider404_h).")$Message[49]$Message[23]\n"; $total_h=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,1,\%_sider404_h,\%_sider404_h); foreach my $key (@keylist) { my $nompage=XMLEncode(CleanXSS($key)); #if (length($nompage)>$MaxLengthOfShownURL) { $nompage=substr($nompage,0,$MaxLengthOfShownURL)."..."; } my $referer=XMLEncode(CleanXSS($_referer404_h{$key})); print "$nompage"; print "$_sider404_h{$key}"; print "".($referer?"$referer":" ").""; print "\n"; $total_s += $_sider404_h{$key}; $count++; } # TODO Build TotalErrorHits # if ($Debug) { debug("Total real / shown : $TotalErrorHits / $total_h",2); } # $rest_h=$TotalErrorHits-$total_h; # if ($rest_h > 0) { # my $p; # if ($TotalErrorHits) { $p=int($rest_h/$TotalErrorHits*1000)/10; } # print "$Message[30]"; # print "$rest_h"; # print "..."; # print "\n"; # } &tab_end(); &html_end(1); } } # BY EXTRA SECTIONS #---------------------------- foreach my $extranum (1..@ExtraName-1) { if ($HTMLOutput{"allextra$extranum"}) { if ($Debug) { debug("ExtraName$extranum",2); } print "$Center 
    "; my $title=$ExtraName[$extranum]; &tab_head("$title",19,0,"extra$extranum"); print ""; print "".$ExtraFirstColumnTitle[$extranum].""; if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "$Message[56]"; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "$Message[57]"; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "$Message[75]"; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; #$max_h=1; foreach (values %_login_h) { if ($_ > $max_h) { $max_h = $_; } } #$max_k=1; foreach (values %_login_k) { if ($_ > $max_k) { $max_k = $_; } } my $count=0; if ($ExtraStatTypes[$extranum] =~ m/P/i) { &BuildKeyList($MaxRowsInHTMLOutput,$MinHitExtra[$extranum],\%{'_section_' . $extranum . '_h'},\%{'_section_' . $extranum . '_p'}); } else { &BuildKeyList($MaxRowsInHTMLOutput,$MinHitExtra[$extranum],\%{'_section_' . $extranum . '_h'},\%{'_section_' . $extranum . '_h'}); } my %keysinkeylist=(); foreach my $key (@keylist) { $keysinkeylist{$key}=1; my $firstcol = CleanXSS(DecodeEncodedString($key)); $total_p+=${'_section_' . $extranum . '_p'}{$key}; $total_h+=${'_section_' . $extranum . '_h'}{$key}; $total_k+=${'_section_' . $extranum . '_k'}{$key}; print ""; printf("$ExtraFirstColumnFormat[$extranum]", $firstcol, $firstcol, $firstcol, $firstcol, $firstcol); if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "" . ${'_section_' . $extranum . '_p'}{$key} . ""; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "" . ${'_section_' . $extranum . '_h'}{$key} . ""; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "" . Format_Bytes(${'_section_' . $extranum . '_k'}{$key}) . ""; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print "" . (${'_section_' . $extranum . '_l'}{$key}?Format_Date(${'_section_' . $extranum . '_l'}{$key},1):'-') . ""; } print "\n"; $count++; } # If we ask average or sum, we loop on all other records if ($ExtraAddAverageRow[$extranum] || $ExtraAddSumRow[$extranum]) { foreach (keys %{'_section_' . $extranum . '_h'}) { if ($keysinkeylist{$_}) { next; } $total_p+=${'_section_' . $extranum . '_p'}{$_}; $total_h+=${'_section_' . $extranum . '_h'}{$_}; $total_k+=${'_section_' . $extranum . '_k'}{$_}; $count++; } } # Add average row if ($ExtraAddAverageRow[$extranum]) { print ""; print "$Message[96]"; if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "" . ($count?($total_p/$count):" ") . ""; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "" . ($count?($total_h/$count):" ") . ""; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "" . ($count?Format_Bytes($total_k/$count):" ") . ""; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print " "; } print "\n"; } # Add sum row if ($ExtraAddSumRow[$extranum]) { print ""; print "$Message[102]"; if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "" . ($total_p) . ""; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "" . ($total_h) . ""; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "" . Format_Bytes($total_k) . ""; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print " "; } print "\n"; } &tab_end(); } } if ($HTMLOutput{'info'}) { # Not yet available print "$Center 
    "; &html_end(1); } my $htmloutput=''; foreach my $key (keys %HTMLOutput) { $htmloutput=$key; } if ($htmloutput =~ /^plugin_(\w+)$/) { my $pluginname=$1; print "$Center 
    "; # my $function="AddHTMLGraph_$pluginname()"; # eval("$function"); my $function="AddHTMLGraph_$pluginname"; &$function(); &html_end(1); } } # Output main page #----------------- if ($HTMLOutput{'main'}) { # SUMMARY #--------------------------------------------------------------------- if ($ShowSummary) { if ($Debug) { debug("ShowSummary",2); } #print "$Center 
    \n"; my $title="$Message[128]"; &tab_head("$title",0,0,'month'); my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)year=[^&]*//i; $NewLinkParams =~ s/(^|&|&)month=[^&]*//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } my $NewLinkTarget=''; if ($FrameName eq 'mainright') { $NewLinkTarget=" target=\"_parent\""; } # Ratio my $RatioVisits=0; my $RatioPages=0; my $RatioHits=0; my $RatioBytes=0; if ($TotalUnique > 0) { $RatioVisits=int($TotalVisits/$TotalUnique*100)/100; } if ($TotalVisits > 0) { $RatioPages=int($TotalPages/$TotalVisits*100)/100; } if ($TotalVisits > 0) { $RatioHits=int($TotalHits/$TotalVisits*100)/100; } if ($TotalVisits > 0) { $RatioBytes=int(($TotalBytes/1024)*100/($LogType eq 'M'?$TotalHits:$TotalVisits))/100; } my $colspan=5; my $w='20'; if ($LogType eq 'W' || $LogType eq 'S') { $w='17'; $colspan=6; } # Show first/last print ""; print "$Message[133]\n"; print ($MonthRequired eq 'all'?"$Message[6] $YearRequired":"$Message[5] ".$MonthNumLib{$MonthRequired}." $YearRequired"); print "\n"; print ""; print "$Message[8]\n"; print "".($FirstTime?Format_Date($FirstTime,0):"NA").""; print "\n"; print ""; print "$Message[9]\n"; print "".($LastTime?Format_Date($LastTime,0):"NA")."\n"; print "\n"; # Show main indicators title row print ""; if ($LogType eq 'W' || $LogType eq 'S') { print " "; } if ($ShowSummary =~ /U/i) { print "$Message[11]"; } else { print " "; } if ($ShowSummary =~ /V/i) { print "$Message[10]"; } else { print " "; } if ($ShowSummary =~ /P/i) { print "$Message[56]"; } else { print " "; } if ($ShowSummary =~ /H/i) { print "$Message[57]"; } else { print " "; } if ($ShowSummary =~ /B/i) { print "$Message[75]"; } else { print " "; } print "\n"; # Show main indicators values for viewed traffic print ""; if ($LogType eq 'M') { print "$Message[165]"; print " 
     \n"; print " 
     \n"; if ($ShowSummary =~ /H/i) { print "$TotalHits".($LogType eq 'M'?"":"
    ($RatioHits ".lc($Message[57]."/".$Message[12]).")").""; } else { print " "; } if ($ShowSummary =~ /B/i) { print "".Format_Bytes(int($TotalBytes))."
    ($RatioBytes $Message[108]/".$Message[($LogType eq 'M'?149:12)].")"; } else { print " "; } } else { if ($LogType eq 'W' || $LogType eq 'S') { print "$Message[160] *"; } if ($ShowSummary =~ /U/i) { print "".($MonthRequired eq 'all'?"<= $TotalUnique
    $Message[129]":"$TotalUnique
     ").""; } else { print " "; } if ($ShowSummary =~ /V/i) { print "$TotalVisits
    ($RatioVisits $Message[52])"; } else { print " "; } if ($ShowSummary =~ /P/i) { print "$TotalPages
    ($RatioPages ".$Message[56]."/".$Message[12].")"; } else { print " "; } if ($ShowSummary =~ /H/i) { print "$TotalHits".($LogType eq 'M'?"":"
    ($RatioHits ".$Message[57]."/".$Message[12].")").""; } else { print " "; } if ($ShowSummary =~ /B/i) { print "".Format_Bytes(int($TotalBytes))."
    ($RatioBytes $Message[108]/".$Message[($LogType eq 'M'?149:12)].")"; } else { print " "; } } print "\n"; # Show main indicators values for not viewed traffic values if ($LogType eq 'M' || $LogType eq 'W' || $LogType eq 'S') { print ""; if ($LogType eq 'M') { print "$Message[166]"; print " 
     \n"; print " 
     \n"; if ($ShowSummary =~ /H/i) { print "$TotalNotViewedHits"; } else { print " "; } if ($ShowSummary =~ /B/i) { print "".Format_Bytes(int($TotalNotViewedBytes)).""; } else { print " "; } } else { if ($LogType eq 'W' || $LogType eq 'S') { print "$Message[161] *"; } print " 
     \n"; if ($ShowSummary =~ /P/i) { print "$TotalNotViewedPages"; } else { print " "; } if ($ShowSummary =~ /H/i) { print "$TotalNotViewedHits"; } else { print " "; } if ($ShowSummary =~ /B/i) { print "".Format_Bytes(int($TotalNotViewedBytes)).""; } else { print " "; } } print "\n"; } &tab_end($LogType eq 'W' || $LogType eq 'S'?"* $Message[159]":""); } # BY MONTH #--------------------------------------------------------------------- if ($ShowMonthStats) { if ($Debug) { debug("ShowMonthStats",2); } print "$Center 
    \n"; my $title="$Message[162]"; &tab_head("$title",0,0,'month'); print "\n"; print "
    \n"; $average_nb=$average_u=$average_v=$average_p=$average_h=$average_k=0; $total_u=$total_v=$total_p=$total_h=$total_k=0; $max_v=$max_p=$max_h=$max_k=1; # Define total and max for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); $total_u+=$MonthUnique{$YearRequired.$monthix}||0; $total_v+=$MonthVisits{$YearRequired.$monthix}||0; $total_p+=$MonthPages{$YearRequired.$monthix}||0; $total_h+=$MonthHits{$YearRequired.$monthix}||0; $total_k+=$MonthBytes{$YearRequired.$monthix}||0; #if (($MonthUnique{$YearRequired.$monthix}||0) > $max_v) { $max_v=$MonthUnique{$YearRequired.$monthix}; } if (($MonthVisits{$YearRequired.$monthix}||0) > $max_v) { $max_v=$MonthVisits{$YearRequired.$monthix}; } #if (($MonthPages{$YearRequired.$monthix}||0) > $max_p) { $max_p=$MonthPages{$YearRequired.$monthix}; } if (($MonthHits{$YearRequired.$monthix}||0) > $max_h) { $max_h=$MonthHits{$YearRequired.$monthix}; } if (($MonthBytes{$YearRequired.$monthix}||0) > $max_k) { $max_k=$MonthBytes{$YearRequired.$monthix}; } } # Define average # TODO # Show bars for month if ($PluginsLoaded{'ShowGraph'}{'graphapplet'}) { my @blocklabel=(); for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); push @blocklabel,"$MonthNumLib{$monthix}\§$YearRequired"; } my @vallabel=("$Message[11]","$Message[10]","$Message[56]","$Message[57]","$Message[75]"); my @valcolor=("$color_u","$color_v","$color_p","$color_h","$color_k"); my @valmax=($max_v,$max_v,$max_h,$max_h,$max_k); my @valtotal=($total_u,$total_v,$total_p,$total_h,$total_k); my @valaverage=(); #my @valaverage=($average_v,$average_p,$average_h,$average_k); my @valdata=(); my $xx=0; for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); $valdata[$xx++]=$MonthUnique{$YearRequired.$monthix}||0; $valdata[$xx++]=$MonthVisits{$YearRequired.$monthix}||0; $valdata[$xx++]=$MonthPages{$YearRequired.$monthix}||0; $valdata[$xx++]=$MonthHits{$YearRequired.$monthix}||0; $valdata[$xx++]=$MonthBytes{$YearRequired.$monthix}||0; } ShowGraph_graphapplet("$title","month",$ShowMonthStats,\@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal,\@valaverage,\@valdata); } else { print "\n"; print ""; print "\n"; for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); my $bredde_u=0; my $bredde_v=0;my $bredde_p=0;my $bredde_h=0;my $bredde_k=0; if ($max_v > 0) { $bredde_u=int(($MonthUnique{$YearRequired.$monthix}||0)/$max_v*$BarHeight)+1; } if ($max_v > 0) { $bredde_v=int(($MonthVisits{$YearRequired.$monthix}||0)/$max_v*$BarHeight)+1; } if ($max_h > 0) { $bredde_p=int(($MonthPages{$YearRequired.$monthix}||0)/$max_h*$BarHeight)+1; } if ($max_h > 0) { $bredde_h=int(($MonthHits{$YearRequired.$monthix}||0)/$max_h*$BarHeight)+1; } if ($max_k > 0) { $bredde_k=int(($MonthBytes{$YearRequired.$monthix}||0)/$max_k*$BarHeight)+1; } print "\n"; } print ""; print "\n"; # Show lib for month print ""; # if (!$StaticLinks) { # print ""; # } # else { print ""; # } for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); # if (!$StaticLinks) { # print ""; # } # else { print ""; # } } # if (!$StaticLinks) { # print ""; # } # else { print ""; # } print "\n"; print "
     "; if ($ShowMonthStats =~ /U/i) { print ""; } if ($ShowMonthStats =~ /V/i) { print ""; } if ($ShowMonthStats =~ /P/i) { print ""; } if ($ShowMonthStats =~ /H/i) { print ""; } if ($ShowMonthStats =~ /B/i) { print ""; } print " 
    << $MonthNumLib{$monthix}
    $YearRequired
    ".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); print "$MonthNumLib{$monthix}
    $YearRequired"; print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'
    ':''); print "
    >> 
    \n"; } print "
    \n"; # Show data array for month if ($AddDataArrayMonthStats) { print "\n"; print ""; if ($ShowMonthStats =~ /U/i) { print ""; } if ($ShowMonthStats =~ /V/i) { print ""; } if ($ShowMonthStats =~ /P/i) { print ""; } if ($ShowMonthStats =~ /H/i) { print ""; } if ($ShowMonthStats =~ /B/i) { print ""; } print "\n"; for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); print ""; print ""; if ($ShowMonthStats =~ /U/i) { print ""; } if ($ShowMonthStats =~ /V/i) { print ""; } if ($ShowMonthStats =~ /P/i) { print ""; } if ($ShowMonthStats =~ /H/i) { print ""; } if ($ShowMonthStats =~ /B/i) { print ""; } print "\n"; } # Average row # TODO # Total row print ""; if ($ShowMonthStats =~ /U/i) { print ""; } if ($ShowMonthStats =~ /V/i) { print ""; } if ($ShowMonthStats =~ /P/i) { print ""; } if ($ShowMonthStats =~ /H/i) { print ""; } if ($ShowMonthStats =~ /B/i) { print ""; } print "\n"; print "
    $Message[5]$Message[11]$Message[10]$Message[56]$Message[57]$Message[75]
    ".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); print "$MonthNumLib{$monthix} $YearRequired"; print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); print "",$MonthUnique{$YearRequired.$monthix}?$MonthUnique{$YearRequired.$monthix}:"0","",$MonthVisits{$YearRequired.$monthix}?$MonthVisits{$YearRequired.$monthix}:"0","",$MonthPages{$YearRequired.$monthix}?$MonthPages{$YearRequired.$monthix}:"0","",$MonthHits{$YearRequired.$monthix}?$MonthHits{$YearRequired.$monthix}:"0","",Format_Bytes(int($MonthBytes{$YearRequired.$monthix}||0)),"
    $Message[102]$total_u$total_v$total_p$total_h".Format_Bytes($total_k)."
    \n
    \n"; } print "
    \n"; print "\n"; &tab_end(); } print "\n \n\n"; # BY DAY OF MONTH #--------------------------------------------------------------------- if ($ShowDaysOfMonthStats) { if ($Debug) { debug("ShowDaysOfMonthStats",2); } print "$Center 
    \n"; my $title="$Message[138]"; &tab_head("$title",0,0,'daysofmonth'); print ""; print "\n"; print "
    \n"; my $NewLinkParams=${QueryString}; $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; $NewLinkParams =~ s/(^|&|&)year=[^&]*//i; $NewLinkParams =~ s/(^|&|&)month=[^&]*//i; $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; $NewLinkParams =~ s/(&|&)+/&/i; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } my $NewLinkTarget=''; if ($FrameName eq 'mainright') { $NewLinkTarget=" target=\"_parent\""; } $average_nb=$average_u=$average_v=$average_p=$average_h=$average_k=0; $total_u=$total_v=$total_p=$total_h=$total_k=0; # Define total and max $max_v=$max_h=$max_k=0; # Start from 0 because can be lower than 1 foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next $total_v+=$DayVisits{$year.$month.$day}||0; $total_p+=$DayPages{$year.$month.$day}||0; $total_h+=$DayHits{$year.$month.$day}||0; $total_k+=$DayBytes{$year.$month.$day}||0; if (($DayVisits{$year.$month.$day}||0) > $max_v) { $max_v=$DayVisits{$year.$month.$day}; } #if (($DayPages{$year.$month.$day}||0) > $max_p) { $max_p=$DayPages{$year.$month.$day}; } if (($DayHits{$year.$month.$day}||0) > $max_h) { $max_h=$DayHits{$year.$month.$day}; } if (($DayBytes{$year.$month.$day}||0) > $max_k) { $max_k=$DayBytes{$year.$month.$day}; } } # Define average foreach my $daycursor ($firstdaytocountaverage..$lastdaytocountaverage) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next $average_nb++; # Increase number of day used to count $average_v+=($DayVisits{$daycursor}||0); $average_p+=($DayPages{$daycursor}||0); $average_h+=($DayHits{$daycursor}||0); $average_k+=($DayBytes{$daycursor}||0); } if ($average_nb) { $average_v=$average_v/$average_nb; $average_p=$average_p/$average_nb; $average_h=$average_h/$average_nb; $average_k=$average_k/$average_nb; if ($average_v > $max_v) { $max_v=$average_v; } #if ($average_p > $max_p) { $max_p=$average_p; } if ($average_h > $max_h) { $max_h=$average_h; } if ($average_k > $max_k) { $max_k=$average_k; } } else { $average_v="?"; $average_p="?"; $average_h="?"; $average_k="?"; } # Show bars for day if ($PluginsLoaded{'ShowGraph'}{'graphapplet'}) { my @blocklabel=(); foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next my $bold=($day==$nowday && $month==$nowmonth && $year==$nowyear?':':''); my $weekend=(DayOfWeek($day,$month,$year)=~/[06]/?'!':''); push @blocklabel,"$day§$MonthNumLib{$month}$weekend$bold"; } my @vallabel=("$Message[10]","$Message[56]","$Message[57]","$Message[75]"); my @valcolor=("$color_v","$color_p","$color_h","$color_k"); my @valmax=($max_v,$max_h,$max_h,$max_k); my @valtotal=($total_v,$total_p,$total_h,$total_k); $average_v=sprintf("%.2f",$average_v); $average_p=sprintf("%.2f",$average_p); $average_h=sprintf("%.2f",$average_h); $average_k=(int($average_k)?Format_Bytes(sprintf("%.2f",$average_k)):"0.00"); my @valaverage=($average_v,$average_p,$average_h,$average_k); my @valdata=(); my $xx=0; foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next $valdata[$xx++]=$DayVisits{$year.$month.$day}||0; $valdata[$xx++]=$DayPages{$year.$month.$day}||0; $valdata[$xx++]=$DayHits{$year.$month.$day}||0; $valdata[$xx++]=$DayBytes{$year.$month.$day}||0; } ShowGraph_graphapplet("$title","daysofmonth",$ShowDaysOfMonthStats,\@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal,\@valaverage,\@valdata); } else { print "\n"; print "\n"; foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next my $bredde_v=0; my $bredde_p=0; my $bredde_h=0; my $bredde_k=0; if ($max_v > 0) { $bredde_v=int(($DayVisits{$year.$month.$day}||0)/$max_v*$BarHeight)+1; } if ($max_h > 0) { $bredde_p=int(($DayPages{$year.$month.$day}||0)/$max_h*$BarHeight)+1; } if ($max_h > 0) { $bredde_h=int(($DayHits{$year.$month.$day}||0)/$max_h*$BarHeight)+1; } if ($max_k > 0) { $bredde_k=int(($DayBytes{$year.$month.$day}||0)/$max_k*$BarHeight)+1; } print "\n"; } print ""; # Show average value cell print "\n"; print "\n"; # Show lib for day print ""; foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next my $dayofweekcursor=DayOfWeek($day,$month,$year); print ""; print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'':''); print "$day
    ".$MonthNumLib{$month}.""; print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'
    ':''); print "\n"; } print "
    "; print "\n"; print "\n"; print "
    "; if ($ShowDaysOfMonthStats =~ /V/i) { print ""; } if ($ShowDaysOfMonthStats =~ /P/i) { print ""; } if ($ShowDaysOfMonthStats =~ /H/i) { print ""; } if ($ShowDaysOfMonthStats =~ /B/i) { print ""; } print " "; my $bredde_v=0; my $bredde_p=0; my $bredde_h=0; my $bredde_k=0; if ($max_v > 0) { $bredde_v=int($average_v/$max_v*$BarHeight)+1; } if ($max_h > 0) { $bredde_p=int($average_p/$max_h*$BarHeight)+1; } if ($max_h > 0) { $bredde_h=int($average_h/$max_h*$BarHeight)+1; } if ($max_k > 0) { $bredde_k=int($average_k/$max_k*$BarHeight)+1; } $average_v=sprintf("%.2f",$average_v); $average_p=sprintf("%.2f",$average_p); $average_h=sprintf("%.2f",$average_h); $average_k=(int($average_k)?Format_Bytes(sprintf("%.2f",$average_k)):"0.00"); if ($ShowDaysOfMonthStats =~ /V/i) { print ""; } if ($ShowDaysOfMonthStats =~ /P/i) { print ""; } if ($ShowDaysOfMonthStats =~ /H/i) { print ""; } if ($ShowDaysOfMonthStats =~ /B/i) { print ""; } print "
     $Message[96]
    \n"; } print "
    \n"; # Show data array for days if ($AddDataArrayShowDaysOfMonthStats) { print "\n"; print ""; if ($ShowDaysOfMonthStats =~ /V/i) { print ""; } if ($ShowDaysOfMonthStats =~ /P/i) { print ""; } if ($ShowDaysOfMonthStats =~ /H/i) { print ""; } if ($ShowDaysOfMonthStats =~ /B/i) { print ""; } print ""; foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next my $dayofweekcursor=DayOfWeek($day,$month,$year); print ""; print ""; if ($ShowDaysOfMonthStats =~ /V/i) { print ""; } if ($ShowDaysOfMonthStats =~ /P/i) { print ""; } if ($ShowDaysOfMonthStats =~ /H/i) { print ""; } if ($ShowDaysOfMonthStats =~ /B/i) { print ""; } print "\n"; } # Average row print ""; if ($ShowDaysOfMonthStats =~ /V/i) { print ""; } if ($ShowDaysOfMonthStats =~ /P/i) { print ""; } if ($ShowDaysOfMonthStats =~ /H/i) { print ""; } if ($ShowDaysOfMonthStats =~ /B/i) { print ""; } print "\n"; # Total row print ""; if ($ShowDaysOfMonthStats =~ /V/i) { print ""; } if ($ShowDaysOfMonthStats =~ /P/i) { print ""; } if ($ShowDaysOfMonthStats =~ /H/i) { print ""; } if ($ShowDaysOfMonthStats =~ /B/i) { print ""; } print "\n"; print "
    $Message[4]$Message[10]$Message[56]$Message[57]$Message[75]
    ".(! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'':''); print Format_Date("$year$month$day"."000000",2); print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'':''); print "",$DayVisits{$year.$month.$day}?$DayVisits{$year.$month.$day}:"0","",$DayPages{$year.$month.$day}?$DayPages{$year.$month.$day}:"0","",$DayHits{$year.$month.$day}?$DayHits{$year.$month.$day}:"0","",Format_Bytes(int($DayBytes{$year.$month.$day}||0)),"
    $Message[96]$average_v$average_p$average_h$average_k
    $Message[102]$total_v$total_p$total_h".Format_Bytes($total_k)."
    \n
    "; } print "
    \n"; print "\n"; &tab_end(); } # BY DAY OF WEEK #------------------------- if ($ShowDaysOfWeekStats) { if ($Debug) { debug("ShowDaysOfWeekStats",2); } print "$Center 
    \n"; my $title="$Message[91]"; &tab_head("$title",18,0,'daysofweek'); print ""; print ""; print "
    \n"; $max_h=$max_k=0; # Start from 0 because can be lower than 1 # Get average value for day of week my @avg_dayofweek_nb=(); my @avg_dayofweek_p=(); my @avg_dayofweek_h=(); my @avg_dayofweek_k=(); foreach my $daycursor ($firstdaytocountaverage..$lastdaytocountaverage) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next my $dayofweekcursor=DayOfWeek($day,$month,$year); $avg_dayofweek_nb[$dayofweekcursor]++; # Increase number of day used to count for this day of week $avg_dayofweek_p[$dayofweekcursor]+=($DayPages{$daycursor}||0); $avg_dayofweek_h[$dayofweekcursor]+=($DayHits{$daycursor}||0); $avg_dayofweek_k[$dayofweekcursor]+=($DayBytes{$daycursor}||0); } for (@DOWIndex) { if ($avg_dayofweek_nb[$_]) { $avg_dayofweek_p[$_]=$avg_dayofweek_p[$_]/$avg_dayofweek_nb[$_]; $avg_dayofweek_h[$_]=$avg_dayofweek_h[$_]/$avg_dayofweek_nb[$_]; $avg_dayofweek_k[$_]=$avg_dayofweek_k[$_]/$avg_dayofweek_nb[$_]; #if ($avg_dayofweek_p[$_] > $max_p) { $max_p = $avg_dayofweek_p[$_]; } if ($avg_dayofweek_h[$_] > $max_h) { $max_h = $avg_dayofweek_h[$_]; } if ($avg_dayofweek_k[$_] > $max_k) { $max_k = $avg_dayofweek_k[$_]; } } else { $avg_dayofweek_p[$_]="?"; $avg_dayofweek_h[$_]="?"; $avg_dayofweek_k[$_]="?"; } } # Show bars for days of week if ($PluginsLoaded{'ShowGraph'}{'graphapplet'}) { my @blocklabel=(); for (@DOWIndex) { push @blocklabel,($Message[$_+84].($_=~/[06]/?"!":"")); } my @vallabel=("$Message[56]","$Message[57]","$Message[75]"); my @valcolor=("$color_p","$color_h","$color_k"); my @valmax=(int($max_h),int($max_h),int($max_k)); my @valtotal=($total_p,$total_h,$total_k); $average_p=sprintf("%.2f",$average_p); $average_h=sprintf("%.2f",$average_h); $average_k=(int($average_k)?Format_Bytes(sprintf("%.2f",$average_k)):"0.00"); my @valaverage=($average_p,$average_h,$average_k); my @valdata=(); my $xx=0; for (@DOWIndex) { $valdata[$xx++]=$avg_dayofweek_p[$_]||0; $valdata[$xx++]=$avg_dayofweek_h[$_]||0; $valdata[$xx++]=$avg_dayofweek_k[$_]||0; # Round to be ready to show array $avg_dayofweek_p[$_]=sprintf("%.2f",$avg_dayofweek_p[$_]); $avg_dayofweek_h[$_]=sprintf("%.2f",$avg_dayofweek_h[$_]); $avg_dayofweek_k[$_]=sprintf("%.2f",$avg_dayofweek_k[$_]); # Remove decimal part that are .0 if ($avg_dayofweek_p[$_] == int($avg_dayofweek_p[$_])) { $avg_dayofweek_p[$_]=int($avg_dayofweek_p[$_]); } if ($avg_dayofweek_h[$_] == int($avg_dayofweek_h[$_])) { $avg_dayofweek_h[$_]=int($avg_dayofweek_h[$_]); } } ShowGraph_graphapplet("$title","daysofweek",$ShowDaysOfWeekStats,\@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal,\@valaverage,\@valdata); } else { print "\n"; print "\n"; for (@DOWIndex) { my $bredde_p=0; my $bredde_h=0; my $bredde_k=0; if ($max_h > 0) { $bredde_p=int(($avg_dayofweek_p[$_]ne'?'?$avg_dayofweek_p[$_]:0)/$max_h*$BarHeight)+1; } if ($max_h > 0) { $bredde_h=int(($avg_dayofweek_h[$_]ne'?'?$avg_dayofweek_h[$_]:0)/$max_h*$BarHeight)+1; } if ($max_k > 0) { $bredde_k=int(($avg_dayofweek_k[$_]ne'?'?$avg_dayofweek_k[$_]:0)/$max_k*$BarHeight)+1; } $avg_dayofweek_p[$_]=sprintf("%.2f",($avg_dayofweek_p[$_]ne'?'?$avg_dayofweek_p[$_]:0)); $avg_dayofweek_h[$_]=sprintf("%.2f",($avg_dayofweek_h[$_]ne'?'?$avg_dayofweek_h[$_]:0)); $avg_dayofweek_k[$_]=sprintf("%.2f",($avg_dayofweek_k[$_]ne'?'?$avg_dayofweek_k[$_]:0)); # Remove decimal part that are .0 if ($avg_dayofweek_p[$_] == int($avg_dayofweek_p[$_])) { $avg_dayofweek_p[$_]=int($avg_dayofweek_p[$_]); } if ($avg_dayofweek_h[$_] == int($avg_dayofweek_h[$_])) { $avg_dayofweek_h[$_]=int($avg_dayofweek_h[$_]); } print "\n"; } print "\n"; print "\n"; for (@DOWIndex) { print "".(! $StaticLinks && $_==($nowwday-1) && $MonthRequired==$nowmonth && $YearRequired==$nowyear?'':''); print $Message[$_+84]; print (! $StaticLinks && $_==($nowwday-1) && $MonthRequired==$nowmonth && $YearRequired==$nowyear?'':''); print ""; } print "\n
    "; if ($ShowDaysOfWeekStats =~ /P/i) { print ""; } if ($ShowDaysOfWeekStats =~ /H/i) { print ""; } if ($ShowDaysOfWeekStats =~ /B/i) { print ""; } print "
    \n"; } print "
    \n"; # Show data array for days of week if ($AddDataArrayShowDaysOfWeekStats) { print "\n"; print ""; if ($ShowDaysOfWeekStats =~ /P/i) { print ""; } if ($ShowDaysOfWeekStats =~ /H/i) { print ""; } if ($ShowDaysOfWeekStats =~ /B/i) { print ""; } for (@DOWIndex) { print ""; print ""; if ($ShowDaysOfWeekStats =~ /P/i) { print ""; } if ($ShowDaysOfWeekStats =~ /H/i) { print ""; } if ($ShowDaysOfWeekStats =~ /B/i) { print ""; } print "\n"; } print "
    $Message[4]$Message[56]$Message[57]$Message[75]
    ".(! $StaticLinks && $_==($nowwday-1) && $MonthRequired==$nowmonth && $YearRequired==$nowyear?'':''); print $Message[$_+84]; print (! $StaticLinks && $_==($nowwday-1) && $MonthRequired==$nowmonth && $YearRequired==$nowyear?'':''); print "",$avg_dayofweek_p[$_],"",$avg_dayofweek_h[$_],"",Format_Bytes($avg_dayofweek_k[$_]),"
    \n
    \n"; } print "
    "; print "\n"; &tab_end(); } # BY HOUR #---------------------------- if ($ShowHoursStats) { if ($Debug) { debug("ShowHoursStats",2); } print "$Center 
    \n"; my $title="$Message[20]"; if ($PluginsLoaded{'GetTimeZoneTitle'}{'timezone'}) { $title.=" (GMT ".(GetTimeZoneTitle_timezone()>=0?"+":"").int(GetTimeZoneTitle_timezone()).")"; } &tab_head("$title",19,0,'hours'); print "\n"; print "
    \n"; $max_h=$max_k=1; for (my $ix=0; $ix<=23; $ix++) { #if ($_time_p[$ix]>$max_p) { $max_p=$_time_p[$ix]; } if ($_time_h[$ix]>$max_h) { $max_h=$_time_h[$ix]; } if ($_time_k[$ix]>$max_k) { $max_k=$_time_k[$ix]; } } # Show bars for hour if ($PluginsLoaded{'ShowGraph'}{'graphapplet'}) { my @blocklabel=(0..23); my @vallabel=("$Message[56]","$Message[57]","$Message[75]"); my @valcolor=("$color_p","$color_h","$color_k"); my @valmax=(int($max_h),int($max_h),int($max_k)); my @valtotal=($total_p,$total_h,$total_k); my @valaverage=($average_p,$average_h,$average_k); my @valdata=(); my $xx=0; for (0..23) { $valdata[$xx++]=$_time_p[$_]||0; $valdata[$xx++]=$_time_h[$_]||0; $valdata[$xx++]=$_time_k[$_]||0; } ShowGraph_graphapplet("$title","hours",$ShowHoursStats,\@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal,\@valaverage,\@valdata); } else { print "\n"; print "\n"; for (my $ix=0; $ix<=23; $ix++) { my $bredde_p=0;my $bredde_h=0;my $bredde_k=0; if ($max_h > 0) { $bredde_p=int($BarHeight*$_time_p[$ix]/$max_h)+1; } if ($max_h > 0) { $bredde_h=int($BarHeight*$_time_h[$ix]/$max_h)+1; } if ($max_k > 0) { $bredde_k=int($BarHeight*$_time_k[$ix]/$max_k)+1; } print "\n"; } print "\n"; # Show hour lib print ""; for (my $ix=0; $ix<=23; $ix++) { print "\n"; # width=19 instead of 18 to avoid a MacOS browser bug. } print "\n"; # Show clock icon print "\n"; for (my $ix=0; $ix<=23; $ix++) { my $hrs=($ix>=12?$ix-12:$ix); my $hre=($ix>=12?$ix-11:$ix+1); my $apm=($ix>=12?"pm":"am"); print "\n"; } print "\n"; print "
    "; if ($ShowHoursStats =~ /P/i) { print ""; } if ($ShowHoursStats =~ /H/i) { print ""; } if ($ShowHoursStats =~ /B/i) { print ""; } print "
    $ix
    \"$hrs:00
    \n"; } print "
    \n"; # Show data array for hours if ($AddDataArrayShowHoursStats) { print "\n"; print ""; print ""; print "
    \n"; print "\n"; print ""; if ($ShowHoursStats =~ /P/i) { print ""; } if ($ShowHoursStats =~ /H/i) { print ""; } if ($ShowHoursStats =~ /B/i) { print ""; } print ""; for (my $ix=0; $ix<=11; $ix++) { my $monthix=($ix<10?"0$ix":"$ix"); print ""; print ""; if ($ShowHoursStats =~ /P/i) { print ""; } if ($ShowHoursStats =~ /H/i) { print ""; } if ($ShowHoursStats =~ /B/i) { print ""; } print "\n"; } print "
    $Message[20]$Message[56]$Message[57]$Message[75]
    $monthix",$_time_p[$monthix]?$_time_p[$monthix]:"0","",$_time_h[$monthix]?$_time_h[$monthix]:"0","",Format_Bytes(int($_time_k[$monthix])),"
    \n"; print "
     
    \n"; print "\n"; print ""; if ($ShowHoursStats =~ /P/i) { print ""; } if ($ShowHoursStats =~ /H/i) { print ""; } if ($ShowHoursStats =~ /B/i) { print ""; } print "\n"; for (my $ix=12; $ix<=23; $ix++) { my $monthix=($ix<10?"0$ix":"$ix"); print ""; print ""; if ($ShowHoursStats =~ /P/i) { print ""; } if ($ShowHoursStats =~ /H/i) { print ""; } if ($ShowHoursStats =~ /B/i) { print ""; } print "\n"; } print "
    $Message[20]$Message[56]$Message[57]$Message[75]
    $monthix",$_time_p[$monthix]?$_time_p[$monthix]:"0","",$_time_h[$monthix]?$_time_h[$monthix]:"0","",Format_Bytes(int($_time_k[$monthix])),"
    \n"; print "
    \n"; print "
    \n"; } print "
    \n"; &tab_end(); } print "\n \n\n"; # BY COUNTRY/DOMAIN #--------------------------- if ($ShowDomainsStats) { if ($Debug) { debug("ShowDomainsStats",2); } print "$Center 
    \n"; my $title="$Message[25] ($Message[77] $MaxNbOf{'Domain'})   -   $Message[80]"; &tab_head("$title",19,0,'countries'); print " $Message[17]"; ## to add unique visitors and number of visits by calculation of average of the relation with total ## pages and total hits, and total visits and total unique ## by Josep Ruano @ CAPSiDE if ($ShowDomainsStats =~ /U/i) { print "$Message[11]"; } if ($ShowDomainsStats =~ /V/i) { print "$Message[10]"; } if ($ShowDomainsStats =~ /P/i) { print "$Message[56]"; } if ($ShowDomainsStats =~ /H/i) { print "$Message[57]"; } if ($ShowDomainsStats =~ /B/i) { print "$Message[75]"; } print " "; print "\n"; $total_u=$total_v=$total_p=$total_h=$total_k=0; $max_h=1; foreach (values %_domener_h) { if ($_ > $max_h) { $max_h = $_; } } $max_k=1; foreach (values %_domener_k) { if ($_ > $max_k) { $max_k = $_; } } my $count=0; &BuildKeyList($MaxNbOf{'Domain'},$MinHit{'Domain'},\%_domener_h,\%_domener_p); foreach my $key (@keylist) { my ($_domener_u, $_domener_v); my $bredde_p=0;my $bredde_h=0;my $bredde_k=0;my $bredde_u=0; my $bredde_v=0; if ($max_h > 0) { $bredde_p=int($BarWidth*$_domener_p{$key}/$max_h)+1; } # use max_h to enable to compare pages with hits if ($_domener_p{$key} && $bredde_p==1) { $bredde_p=2; } if ($max_h > 0) { $bredde_h=int($BarWidth*$_domener_h{$key}/$max_h)+1; } if ($_domener_h{$key} && $bredde_h==1) { $bredde_h=2; } if ($max_k > 0) { $bredde_k=int($BarWidth*($_domener_k{$key}||0)/$max_k)+1; } if ($_domener_k{$key} && $bredde_k==1) { $bredde_k=2; } my $newkey=lc($key); if ($newkey eq 'ip' || ! $DomainsHashIDLib{$newkey}) { print "$Message[0]$newkey"; } else { print "$DomainsHashIDLib{$newkey}$newkey"; } ## to add unique visitors and number of visits, by Josep Ruano @ CAPSiDE if ($ShowDomainsStats =~ /U/i) { $_domener_u = ($_domener_p{$key} ? $_domener_p{$key}/$TotalPages : 0); $_domener_u += ($_domener_h{$key}/$TotalHits); $_domener_u = sprintf("%.0f", ($_domener_u * $TotalUnique) / 2); print "$_domener_u (" . sprintf("%.1f%", 100*$_domener_u/$TotalUnique) . ")"; } if ($ShowDomainsStats =~ /V/i) { $_domener_v = ($_domener_p{$key} ? $_domener_p{$key}/$TotalPages : 0); $_domener_v += ($_domener_h{$key}/$TotalHits); $_domener_v = sprintf("%.0f", ($_domener_v * $TotalVisits) / 2); print "$_domener_v (" . sprintf("%.1f%", 100*$_domener_v/$TotalVisits) . ")"; } if ($ShowDomainsStats =~ /P/i) { print "".($_domener_p{$key}?$_domener_p{$key}:' ').""; } if ($ShowDomainsStats =~ /H/i) { print "$_domener_h{$key}"; } if ($ShowDomainsStats =~ /B/i) { print "".Format_Bytes($_domener_k{$key}).""; } print ""; if ($ShowDomainsStats =~ /P/i) { print "
    \n"; } if ($ShowDomainsStats =~ /H/i) { print "
    \n"; } if ($ShowDomainsStats =~ /B/i) { print ""; } print ""; print "\n"; $total_u += $_domener_u; $total_v += $_domener_v; $total_p += $_domener_p{$key}; $total_h += $_domener_h{$key}; $total_k += $_domener_k{$key}||0; $count++; } my $rest_u = $TotalUnique - $total_u; my $rest_v = $TotalVisits - $total_v; $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_u > 0 || $rest_v > 0 || $rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other domains (known or not) print " $Message[2]"; if ($ShowDomainsStats =~ /U/i) { print "$rest_u"; } if ($ShowDomainsStats =~ /V/i) { print "$rest_v"; } if ($ShowDomainsStats =~ /P/i) { print "$rest_p"; } if ($ShowDomainsStats =~ /H/i) { print "$rest_h"; } if ($ShowDomainsStats =~ /B/i) { print "".Format_Bytes($rest_k).""; } print " "; print "\n"; } &tab_end(); } # BY HOST/VISITOR #-------------------------- if ($ShowHostsStats) { if ($Debug) { debug("ShowHostsStats",2); } print "$Center 
    \n"; my $title="$Message[81] ($Message[77] $MaxNbOf{'HostsShown'})   -   $Message[80]   -   $Message[9]   -   $Message[45]"; &tab_head("$title",19,0,'visitors'); print ""; print ""; if ($MonthRequired ne 'all') { print "$Message[81] : $TotalHostsKnown $Message[82], $TotalHostsUnknown $Message[1]
    $TotalUnique $Message[11]"; } else { print "$Message[81] : ".(scalar keys %_host_h).""; } &ShowHostInfo('__title__'); if ($ShowHostsStats =~ /P/i) { print "$Message[56]"; } if ($ShowHostsStats =~ /H/i) { print "$Message[57]"; } if ($ShowHostsStats =~ /B/i) { print "$Message[75]"; } if ($ShowHostsStats =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; &BuildKeyList($MaxNbOf{'HostsShown'},$MinHit{'Host'},\%_host_h,\%_host_p); foreach my $key (@keylist) { print ""; print "$key"; &ShowHostInfo($key); if ($ShowHostsStats =~ /P/i) { print ''.($_host_p{$key}||" ").''; } if ($ShowHostsStats =~ /H/i) { print "$_host_h{$key}"; } if ($ShowHostsStats =~ /B/i) { print ''.Format_Bytes($_host_k{$key}).''; } if ($ShowHostsStats =~ /L/i) { print ''.($_host_l{$key}?Format_Date($_host_l{$key},1):'-').''; } print "\n"; $total_p += $_host_p{$key}; $total_h += $_host_h{$key}; $total_k += $_host_k{$key}||0; $count++; } $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other visitors (known or not) print ""; print "$Message[2]"; &ShowHostInfo(''); if ($ShowHostsStats =~ /P/i) { print "$rest_p"; } if ($ShowHostsStats =~ /H/i) { print "$rest_h"; } if ($ShowHostsStats =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowHostsStats =~ /L/i) { print " "; } print "\n"; } &tab_end(); } # BY SENDER EMAIL #---------------------------- if ($ShowEMailSenders) { &ShowEmailSendersChart($NewLinkParams,$NewLinkTarget); } # BY RECEIVER EMAIL #---------------------------- if ($ShowEMailReceivers) { &ShowEmailReceiversChart($NewLinkParams,$NewLinkTarget); } # BY LOGIN #---------------------------- if ($ShowAuthenticatedUsers) { if ($Debug) { debug("ShowAuthenticatedUsers",2); } print "$Center 
    \n"; my $title="$Message[94] ($Message[77] $MaxNbOf{'LoginShown'})   -   $Message[80]"; if ($ShowAuthenticatedUsers =~ /L/i) { $title.="   -   $Message[9]"; } &tab_head("$title",19,0,'logins'); print "$Message[94] : ".(scalar keys %_login_h).""; &ShowUserInfo('__title__'); if ($ShowAuthenticatedUsers =~ /P/i) { print "$Message[56]"; } if ($ShowAuthenticatedUsers =~ /H/i) { print "$Message[57]"; } if ($ShowAuthenticatedUsers =~ /B/i) { print "$Message[75]"; } if ($ShowAuthenticatedUsers =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; $max_h=1; foreach (values %_login_h) { if ($_ > $max_h) { $max_h = $_; } } $max_k=1; foreach (values %_login_k) { if ($_ > $max_k) { $max_k = $_; } } my $count=0; &BuildKeyList($MaxNbOf{'LoginShown'},$MinHit{'Login'},\%_login_h,\%_login_p); foreach my $key (@keylist) { my $bredde_p=0;my $bredde_h=0;my $bredde_k=0; if ($max_h > 0) { $bredde_p=int($BarWidth*$_login_p{$key}/$max_h)+1; } # use max_h to enable to compare pages with hits if ($max_h > 0) { $bredde_h=int($BarWidth*$_login_h{$key}/$max_h)+1; } if ($max_k > 0) { $bredde_k=int($BarWidth*$_login_k{$key}/$max_k)+1; } print "$key"; &ShowUserInfo($key); if ($ShowAuthenticatedUsers =~ /P/i) { print "".($_login_p{$key}?$_login_p{$key}:" ").""; } if ($ShowAuthenticatedUsers =~ /H/i) { print "$_login_h{$key}"; } if ($ShowAuthenticatedUsers =~ /B/i) { print "".Format_Bytes($_login_k{$key}).""; } if ($ShowAuthenticatedUsers =~ /L/i) { print "".($_login_l{$key}?Format_Date($_login_l{$key},1):'-').""; } print "\n"; $total_p += $_login_p{$key}; $total_h += $_login_h{$key}; $total_k += $_login_k{$key}; $count++; } $rest_p=$TotalPages-$total_p; $rest_h=$TotalHits-$total_h; $rest_k=$TotalBytes-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other logins print "".($PageDir eq 'rtl'?"":"")."$Message[125]".($PageDir eq 'rtl'?"":"").""; &ShowUserInfo(''); if ($ShowAuthenticatedUsers =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } if ($ShowAuthenticatedUsers =~ /H/i) { print "$rest_h"; } if ($ShowAuthenticatedUsers =~ /B/i) { print "".Format_Bytes($rest_k).""; } if ($ShowAuthenticatedUsers =~ /L/i) { print " "; } print "\n"; } &tab_end(); } # BY ROBOTS #---------------------------- if ($ShowRobotsStats) { if ($Debug) { debug("ShowRobotStats",2); } print "$Center 
    \n"; &tab_head("$Message[53] ($Message[77] $MaxNbOf{'RobotShown'})   -   $Message[80]   -   $Message[9]",19,0,'robots'); print "".(scalar keys %_robot_h)." $Message[51]*"; if ($ShowRobotsStats =~ /H/i) { print "$Message[57]"; } if ($ShowRobotsStats =~ /B/i) { print "$Message[75]"; } if ($ShowRobotsStats =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=$total_r=0; my $count=0; &BuildKeyList($MaxNbOf{'RobotShown'},$MinHit{'Robot'},\%_robot_h,\%_robot_h); foreach my $key (@keylist) { print "".($PageDir eq 'rtl'?"":"").($RobotsHashIDLib{$key}?$RobotsHashIDLib{$key}:$key).($PageDir eq 'rtl'?"":"").""; if ($ShowRobotsStats =~ /H/i) { print "".($_robot_h{$key}-$_robot_r{$key}).($_robot_r{$key}?"+$_robot_r{$key}":"").""; } if ($ShowRobotsStats =~ /B/i) { print "".Format_Bytes($_robot_k{$key}).""; } if ($ShowRobotsStats =~ /L/i) { print "".($_robot_l{$key}?Format_Date($_robot_l{$key},1):'-').""; } print "\n"; #$total_p += $_robot_p{$key}; $total_h += $_robot_h{$key}; $total_k += $_robot_k{$key}||0; $total_r += $_robot_r{$key}||0; $count++; } # For bots we need to count Totals my $TotalPagesRobots = 0; #foreach (values %_robot_p) { $TotalPagesRobots+=$_; } my $TotalHitsRobots = 0; foreach (values %_robot_h) { $TotalHitsRobots+=$_; } my $TotalBytesRobots = 0; foreach (values %_robot_k) { $TotalBytesRobots+=$_; } my $TotalRRobots = 0; foreach (values %_robot_r) { $TotalRRobots+=$_; } $rest_p=0; #$rest_p=$TotalPagesRobots-$total_p; $rest_h=$TotalHitsRobots-$total_h; $rest_k=$TotalBytesRobots-$total_k; $rest_r=$TotalRRobots-$total_r; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0 || $rest_r > 0) { # All other robots print "$Message[2]"; if ($ShowRobotsStats =~ /H/i) { print "".($rest_h-$rest_r).($rest_r?"+$rest_r":"").""; } if ($ShowRobotsStats =~ /B/i) { print "".(Format_Bytes($rest_k)).""; } if ($ShowRobotsStats =~ /L/i) { print " "; } print "\n"; } &tab_end("* $Message[156]".($TotalRRobots?" $Message[157]":"")); } # BY WORMS #---------------------------- if ($ShowWormsStats) { if ($Debug) { debug("ShowWormsStats",2); } print "$Center 
    \n"; &tab_head("$Message[163] ($Message[77] $MaxNbOf{'WormsShown'})",19,0,'worms'); print ""; print "".(scalar keys %_worm_h)." $Message[164]*"; print "$Message[167]"; if ($ShowWormsStats =~ /H/i) { print "$Message[57]"; } if ($ShowWormsStats =~ /B/i) { print "$Message[75]"; } if ($ShowWormsStats =~ /L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; my $count=0; &BuildKeyList($MaxNbOf{'WormsShown'},$MinHit{'Worm'},\%_worm_h,\%_worm_h); foreach my $key (@keylist) { print ""; print "".($PageDir eq 'rtl'?"":"").($WormsHashLib{$key}?$WormsHashLib{$key}:$key).($PageDir eq 'rtl'?"":"").""; print "".($PageDir eq 'rtl'?"":"").($WormsHashTarget{$key}?$WormsHashTarget{$key}:$key).($PageDir eq 'rtl'?"":"").""; if ($ShowWormsStats =~ /H/i) { print "".$_worm_h{$key}.""; } if ($ShowWormsStats =~ /B/i) { print "".Format_Bytes($_worm_k{$key}).""; } if ($ShowWormsStats =~ /L/i) { print "".($_worm_l{$key}?Format_Date($_worm_l{$key},1):'-').""; } print "\n"; #$total_p += $_worm_p{$key}; $total_h += $_worm_h{$key}; $total_k += $_worm_k{$key}||0; $count++; } # For worms we need to count Totals my $TotalPagesWorms = 0; #foreach (values %_worm_p) { $TotalPagesWorms+=$_; } my $TotalHitsWorms = 0; foreach (values %_worm_h) { $TotalHitsWorms+=$_; } my $TotalBytesWorms = 0; foreach (values %_worm_k) { $TotalBytesWorms+=$_; } $rest_p=0; #$rest_p=$TotalPagesRobots-$total_p; $rest_h=$TotalHitsWorms-$total_h; $rest_k=$TotalBytesWorms-$total_k; if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other worms print ""; print "$Message[2]"; print "-"; if ($ShowWormsStats =~ /H/i) { print "".($rest_h).""; } if ($ShowWormsStats =~ /B/i) { print "".(Format_Bytes($rest_k)).""; } if ($ShowWormsStats =~ /L/i) { print " "; } print "\n"; } &tab_end("* $Message[158]"); } print "\n \n\n"; # BY SESSION #---------------------------- if ($ShowSessionsStats) { if ($Debug) { debug("ShowSessionsStats",2); } print "$Center 
    \n"; my $title="$Message[117]"; &tab_head($title,19,0,'sessions'); my $Totals=0; foreach (@SessionsRange) { $average_s+=($_session{$_}||0)*$SessionsAverage{$_}; $Totals+=$_session{$_}||0; } if ($Totals) { $average_s=int($average_s/$Totals); } else { $average_s='?'; } print "$Message[10]: $TotalVisits - $Message[96]: $average_s s$Message[10]$Message[15]\n"; $average_s=0; $total_s=0; my $count=0; foreach my $key (@SessionsRange) { my $p=0; if ($TotalVisits) { $p=int($_session{$key}/$TotalVisits*1000)/10; } $total_s+=$_session{$key}||0; print "$key"; print "".($_session{$key}?$_session{$key}:" ").""; print "".($_session{$key}?"$p %":" ").""; print "\n"; $count++; } $rest_s=$TotalVisits-$total_s; if ($rest_s > 0) { # All others sessions my $p=0; if ($TotalVisits) { $p=int($rest_s/$TotalVisits*1000)/10; } print "$Message[0]"; print "$rest_s"; print "".($rest_s?"$p %":" ").""; print "\n"; } &tab_end(); } # BY FILE TYPE #------------------------- if ($ShowFileTypesStats) { if ($Debug) { debug("ShowFileTypesStatsCompressionStats",2); } print "$Center 
    \n"; my $Totalh=0; foreach (keys %_filetypes_h) { $Totalh+=$_filetypes_h{$_}; } my $Totalk=0; foreach (keys %_filetypes_k) { $Totalk+=$_filetypes_k{$_}; } my $title="$Message[73]"; if ($ShowFileTypesStats =~ /C/i) { $title.=" - $Message[98]"; } &tab_head("$title",19,0,'filetypes'); print "$Message[73]"; if ($ShowFileTypesStats =~ /H/i) { print "$Message[57]$Message[15]"; } if ($ShowFileTypesStats =~ /B/i) { print "$Message[75]$Message[15]"; } if ($ShowFileTypesStats =~ /C/i) { print "$Message[100]$Message[101]$Message[99]"; } print "\n"; my $total_con=0; my $total_cre=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,1,\%_filetypes_h,\%_filetypes_h); foreach my $key (@keylist) { my $p_h=' '; my $p_k=' '; if ($Totalh) { $p_h=int($_filetypes_h{$key}/$Totalh*1000)/10; $p_h="$p_h %"; } if ($Totalk) { $p_k=int($_filetypes_k{$key}/$Totalk*1000)/10; $p_k="$p_k %"; } if ($key eq 'Unknown') { print "$Message[0]"; } else { my $nameicon=$MimeHashIcon{$key}||"notavailable"; my $nametype=$MimeHashLib{$MimeHashFamily{$key}||""}||" "; print "$key"; print "$nametype"; } if ($ShowFileTypesStats =~ /H/i) { print "$_filetypes_h{$key}$p_h"; } if ($ShowFileTypesStats =~ /B/i) { print ''.Format_Bytes($_filetypes_k{$key})."$p_k"; } if ($ShowFileTypesStats =~ /C/i) { if ($_filetypes_gz_in{$key}) { my $percent=int(100*(1-$_filetypes_gz_out{$key}/$_filetypes_gz_in{$key})); printf("%s%s%s (%s%)",Format_Bytes($_filetypes_gz_in{$key}),Format_Bytes($_filetypes_gz_out{$key}),Format_Bytes($_filetypes_gz_in{$key}-$_filetypes_gz_out{$key}),$percent); $total_con+=$_filetypes_gz_in{$key}; $total_cre+=$_filetypes_gz_out{$key}; } else { print "   "; } } print "\n"; $count++; } # Add total (only usefull if compression is enabled) if ($ShowFileTypesStats =~ /C/i) { my $colspan=3; if ($ShowFileTypesStats =~ /H/i) { $colspan+=2; } if ($ShowFileTypesStats =~ /B/i) { $colspan+=2; } print ""; print "$Message[98]"; if ($ShowFileTypesStats =~ /C/i) { if ($total_con) { my $percent=int(100*(1-$total_cre/$total_con)); printf("%s%s%s (%s%)",Format_Bytes($total_con),Format_Bytes($total_cre),Format_Bytes($total_con-$total_cre),$percent); } else { print "   "; } } print "\n"; } &tab_end(); } # BY FILE SIZE #------------------------- if ($ShowFileSizesStats) { } # BY FILE/URL #------------------------- if ($ShowPagesStats) { if ($Debug) { debug("ShowPagesStats (MaxNbOf{'PageShown'}=$MaxNbOf{'PageShown'} TotalDifferentPages=$TotalDifferentPages)",2); } print "$Center   
    \n"; my $title="$Message[19] ($Message[77] $MaxNbOf{'PageShown'})   -   $Message[80]"; if ($ShowPagesStats =~ /E/i) { $title.="   -   $Message[104]"; } if ($ShowPagesStats =~ /X/i) { $title.="   -   $Message[116]"; } &tab_head("$title",19,0,'urls'); print "$TotalDifferentPages $Message[28]"; if ($ShowPagesStats =~ /P/i && $LogType ne 'F') { print "$Message[29]"; } if ($ShowPagesStats =~ /[PH]/i && $LogType eq 'F') { print "$Message[57]"; } if ($ShowPagesStats =~ /B/i) { print "$Message[106]"; } if ($ShowPagesStats =~ /E/i) { print "$Message[104]"; } if ($ShowPagesStats =~ /X/i) { print "$Message[116]"; } # Call to plugins' function ShowPagesAddField foreach my $pluginname (keys %{$PluginsLoaded{'ShowPagesAddField'}}) { # my $function="ShowPagesAddField_$pluginname('title')"; # eval("$function"); my $function="ShowPagesAddField_$pluginname"; &$function('title'); } print " \n"; $total_p=$total_e=$total_x=$total_k=0; $max_p=1; $max_k=1; my $count=0; &BuildKeyList($MaxNbOf{'PageShown'},$MinHit{'File'},\%_url_p,\%_url_p); foreach my $key (@keylist) { if ($_url_p{$key} > $max_p) { $max_p = $_url_p{$key}; } if ($_url_k{$key}/($_url_p{$key}||1) > $max_k) { $max_k = $_url_k{$key}/($_url_p{$key}||1); } } foreach my $key (@keylist) { print ""; &ShowURLInfo($key); print ""; my $bredde_p=0; my $bredde_e=0; my $bredde_x=0; my $bredde_k=0; if ($max_p > 0) { $bredde_p=int($BarWidth*($_url_p{$key}||0)/$max_p)+1; } if (($bredde_p==1) && $_url_p{$key}) { $bredde_p=2; } if ($max_p > 0) { $bredde_e=int($BarWidth*($_url_e{$key}||0)/$max_p)+1; } if (($bredde_e==1) && $_url_e{$key}) { $bredde_e=2; } if ($max_p > 0) { $bredde_x=int($BarWidth*($_url_x{$key}||0)/$max_p)+1; } if (($bredde_x==1) && $_url_x{$key}) { $bredde_x=2; } if ($max_k > 0) { $bredde_k=int($BarWidth*(($_url_k{$key}||0)/($_url_p{$key}||1))/$max_k)+1; } if (($bredde_k==1) && $_url_k{$key}) { $bredde_k=2; } if ($ShowPagesStats =~ /P/i && $LogType ne 'F') { print "$_url_p{$key}"; } if ($ShowPagesStats =~ /[PH]/i && $LogType eq 'F') { print "$_url_p{$key}"; } if ($ShowPagesStats =~ /B/i) { print "".($_url_k{$key}?Format_Bytes($_url_k{$key}/($_url_p{$key}||1)):" ").""; } if ($ShowPagesStats =~ /E/i) { print "".($_url_e{$key}?$_url_e{$key}:" ").""; } if ($ShowPagesStats =~ /X/i) { print "".($_url_x{$key}?$_url_x{$key}:" ").""; } # Call to plugins' function ShowPagesAddField foreach my $pluginname (keys %{$PluginsLoaded{'ShowPagesAddField'}}) { # my $function="ShowPagesAddField_$pluginname('$key')"; # eval("$function"); my $function="ShowPagesAddField_$pluginname"; &$function($key); } print ""; if ($ShowPagesStats =~ /P/i && $LogType ne 'F') { print "
    "; } if ($ShowPagesStats =~ /[PH]/i && $LogType eq 'F') { print "
    "; } if ($ShowPagesStats =~ /B/i) { print "
    "; } if ($ShowPagesStats =~ /E/i) { print "
    "; } if ($ShowPagesStats =~ /X/i) { print ""; } print "\n"; $total_p += $_url_p{$key}||0; $total_e += $_url_e{$key}||0; $total_x += $_url_x{$key}||0; $total_k += $_url_k{$key}||0; $count++; } $rest_p=$TotalPages-$total_p; $rest_e=$TotalEntries-$total_e; $rest_x=$TotalExits-$total_x; $rest_k=$TotalBytesPages-$total_k; if ($rest_p > 0 || $rest_k > 0 || $rest_e > 0 || $rest_x > 0) { # All other urls print "$Message[2]"; if ($ShowPagesStats =~ /P/i && $LogType ne 'F') { print "$rest_p"; } if ($ShowPagesStats =~ /[PH]/i && $LogType eq 'F') { print "$rest_p"; } if ($ShowPagesStats =~ /B/i) { print "".($rest_k?Format_Bytes($rest_k/($rest_p||1)):" ").""; } if ($ShowPagesStats =~ /E/i) { print "".($rest_e?$rest_e:" ").""; } if ($ShowPagesStats =~ /X/i) { print "".($rest_x?$rest_x:" ").""; } # Call to plugins' function ShowPagesAddField foreach my $pluginname (keys %{$PluginsLoaded{'ShowPagesAddField'}}) { # my $function="ShowPagesAddField_$pluginname('')"; # eval("$function"); my $function="ShowPagesAddField_$pluginname"; &$function(''); } print " \n"; } &tab_end(); } # BY OS #---------------------------- if ($ShowOSStats) { if ($Debug) { debug("ShowOSStats",2); } print "$Center 
    \n"; my $Totalh=0; my %new_os_h=(); OSLOOP: foreach my $key (keys %_os_h) { $Totalh+=$_os_h{$key}; foreach my $family (keys %OSFamily) { if ($key =~ /^$family/i) { $new_os_h{"${family}cumul"}+=$_os_h{$key}; next OSLOOP; } } $new_os_h{$key}+=$_os_h{$key}; } my $title="$Message[59] ($Message[77] $MaxNbOf{'OsShown'})   -   $Message[80]/$Message[58]   -   $Message[0]"; &tab_head("$title",19,0,'os'); print " $Message[59]$Message[57]$Message[15]\n"; $total_h=0; my $count=0; &BuildKeyList($MaxNbOf{'OsShown'},$MinHit{'Os'},\%new_os_h,\%new_os_h); foreach my $key (@keylist) { my $p=' '; if ($Totalh) { $p=int($new_os_h{$key}/$Totalh*1000)/10; $p="$p %"; } if ($key eq 'Unknown') { print "$Message[0]$_os_h{$key}$p\n"; } else { my $keywithoutcumul=$key; $keywithoutcumul =~ s/cumul$//i; my $libos=$OSHashLib{$keywithoutcumul}||$keywithoutcumul; my $nameicon=$keywithoutcumul; $nameicon =~ s/[^\w]//g; if ($OSFamily{$keywithoutcumul}) { $libos="".$OSFamily{$keywithoutcumul}.""; } print "$libos$new_os_h{$key}$p\n"; } $total_h += $new_os_h{$key}; $count++; } if ($Debug) { debug("Total real / shown : $Totalh / $total_h",2); } $rest_h=$Totalh-$total_h; if ($rest_h > 0) { my $p; if ($Totalh) { $p=int($rest_h/$Totalh*1000)/10; } print ""; print " "; print "$Message[2]$rest_h"; print "$p %\n"; } &tab_end(); } # BY BROWSER #---------------------------- if ($ShowBrowsersStats) { if ($Debug) { debug("ShowBrowsersStats",2); } print "$Center 
    \n"; my $Totalh=0; my %new_browser_h=(); BROWSERLOOP: foreach my $key (keys %_browser_h) { $Totalh+=$_browser_h{$key}; foreach my $family (keys %BrowsersFamily) { if ($key =~ /^$family/i) { $new_browser_h{"${family}cumul"}+=$_browser_h{$key}; next BROWSERLOOP; } } $new_browser_h{$key}+=$_browser_h{$key}; } my $title="$Message[21] ($Message[77] $MaxNbOf{'BrowsersShown'})   -   $Message[80]/$Message[58]   -   $Message[0]"; &tab_head("$title",19,0,'browsers'); print " $Message[21]$Message[111]$Message[57]$Message[15]\n"; $total_h=0; my $count=0; &BuildKeyList($MaxNbOf{'BrowsersShown'},$MinHit{'Browser'},\%new_browser_h,\%new_browser_h); foreach my $key (@keylist) { my $p=' '; if ($Totalh) { $p=int($new_browser_h{$key}/$Totalh*1000)/10; $p="$p %"; } if ($key eq 'Unknown') { print "$Message[0]?$_browser_h{$key}$p\n"; } else { my $keywithoutcumul=$key; $keywithoutcumul =~ s/cumul$//i; my $libbrowser=$BrowsersHashIDLib{$keywithoutcumul}||$keywithoutcumul; my $nameicon=$BrowsersHashIcon{$keywithoutcumul}||"notavailable"; if ($BrowsersFamily{$keywithoutcumul}) { $libbrowser="$libbrowser"; } print "".($PageDir eq 'rtl'?"":"")."$libbrowser".($PageDir eq 'rtl'?"":"")."".($BrowsersHereAreGrabbers{$key}?"$Message[112]":"$Message[113]")."$new_browser_h{$key}$p\n"; } $total_h += $new_browser_h{$key}; $count++; } if ($Debug) { debug("Total real / shown : $Totalh / $total_h",2); } $rest_h=$Totalh-$total_h; if ($rest_h > 0) { my $p; if ($Totalh) { $p=int($rest_h/$Totalh*1000)/10; } print ""; print " "; print "$Message[2] $rest_h"; print "$p %\n"; } &tab_end(); } # BY SCREEN SIZE #---------------------------- if ($ShowScreenSizeStats) { if ($Debug) { debug("ShowScreenSizeStats",2); } print "$Center 
    \n"; my $Totalh=0; foreach (keys %_screensize_h) { $Totalh+=$_screensize_h{$_}; } my $title="$Message[135] ($Message[77] $MaxNbOf{'ScreenSizesShown'})"; &tab_head("$title",0,0,'screensizes'); print "$Message[135]$Message[15]\n"; my $total_h=0; my $count=0; &BuildKeyList($MaxNbOf{'ScreenSizesShown'},$MinHit{'ScreenSize'},\%_screensize_h,\%_screensize_h); foreach my $key (@keylist) { my $p=' '; if ($Totalh) { $p=int($_screensize_h{$key}/$Totalh*1000)/10; $p="$p %"; } $total_h+=$_screensize_h{$key}||0; print ""; if ($key eq 'Unknown') { print "$Message[0]"; print "$p"; } else { my $screensize=$key; print "$screensize"; print "$p"; } print "\n"; $count++; } $rest_h=$Totalh-$total_h; if ($rest_h > 0) { # All others sessions my $p=0; if ($Totalh) { $p=int($rest_h/$Totalh*1000)/10; } print "$Message[2]"; print "".($rest_h?"$p %":" ").""; print "\n"; } &tab_end(); } print "\n \n\n"; # BY REFERENCE #--------------------------- if ($ShowOriginStats) { if ($Debug) { debug("ShowOriginStats",2); } print "$Center 
    \n"; my $Totalp=0; foreach (0..5) { $Totalp+=($_ != 4 || $IncludeInternalLinksInOriginSection)?$_from_p[$_]:0; } my $Totalh=0; foreach (0..5) { $Totalh+=($_ != 4 || $IncludeInternalLinksInOriginSection)?$_from_h[$_]:0; } &tab_head($Message[36],19,0,'referer'); my @p_p=(0,0,0,0,0,0); if ($Totalp > 0) { $p_p[0]=int($_from_p[0]/$Totalp*1000)/10; $p_p[1]=int($_from_p[1]/$Totalp*1000)/10; $p_p[2]=int($_from_p[2]/$Totalp*1000)/10; $p_p[3]=int($_from_p[3]/$Totalp*1000)/10; $p_p[4]=int($_from_p[4]/$Totalp*1000)/10; $p_p[5]=int($_from_p[5]/$Totalp*1000)/10; } my @p_h=(0,0,0,0,0,0); if ($Totalh > 0) { $p_h[0]=int($_from_h[0]/$Totalh*1000)/10; $p_h[1]=int($_from_h[1]/$Totalh*1000)/10; $p_h[2]=int($_from_h[2]/$Totalh*1000)/10; $p_h[3]=int($_from_h[3]/$Totalh*1000)/10; $p_h[4]=int($_from_h[4]/$Totalh*1000)/10; $p_h[5]=int($_from_h[5]/$Totalh*1000)/10; } print "$Message[37]"; if ($ShowOriginStats =~ /P/i) { print "$Message[56]$Message[15]"; } if ($ShowOriginStats =~ /H/i) { print "$Message[57]$Message[15]"; } print "\n"; #------- Referrals by direct address/bookmark/link in email/etc... print "$Message[38]"; if ($ShowOriginStats =~ /P/i) { print "".($_from_p[0]?$_from_p[0]:" ")."".($_from_p[0]?"$p_p[0] %":" ").""; } if ($ShowOriginStats =~ /H/i) { print "".($_from_h[0]?$_from_h[0]:" ")."".($_from_h[0]?"$p_h[0] %":" ").""; } print "\n"; #------- Referrals by search engines print "$Message[40] - $Message[80]
    \n"; if (scalar keys %_se_referrals_h) { print "\n"; $total_p=0; $total_h=0; my $count=0; &BuildKeyList($MaxNbOf{'RefererShown'},$MinHit{'Refer'},\%_se_referrals_h,((scalar keys %_se_referrals_p)?\%_se_referrals_p:\%_se_referrals_h)); foreach my $key (@keylist) { my $newreferer=$SearchEnginesHashLib{$key}||CleanXSS($key); print ""; print ""; print ""; print "\n"; $total_p += $_se_referrals_p{$key}; $total_h += $_se_referrals_h{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalSearchEnginesPages / $total_p - $TotalSearchEnginesHits / $total_h",2); } $rest_p=$TotalSearchEnginesPages-$total_p; $rest_h=$TotalSearchEnginesHits-$total_h; if ($rest_p > 0 || $rest_h > 0) { print ""; print ""; print ""; print "\n"; } print "
    - $newreferer".($_se_referrals_p{$key}?$_se_referrals_p{$key}:'0')."$_se_referrals_h{$key}
    - $Message[2]$rest_p$rest_h
    "; } print "\n"; if ($ShowOriginStats =~ /P/i) { print "".($_from_p[2]?$_from_p[2]:" ")."".($_from_p[2]?"$p_p[2] %":" ").""; } if ($ShowOriginStats =~ /H/i) { print "".($_from_h[2]?$_from_h[2]:" ")."".($_from_h[2]?"$p_h[2] %":" ").""; } print "\n"; #------- Referrals by external HTML link print "$Message[41] - $Message[80]
    \n"; if (scalar keys %_pagesrefs_h) { print "\n"; $total_p=0; $total_h=0; my $count=0; &BuildKeyList($MaxNbOf{'RefererShown'},$MinHit{'Refer'},\%_pagesrefs_h,((scalar keys %_pagesrefs_p)?\%_pagesrefs_p:\%_pagesrefs_h)); foreach my $key (@keylist) { print ""; print ""; print ""; print "\n"; $total_p += $_pagesrefs_p{$key}; $total_h += $_pagesrefs_h{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalRefererPages / $total_p - $TotalRefererHits / $total_h",2); } $rest_p=$TotalRefererPages-$total_p; $rest_h=$TotalRefererHits-$total_h; if ($rest_p > 0 || $rest_h > 0) { print ""; print ""; print ""; print "\n"; } print "
    - "; &ShowURLInfo($key); print "".($_pagesrefs_p{$key}?$_pagesrefs_p{$key}:'0')."$_pagesrefs_h{$key}
    - $Message[2]$rest_p$rest_h
    "; } print "\n"; if ($ShowOriginStats =~ /P/i) { print "".($_from_p[3]?$_from_p[3]:" ")."".($_from_p[3]?"$p_p[3] %":" ").""; } if ($ShowOriginStats =~ /H/i) { print "".($_from_h[3]?$_from_h[3]:" ")."".($_from_h[3]?"$p_h[3] %":" ").""; } print "\n"; #------- Referrals by internal HTML link if ($IncludeInternalLinksInOriginSection) { print "$Message[42]"; if ($ShowOriginStats =~ /P/i) { print "".($_from_p[4]?$_from_p[4]:" ")."".($_from_p[4]?"$p_p[4] %":" ").""; } if ($ShowOriginStats =~ /H/i) { print "".($_from_h[4]?$_from_h[4]:" ")."".($_from_h[4]?"$p_h[4] %":" ").""; } print "\n"; } #------- Referrals by news group #print "$Message[107]"; #if ($ShowOriginStats =~ /P/i) { print "".($_from_p[5]?$_from_p[5]:" ")."".($_from_p[5]?"$p_p[5] %":" ").""; } #if ($ShowOriginStats =~ /H/i) { print "".($_from_h[5]?$_from_h[5]:" ")."".($_from_h[5]?"$p_h[5] %":" ").""; } #print "\n"; #------- Unknown origin print "$Message[39]"; if ($ShowOriginStats =~ /P/i) { print "".($_from_p[1]?$_from_p[1]:" ")."".($_from_p[1]?"$p_p[1] %":" ").""; } if ($ShowOriginStats =~ /H/i) { print "".($_from_h[1]?$_from_h[1]:" ")."".($_from_h[1]?"$p_h[1] %":" ").""; } print "\n"; &tab_end(); # 0: Direct # 1: Unknown # 2: SE # 3: External link # 4: Internal link # 5: Newsgroup (deprecated) } print "\n \n\n"; # BY SEARCH KEYWORDS AND/OR KEYPHRASES #------------------------------------- if ($ShowKeyphrasesStats) { print "$Center "; } if ($ShowKeywordsStats) { print "$Center "; } if ($ShowKeyphrasesStats || $ShowKeywordsStats) { print "
    \n"; } if ($ShowKeyphrasesStats && $ShowKeywordsStats) { print ""; } if ($ShowKeyphrasesStats) { # By Keyphrases if ($ShowKeyphrasesStats && $ShowKeywordsStats) { print "\n"; $total_s=0; my $count=0; &BuildKeyList($MaxNbOf{'KeyphrasesShown'},$MinHit{'Keyphrase'},\%_keyphrases,\%_keyphrases); foreach my $key (@keylist) { my $mot; # Convert coded keywords (utf8,...) to be correctly reported in HTML page. if ($PluginsLoaded{'DecodeKey'}{'decodeutfkeys'}) { $mot=CleanXSS(DecodeKey_decodeutfkeys($key,$PageCode||'iso-8859-1')); } else { $mot = CleanXSS(DecodeEncodedString($key)); } my $p; if ($TotalKeyphrases) { $p=int($_keyphrases{$key}/$TotalKeyphrases*1000)/10; } print "\n"; $total_s += $_keyphrases{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalKeyphrases / $total_s",2); } $rest_s=$TotalKeyphrases-$total_s; if ($rest_s > 0) { my $p; if ($TotalKeyphrases) { $p=int($rest_s/$TotalKeyphrases*1000)/10; } print ""; print "\n"; } &tab_end(); if ($ShowKeyphrasesStats && $ShowKeywordsStats) { print "\n"; } } if ($ShowKeyphrasesStats && $ShowKeywordsStats) { print ""; } if ($ShowKeywordsStats) { # By Keywords if ($ShowKeyphrasesStats && $ShowKeywordsStats) { print "\n"; $total_s=0; my $count=0; &BuildKeyList($MaxNbOf{'KeywordsShown'},$MinHit{'Keyword'},\%_keywords,\%_keywords); foreach my $key (@keylist) { my $mot; # Convert coded keywords (utf8,...) to be correctly reported in HTML page. if ($PluginsLoaded{'DecodeKey'}{'decodeutfkeys'}) { $mot=CleanXSS(DecodeKey_decodeutfkeys($key,$PageCode||'iso-8859-1')); } else { $mot = CleanXSS(DecodeEncodedString($key)); } my $p; if ($TotalKeywords) { $p=int($_keywords{$key}/$TotalKeywords*1000)/10; } print "\n"; $total_s += $_keywords{$key}; $count++; } if ($Debug) { debug("Total real / shown : $TotalKeywords / $total_s",2); } $rest_s=$TotalKeywords-$total_s; if ($rest_s > 0) { my $p; if ($TotalKeywords) { $p=int($rest_s/$TotalKeywords*1000)/10; } print ""; print "\n"; } &tab_end(); if ($ShowKeyphrasesStats && $ShowKeywordsStats) { print "\n"; } } if ($ShowKeyphrasesStats && $ShowKeywordsStats) { print "
    \n"; } if ($Debug) { debug("ShowKeyphrasesStats",2); } &tab_head("$Message[120] ($Message[77] $MaxNbOf{'KeyphrasesShown'})
    $Message[80]",19,($ShowKeyphrasesStats && $ShowKeywordsStats)?95:70,'keyphrases'); print "
    $TotalDifferentKeyphrases $Message[103]$Message[14]$Message[15]
    ".XMLEncode($mot)."$_keyphrases{$key}$p %
    $Message[124]$rest_s$p %
      \n"; } if ($Debug) { debug("ShowKeywordsStats",2); } &tab_head("$Message[121] ($Message[77] $MaxNbOf{'KeywordsShown'})
    $Message[80]",19,($ShowKeyphrasesStats && $ShowKeywordsStats)?95:70,'keywords'); print "
    $TotalDifferentKeywords $Message[13]$Message[14]$Message[15]
    ".XMLEncode($mot)."$_keywords{$key}$p %
    $Message[30]$rest_s$p %
    \n"; } print "\n \n\n"; # BY MISC #---------------------------- if ($ShowMiscStats) { if ($Debug) { debug("ShowMiscStats",2); } print "$Center 
    \n"; my $Totalh=0; my %new_browser_h=(); if ($_misc_h{'AddToFavourites'}) { foreach my $key (keys %_browser_h) { $Totalh+=$_browser_h{$key}; if ($key =~ /^msie/i) { $new_browser_h{"msiecumul"}+=$_browser_h{$key}; } } if ($new_browser_h{'msiecumul'}) { $_misc_h{'AddToFavourites'}=int(0.5+$_misc_h{'AddToFavourites'}*$Totalh/$new_browser_h{'msiecumul'}); } } my $title="$Message[139]"; &tab_head("$title",19,0,'misc'); print "$Message[139]"; print " "; print " "; print "\n"; my %label=('AddToFavourites'=>$Message[137],'JavascriptDisabled'=>$Message[168],'JavaEnabled'=>$Message[140],'DirectorSupport'=>$Message[141], 'FlashSupport'=>$Message[142],'RealPlayerSupport'=>$Message[143],'QuickTimeSupport'=>$Message[144], 'WindowsMediaPlayerSupport'=>$Message[145],'PDFSupport'=>$Message[146]); foreach my $key (@MiscListOrder) { my $mischar=substr($key,0,1); if ($ShowMiscStats !~ /$mischar/i) { next; } my $total=0; my $p; if ($MiscListCalc{$key} eq 'v') { $total=$TotalVisits; } if ($MiscListCalc{$key} eq 'u') { $total=$TotalUnique; } if ($MiscListCalc{$key} eq 'hm') { $total=$_misc_h{'TotalMisc'}||0; } if ($total) { $p=int(($_misc_h{$key}?$_misc_h{$key}:0)/$total*1000)/10; } print ""; print "".($PageDir eq 'rtl'?"":"").$label{$key}.($PageDir eq 'rtl'?"":"").""; if ($MiscListCalc{$key} eq 'v') { print "".($_misc_h{$key}||0)." / $total $Message[12]"; } if ($MiscListCalc{$key} eq 'u') { print "".($_misc_h{$key}||0)." / $total $Message[18]"; } if ($MiscListCalc{$key} eq 'hm') { print "-"; } print "".($total?"$p %":" ").""; print "\n"; } &tab_end(); } # BY HTTP STATUS #---------------------------- if ($ShowHTTPErrorsStats) { if ($Debug) { debug("ShowHTTPErrorsStats",2); } print "$Center 
    \n"; my $title="$Message[32]"; &tab_head("$title",19,0,'errors'); print "$Message[32]*$Message[57]$Message[15]$Message[75]\n"; $total_h=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,1,\%_errors_h,\%_errors_h); foreach my $key (@keylist) { my $p=int($_errors_h{$key}/$TotalHitsErrors*1000)/10; print ""; if ($TrapInfosForHTTPErrorCodes{$key}) { print "$key"; } else { print "$key"; } print "".($httpcodelib{$key}?$httpcodelib{$key}:'Unknown error')."$_errors_h{$key}$p %".Format_Bytes($_errors_k{$key}).""; print "\n"; $total_h+=$_errors_h{$key}; $count++; } &tab_end("* $Message[154]"); } # BY SMTP STATUS #---------------------------- if ($ShowSMTPErrorsStats) { if ($Debug) { debug("ShowSMTPErrorsStats",2); } print "$Center 
    \n"; my $title="$Message[147]"; &tab_head("$title",19,0,'errors'); print "$Message[147]$Message[57]$Message[15]$Message[75]\n"; $total_h=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,1,\%_errors_h,\%_errors_h); foreach my $key (@keylist) { my $p=int($_errors_h{$key}/$TotalHitsErrors*1000)/10; print ""; print "$key"; print "".($smtpcodelib{$key}?$smtpcodelib{$key}:'Unknown error')."$_errors_h{$key}$p %".Format_Bytes($_errors_k{$key}).""; print "\n"; $total_h+=$_errors_h{$key}; $count++; } &tab_end(); } # BY CLUSTER #---------------------------- if ($ShowClusterStats) { if ($Debug) { debug("ShowClusterStats",2); } print "$Center 
    \n"; my $title="$Message[155]"; &tab_head("$title",19,0,'clusters'); print "$Message[155]"; &ShowClusterInfo('__title__'); if ($ShowClusterStats =~ /P/i) { print "$Message[56]$Message[15]"; } if ($ShowClusterStats =~ /H/i) { print "$Message[57]$Message[15]"; } if ($ShowClusterStats =~ /B/i) { print "$Message[75]$Message[15]"; } print "\n"; $total_p=$total_h=$total_k=0; # Cluster feature might have been enable in middle of month so we recalculate # total for cluster section only, to calculate ratio, instead of using global total foreach my $key (keys %_cluster_h) { $total_p+=int($_cluster_p{$key}||0); $total_h+=int($_cluster_h{$key}||0); $total_k+=int($_cluster_k{$key}||0); } my $count=0; foreach my $key (keys %_cluster_h) { my $p_p=int($_cluster_p{$key}/$total_p*1000)/10; my $p_h=int($_cluster_h{$key}/$total_h*1000)/10; my $p_k=int($_cluster_k{$key}/$total_k*1000)/10; print ""; print "Computer $key"; &ShowClusterInfo($key); if ($ShowClusterStats =~ /P/i) { print "".($_cluster_p{$key}?$_cluster_p{$key}:" ")."$p_p %"; } if ($ShowClusterStats =~ /H/i) { print "$_cluster_h{$key}$p_h %"; } if ($ShowClusterStats =~ /B/i) { print "".Format_Bytes($_cluster_k{$key})."$p_k %"; } print "\n"; $count++; } &tab_end(); } # BY EXTRA SECTIONS #---------------------------- foreach my $extranum (1..@ExtraName-1) { if ($Debug) { debug("ExtraName$extranum",2); } print "$Center 
    "; my $title=$ExtraName[$extranum]; &tab_head("$title",19,0,"extra$extranum"); print ""; print "".$ExtraFirstColumnTitle[$extranum]; print "  -   $Message[80]"; print ""; if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "$Message[56]"; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "$Message[57]"; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "$Message[75]"; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print "$Message[9]"; } print "\n"; $total_p=$total_h=$total_k=0; #$max_h=1; foreach (values %_login_h) { if ($_ > $max_h) { $max_h = $_; } } #$max_k=1; foreach (values %_login_k) { if ($_ > $max_k) { $max_k = $_; } } my $count=0; if ($MaxNbOfExtra[$extranum]) { if ($ExtraStatTypes[$extranum] =~ m/P/i) { &BuildKeyList($MaxNbOfExtra[$extranum],$MinHitExtra[$extranum],\%{'_section_' . $extranum . '_h'},\%{'_section_' . $extranum . '_p'}); } else { &BuildKeyList($MaxNbOfExtra[$extranum],$MinHitExtra[$extranum],\%{'_section_' . $extranum . '_h'},\%{'_section_' . $extranum . '_h'}); } } else { @keylist=(); } my %keysinkeylist=(); foreach my $key (@keylist) { $keysinkeylist{$key}=1; my $firstcol = CleanXSS(DecodeEncodedString($key)); $total_p+=${'_section_' . $extranum . '_p'}{$key}; $total_h+=${'_section_' . $extranum . '_h'}{$key}; $total_k+=${'_section_' . $extranum . '_k'}{$key}; print ""; printf("$ExtraFirstColumnFormat[$extranum]", $firstcol, $firstcol, $firstcol, $firstcol, $firstcol); if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "" . ${'_section_' . $extranum . '_p'}{$key} . ""; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "" . ${'_section_' . $extranum . '_h'}{$key} . ""; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "" . Format_Bytes(${'_section_' . $extranum . '_k'}{$key}) . ""; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print "" . (${'_section_' . $extranum . '_l'}{$key}?Format_Date(${'_section_' . $extranum . '_l'}{$key},1):'-') . ""; } print "\n"; $count++; } # If we ask average or sum, we loop on all other records if ($ExtraAddAverageRow[$extranum] || $ExtraAddSumRow[$extranum]) { foreach (keys %{'_section_' . $extranum . '_h'}) { if ($keysinkeylist{$_}) { next; } $total_p+=${'_section_' . $extranum . '_p'}{$_}; $total_h+=${'_section_' . $extranum . '_h'}{$_}; $total_k+=${'_section_' . $extranum . '_k'}{$_}; $count++; } } # Add average row if ($ExtraAddAverageRow[$extranum]) { print ""; print "$Message[96]"; if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "" . ($count?($total_p/$count):" ") . ""; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "" . ($count?($total_h/$count):" ") . ""; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "" . ($count?Format_Bytes($total_k/$count):" ") . ""; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print " "; } print "\n"; } # Add sum row if ($ExtraAddSumRow[$extranum]) { print ""; print "$Message[102]"; if ($ExtraStatTypes[$extranum] =~ m/P/i) { print "" . ($total_p) . ""; } if ($ExtraStatTypes[$extranum] =~ m/H/i) { print "" . ($total_h) . ""; } if ($ExtraStatTypes[$extranum] =~ m/B/i) { print "" . Format_Bytes($total_k) . ""; } if ($ExtraStatTypes[$extranum] =~ m/L/i) { print " "; } print "\n"; } &tab_end(); } &html_end(1); } } else { print "Jumped lines in file: $lastlinenb\n"; if ($lastlinenb) { print " Found $lastlinenb already parsed records.\n"; } print "Parsed lines in file: $NbOfLinesParsed\n"; print " Found $NbOfLinesDropped dropped records,\n"; print " Found $NbOfLinesCorrupted corrupted records,\n"; print " Found $NbOfOldLines old records,\n"; print " Found $NbOfNewLines new qualified records.\n"; } #sleep 10; 0; # Do not remove this line #------------------------------------------------------- # ALGORITHM SUMMARY # # Read_Config(); # Check_Config() and Init variables # if 'frame not index' # &Read_Language_Data($Lang); # if 'frame not mainleft' # &Read_Ref_Data(); # &Read_Plugins(); # html_head # # If 'migrate' # We create/update tmp file with # &Read_History_With_TmpUpdate(year,month,day,hour,UPDATE,NOPURGE,"all"); # Rename the tmp file # html_end # Exit # End of 'migrate' # # Get last history file name # Get value for $LastLine $LastLineNumber $LastLineOffset $LastLineChecksum with # &Read_History_With_TmpUpdate(lastyearbeforeupdate,lastmonthbeforeupdate,lastdaybeforeupdate,lasthourbeforeupdate,NOUPDATE,NOPURGE,"general"); # # &Init_HashArray() # # If 'update' # Loop on each new line in log file # lastlineoffset=lastlineoffsetnext; lastlineoffsetnext=file pointer position # If line corrupted, skip --> next on loop # Drop wrong virtual host --> next on loop # Drop wrong method/protocol --> next on loop # Check date --> next on loop # If line older than $LastLine, skip --> next on loop # So it's new line # $LastLine = time or record # Skip if url is /robots.txt --> next on loop # Skip line for @SkipHosts --> next on loop # Skip line for @SkipFiles --> next on loop # Skip line for @SkipUserAgent --> next on loop # Skip line for not @OnlyHosts --> next on loop # Skip line for not @OnlyUsers --> next on loop # Skip line for not @OnlyFiles --> next on loop # Skip line for not @OnlyUserAgent --> next on loop # So it's new line approved # If other month/year, create/update tmp file and purge data arrays with # &Read_History_With_TmpUpdate(lastprocessedyear,lastprocessedmonth,lastprocessedday,lastprocessedhour,UPDATE,PURGE,"all",lastlinenb,lastlineoffset,CheckSum($_)); # Define a clean Url and Query (set urlwithnoquery, tokenquery and standalonequery and $field[$pos_url]) # Define PageBool and extension # Analyze: Misc tracker --> complete %misc # Analyze: Add to favorites --> complete %_misc, countedtraffic=1 (not counted anywhere) # If (!countedtraffic) Analyze: Worms --> complete %_worms, countedtraffic=2 # If (!countedtraffic) Analyze: Status code --> complete %_error_, %_sider404, %_referrer404 --> countedtraffic=3 # If (!countedtraffic) Analyze: Robots known --> complete %_robot, countedtraffic=4 # If (!countedtraffic) Analyze: Robots unknown on robots.txt --> complete %_robot, countedtraffic=5 # If (!countedtraffic) Analyze: File types - Compression # If (!countedtraffic) Analyze: Date - Hour - Pages - Hits - Kilo # If (!countedtraffic) Analyze: Login # If (!countedtraffic) Do DNS Lookup # If (!countedtraffic) Analyze: Country # If (!countedtraffic) Analyze: Host - Url - Session # If (!countedtraffic) Analyze: Browser - OS # If (!countedtraffic) Analyze: Referer # If (!countedtraffic) Analyze: EMail # Analyze: Cluster # Analyze: Extra (must be after 'Define a clean Url and Query') # If too many records, we flush data arrays with # &Read_History_With_TmpUpdate(lastprocessedyear,lastprocessedmonth,lastprocessedday,lastprocessedhour,UPDATE,PURGE,"all",lastlinenb,lastlineoffset,CheckSum($_)); # End of loop # # Create/update tmp file # Seek to lastlineoffset in logfile to read and get last line into $_ # &Read_History_With_TmpUpdate(lastprocessedyear,lastprocessedmonth,lastprocessedday,lastprocessedhour,UPDATE,PURGE,"all",lastlinenb,lastlineoffset,CheckSum($_)) # Rename all created tmp files # End of 'update' # # &Init_HashArray() # # If 'output' # Loop for each month of required year # &Read_History_With_TmpUpdate($YearRequired,$monthloop,'','',NOUPDATE,NOPURGE,'all' or 'general time' if not required month) # End of loop # Show data arrays in HTML page # html_end # End of 'output' #------------------------------------------------------- #------------------------------------------------------- # DNS CACHE FILE FORMATS SUPPORTED BY AWSTATS # Format /etc/hosts x.y.z.w hostname # Format analog UT/60 x.y.z.w hostname #------------------------------------------------------- #------------------------------------------------------- # IP Format (d=decimal on 16 bits, x=hexadecimal on 16 bits) # # 13.1.68.3 IPv4 (d.d.d.d) # 0:0:0:0:0:0:13.1.68.3 IPv6 (x:x:x:x:x:x:d.d.d.d) # ::13.1.68.3 # 0:0:0:0:0:FFFF:13.1.68.3 IPv6 (x:x:x:x:x:x:d.d.d.d) # ::FFFF:13.1.68.3 IPv6 # # 1070:0:0:0:0:800:200C:417B IPv6 # 1070:0:0:0:0:800:200C:417B IPv6 # 1070::800:200C:417B IPv6 #------------------------------------------------------- awstats.medior.biz.conf000064400000166601152532065620011162 0ustar00# AWSTATS CONFIGURE FILE 6.8 #----------------------------------------------------------------------------- # Copy this file into awstats.www.mydomain.conf and edit this new config file # to setup AWStats (See documentation in docs/ directory). # The config file must be in /etc/awstats, /usr/local/etc/awstats or /etc (for # Unix/Linux) or same directory than awstats.pl (Windows, Mac, Unix/Linux...) # To include an environment variable in any parameter (AWStats will replace # it with its value when reading it), follow the example: # Parameter="__ENVNAME__" # Note that environment variable AWSTATS_CURRENT_CONFIG is always defined with # the config value in an AWStats running session and can be used like others. #----------------------------------------------------------------------------- # $Revision: 1.333 $ - $Author: eldy $ - $Date: 2008/02/26 01:33:59 $ #----------------------------------------------------------------------------- # MAIN SETUP SECTION (Required to make AWStats work) #----------------------------------------------------------------------------- # "LogFile" contains the web, ftp or mail server log file to analyze. # Possible values: A full path, or a relative path from awstats.pl directory. # Example: "/var/log/apache/access.log" # Example: "../logs/mycombinedlog.log" # You can also use tags in this filename if you need a dynamic file name # depending on date or time (Replacement is made by AWStats at the beginning # of its execution). This is available tags : # %YYYY-n is replaced with 4 digits year we were n hours ago # %YY-n is replaced with 2 digits year we were n hours ago # %MM-n is replaced with 2 digits month we were n hours ago # %MO-n is replaced with 3 letters month we were n hours ago # %DD-n is replaced with day we were n hours ago # %HH-n is replaced with hour we were n hours ago # %NS-n is replaced with number of seconds at 00:00 since 1970 # %WM-n is replaced with the week number in month (1-5) # %Wm-n is replaced with the week number in month (0-4) # %WY-n is replaced with the week number in year (01-52) # %Wy-n is replaced with the week number in year (00-51) # %DW-n is replaced with the day number in week (1-7, 1=sunday) # use n=24 if you need (1-7, 1=monday) # %Dw-n is replaced with the day number in week (0-6, 0=sunday) # use n=24 if you need (0-6, 0=monday) # Use 0 for n if you need current year, month, day, hour... # Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log" # Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log" # You can also use a pipe if log file come from a pipe : # Example: "gzip -d outputpath/output.html"), enter # path of icon directory relative to the output directory 'outputpath'. # Example: "/awstatsicons" # Example: "../icon" # Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon") # DirIcons="/awstats/icon" # When this parameter is set to 1, AWStats adds a button on report page to # allow to "update" statistics from a web browser. Warning, when "update" is # made from a browser, AWStats is run as a CGI by the web server user defined # in your web server (user "nobody" by default with Apache, "IUSR_XXX" with # IIS), so the "DirData" directory and all already existing history files # awstatsMMYYYY[.xxx].txt must be writable by this user. Change permissions if # necessary to "Read/Write" (and "Modify" for Windows NTFS file systems). # Warning: Update process can be long so you might experience "time out" # browser errors if you don't launch AWStats frequently enough. # When set to 0, update is only made when AWStats is run from the command # line interface (or a task scheduler). # Possible values: 0 or 1 # Default: 0 # AllowToUpdateStatsFromBrowser=0 # AWStats saves and sorts its database on a month basis (except if using # databasebreak option from command line). # However, if you choose the -month=all from command line or # value '-Year-' from CGI combo form to have a report for all year, AWStats # needs to reload all data for full year (each month), and sort them, # requiring a large amount of time, memory and CPU. This might be a problem # for web hosting providers that offer AWStats for large sites, on shared # servers, to non CPU cautious customers. # For this reason, the 'full year' is only enabled on Command Line by default. # You can change this by setting this parameter to 0, 1, 2 or 3. # Possible values: # 0 - Never allowed # 1 - Allowed on CLI only, -Year- value in combo is not visible # 2 - Allowed on CLI only, -Year- value in combo is visible but not allowed # 3 - Possible on CLI and CGI # Default: 2 # AllowFullYearView=2 #----------------------------------------------------------------------------- # OPTIONAL SETUP SECTION (Not required but increase AWStats features) #----------------------------------------------------------------------------- # When the update process runs, AWStats can set a lock file in TEMP or TMP # directory. This lock is to avoid to have 2 update processes running at the # same time to prevent unknown conflicts problems and avoid DoS attacks when # AllowToUpdateStatsFromBrowser is set to 1. # Because, when you use lock file, you can experience sometimes problems in # lock file not correctly removed (killed process for example requires that # you remove the file manualy), this option is not enabled by default (Do # not enable this option with no console server access). # Change : Effective immediatly # Possible values: 0 or 1 # Default: 0 # EnableLockForUpdate=0 # AWStats can do reverse DNS lookups through a static DNS cache file that was # previously created manually. If no path is given in static DNS cache file # name, AWStats will search DirData directory. This file is never changed. # This option is not used if DNSLookup=0. # Note: DNS cache file format is 'minsince1970 ipaddress resolved_hostname' # or just 'ipaddress resolved_hostname' # Change : Effective for new updates only # Example: "/mydnscachedir/dnscache" # Default: "dnscache.txt" # DNSStaticCacheFile="dnscache.txt" # AWStats can do reverse DNS lookups through a DNS cache file that was created # by a previous run of AWStats. This file is erased and recreated after each # statistics update process. You don't need to create and/or edit it. # AWStats will read and save this file in DirData directory. # This option is used only if DNSLookup=1. # Note: If a DNSStaticCacheFile is available, AWStats will check for DNS # lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile. # Change : Effective for new updates only # Example: "/mydnscachedir/dnscachelastupdate" # Default: "dnscachelastupdate.txt" # DNSLastUpdateCacheFile="dnscachelastupdate.txt" # You can specify specific IP addresses that should NOT be looked up in DNS. # This option is used only if DNSLookup=1. # Note: Use space between each value. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "123.123.123.123 REGEX[^192\.168\.]" # Default: "" # SkipDNSLookupFor="" # The following two parameters allow you to protect a config file from being # read by AWStats when called from a browser if web user has not been # authenticated. Your AWStats program must be in a web protected "realm" (With # Apache, you can use .htaccess files to do so. With other web servers, see # your server setup manual). # Change : Effective immediatly # Possible values: 0 or 1 # Default: 0 # AllowAccessFromWebToAuthenticatedUsersOnly=0 # This parameter gives the list of all authorized authenticated users to view # statistics for this domain/config file. This parameter is used only if # AllowAccessFromWebToAuthenticatedUsersOnly is set to 1. # Change : Effective immediatly # Example: "user1 user2" # Example: "__REMOTE_USER__" # Default: "" # AllowAccessFromWebToFollowingAuthenticatedUsers="" # When this parameter is defined to something, the IP address of the user that # reads its statistics from a browser (when AWStats is used as a CGI) is # checked and must match one of the IP address values or ranges. # Change : Effective immediatly # Example: "127.0.0.1 123.123.123.1-123.123.123.255" # Default: "" # AllowAccessFromWebToFollowingIPAddresses="" # If the "DirData" directory (see above) does not exist, AWStats return an # error. However, you can ask AWStats to create it. # This option can be used by some Web Hosting Providers that has defined a # dynamic value for DirData (for example DirData="/hsphere/local/home/sksadmin/medior.biz/awstats/data") and # don't want to have to create a new directory each time they add a new user. # Change : Effective immediatly # Possible values: 0 or 1 # Default: 0 # CreateDirDataIfNotExists=0 # You can choose in which format the Awstats history database is saved. # Note: Using "xml" format make AWStats building database files three times # larger than using "text" format. # Change : Database format is switched after next update # Possible values: text or xml # Default: text # BuildHistoryFormat=text # If you prefer having the report output pages be built as XML compliant pages # instead of simple HTML pages, you can set this to 'xhtml' (May not work # properly with old browsers). # Change : Effective immediatly # Possible values: html or xhtml # Default: html # BuildReportFormat=html # AWStats databases can be updated from command line of from a browser (when # used as a cgi program). So AWStats database files need write permission # for both command line user and default web server user (nobody for Unix, # IUSR_xxx for IIS/Windows,...). # To avoid permission problems between update process (run by an admin user) # and CGI process (ran by a low level user), AWStats can save its database # files with read and write permissions for everyone. # By default, AWStats keeps default user permissions on updated files. If you # set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1. # Change : Effective for new updates only # Possible values: 0 or 1 # Default: 0 # SaveDatabaseFilesWithPermissionsForEveryone=0 # AWStats can purge log file, after analyzing it. Note that AWStats is able # to detect new lines in a log file, to process only them, so you can launch # AWStats as often as you want, even with this parameter to 0. # With 0, no purge is made, so you must use a scheduled task or a web server # that make this purge frequently. # With 1, the purge of the log file is made each time AWStats update is run. # This parameter doesn't work with IIS (This web server doesn't let its log # file to be purged). # Change : Effective for new updates only # Possible values: 0 or 1 # Default: 0 # PurgeLogFile=0 # When PurgeLogFile is setup to 1, AWStats will clean your log file after # processing it. You can however keep an archive file of all processed log # records by setting this parameter (For example if you want to use another # log analyzer). The archived log file is saved in "DirData" with name # awstats_archive.configname[.suffix].log # This parameter is not used if PurgeLogFile=0 # Change : Effective for new updates only # Possible values: 0, 1, or tags (See LogFile parameter) for suffix # Example: 1 # Example: %YYYY%MM%DD # Default: 0 # ArchiveLogRecords=0 # Each time you run the update process, AWStats overwrites the 'historic file' # for the month (awstatsMMYYYY[.*].txt) with the updated one. # When write errors occurs (IO, disk full,...), this historic file can be # corrupted and must be deleted. Because this file contains information of all # past processed log files, you will loose old stats if removed. So you can # ask AWStats to save last non corrupted file in a .bak file. This file is # stored in "DirData" directory with other 'historic files'. # Change : Effective for new updates only # Possible values: 0 or 1 # Default: 0 # KeepBackupOfHistoricFiles=0 # Default index page name for your web server. # Change : Effective for new updates only # Example: "index.php index.html default.html" # Default: "index.html" # DefaultFile="index.html" # Do not include access from clients that match following criteria. # If your log file contains IP addresses in host field, you must enter here # matching IP addresses criteria. # If DNS lookup is already done in your log file, you must enter here hostname # criteria, else enter ip address criteria. # The opposite parameter of "SkipHosts" is "OnlyHosts". # Note: Use space between each value. This parameter is not case sensitive. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" # Example: "localhost REGEX[^.*\.localdomain$]" # Default: "" # SkipHosts="" # Do not include access from clients with a user agent that match following # criteria. If you want to exclude a robot, you should update the robots.pm # file instead of this parameter. # The opposite parameter of "SkipUserAgents" is "OnlyUserAgents". # Note: Use space between each value. This parameter is not case sensitive. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "konqueror REGEX[ua_test_v\d\.\d]" # Default: "" # SkipUserAgents="" # Use SkipFiles to ignore access to URLs that match one of following entries. # You can enter a list of not important URLs (like framed menus, hidden pages, # etc...) to exclude them from statistics. You must enter here exact relative # URL as found in log file, or a matching REGEX value. Check apply on URL with # all its query paramaters. # For example, to ignore /badpage.php, just add "/badpage.php". To ignore all # pages in a particular directory, add "REGEX[^\/directorytoexclude]". # The opposite parameter of "SkipFiles" is "OnlyFiles". # Note: Use space between each value. This parameter is or not case sensitive # depending on URLNotCaseSensitive parameter. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "/badpage.php /page.php?param=x REGEX[^\/excludedirectory]" # Default: "" # SkipFiles="" # Use SkipReferrersBlackList if you want to exclude records coming from a SPAM # referrer. Parameter must receive a local file name containing rules applied # on referrer field. If parameter is empty, no filter is applied. # An example of such a file is available in lib/blacklist.txt # You can download updated version at http://www.jayallen.org/comment_spam/ # Change : Effective for new updates only # Example: "/mylibpath/blacklist.txt" # Default: "" # # WARNING!! Using this feature make AWStats running very slower (5 times slower # with black list file provided with AWStats ! # SkipReferrersBlackList="" # Include in stats, only accesses from hosts that match one of following # entries. For example, if you want AWStats to filter access to keep only # stats for visits from particular hosts, you can add those host names in # this parameter. # If DNS lookup is already done in your log file, you must enter here hostname # criteria, else enter ip address criteria. # The opposite parameter of "OnlyHosts" is "SkipHosts". # Note: Use space between each value. This parameter is not case sensitive. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" # Default: "" # OnlyHosts="" # Include in stats, only accesses from user agent that match one of following # entries. For example, if you want AWStats to filter access to keep only # stats for visits from particular browsers, you can add their user agents # string in this parameter. # The opposite parameter of "OnlyUserAgents" is "SkipUserAgents". # Note: Use space between each value. This parameter is not case sensitive. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "msie" # Default: "" # OnlyUserAgents="" # Include in stats, only accesses from authenticated users that match one of # following entries. For example, if you want AWStats to filter access to keep # only stats for authenticated users, you can add those users names in # this parameter. Useful for statistics for per user ftp logs. # Note: Use space between each value. This parameter is not case sensitive. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "john bob REGEX[^testusers]" # Default: "" # OnlyUsers="" # Include in stats, only accesses to URLs that match one of following entries. # For example, if you want AWStats to filter access to keep only stats that # match a particular string, like a particular directory, you can add this # directory name in this parameter. # The opposite parameter of "OnlyFiles" is "SkipFiles". # Note: Use space between each value. This parameter is or not case sensitive # depending on URLNotCaseSensitive parameter. # Note: You can use regular expression values writing value with REGEX[value]. # Change : Effective for new updates only # Example: "REGEX[marketing_directory] REGEX[office\/.*\.(csv|sxw)$]" # Default: "" # OnlyFiles="" # Add here a list of kind of url (file extension) that must be counted as # "Hit only" and not as a "Hit" and "Page/Download". You can set here all # image extensions as they are hit downloaded that must be counted but they # are not viewed pages. URLs with such extensions are not included in the TOP # Pages/URL report. # Note: If you want to exclude particular URLs from stats (No Pages and no # Hits reported), you must use SkipFiles parameter. # Change : Effective for new updates only # Example: "css js class gif jpg jpeg png bmp ico rss xml swf zip arj rar gz z bz2 wav mp3 wma mpg avi" # Example: "" # Default: "css js class gif jpg jpeg png bmp ico rss xml swf" # NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" # By default, AWStats considers that records found in web log file are # successful hits if HTTP code returned by server is a valid HTTP code (200 # and 304). Any other code are reported in HTTP status chart. # Note that HTTP 'control codes', like redirection (302, 305) are not added by # default in this list as they are not pages seen by a visitor but are # protocol exchange codes to tell the browser to ask another page. Because # this other page will be counted and seen with a 200 or 304 code, if you # add such codes, you will have 2 pages viewed reported for only one in facts. # Change : Effective for new updates only # Example: "200 304 302 305" # Default: "200 304" # ValidHTTPCodes="200 304" # By default, AWStats considers that records found in mail log file are # successful mail transfers if field that represent return code in analyzed # log file match values defined by this parameter. # Change : Effective for new updates only # Example: "1 250 200" # Default: "1 250" # ValidSMTPCodes="1 250" # Some web servers on some Operating systems (IIS-Windows) consider that a # login with same value but different case are the same login. To tell AWStats # to also consider them as one, set this parameter to 1. # Change : Effective for new updates only # Possible values: 0 or 1 # Default: 0 # AuthenticatedUsersNotCaseSensitive=0 # Some web servers on some Operating systems (IIS-Windows) considers that two # URLs with same value but different case are the same URL. To tell AWStats to # also considers them as one, set this parameter to 1. # Change : Effective for new updates only # Possible values: 0 or 1 # Default: 0 # URLNotCaseSensitive=0 # Keep or remove the anchor string you can find in some URLs. # Change : Effective for new updates only # Possible values: 0 or 1 # Default: 0 # URLWithAnchor=0 # In URL links, "?" char is used to add parameter's list in URLs. Syntax is: # /mypage.html?param1=value1¶m2=value2 # However, some servers/sites use also other chars to isolate dynamic part of # their URLs. You can complete this list with all such characters. # Change : Effective for new updates only # Example: "?;," # Default: "?;" # URLQuerySeparators="?;" # Keep or remove the query string to the URL in the statistics for individual # pages. This is primarily used to differentiate between the URLs of dynamic # pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as two # different pages. # Warning, when set to 1, memory required to run AWStats is dramatically # increased if you have a lot of changing URLs (for example URLs with a random # id inside). Such web sites should not set this option to 1 or use seriously # the next parameter URLWithQueryWithOnlyFollowingParameters (or eventually # URLWithQueryWithoutFollowingParameters). # Change : Effective for new updates only # Possible values: # 0 - URLs are cleaned from the query string (ie: "/mypage.html") # 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") # Default: 0 # URLWithQuery=0 # When URLWithQuery is on, you will get the full URL with all parameters in # URL reports. But among thoose parameters, sometimes you don't need a # particular parameter because it does not identify the page or because it's # a random ID changing for each access even if URL points to same page. In # such cases, it is higly recommanded to ask AWStats to keep only parameters # you need (if you know them) before counting, manipulating and storing URL. # Enter here list of wanted parameters. For example, with "param", one hit on # /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r # will be reported as 2 hits on /mypage.cgi?param=abc # This parameter is not used when URLWithQuery is 0 and can't be used with # URLWithQueryWithoutFollowingParameters. # Change : Effective for new updates only # Example: "param" # Default: "" # URLWithQueryWithOnlyFollowingParameters="" # When URLWithQuery is on, you will get the full URL with all parameters in # URL reports. But among thoose parameters, sometimes you don't need a # particular parameter because it does not identify the page or because it's # a random ID changing for each access even if URL points to same page. In # such cases, it is higly recommanded to ask AWStats to remove such parameters # from the URL before counting, manipulating and storing URL. Enter here list # of all non wanted parameters. For example if you enter "id", one hit on # /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r # will be reported as 2 hits on /mypage.cgi?param=abc # This parameter is not used when URLWithQuery is 0 and can't be used with # URLWithQueryWithOnlyFollowingParameters. # Change : Effective for new updates only # Example: "PHPSESSID jsessionid" # Default: "" # URLWithQueryWithoutFollowingParameters="" # Keep or remove the query string to the referrer URL in the statistics for # external referrer pages. This is used to differentiate between the URLs of # dynamic referrer pages. If set to 1, mypage.html?id=x and mypage.html?id=y # are counted as two different referrer pages. # Change : Effective for new updates only # Possible values: # 0 - Referrer URLs are cleaned from the query string (ie: "/mypage.html") # 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") # Default: 0 # URLReferrerWithQuery=0 # AWStats can detect setup problems or show you important informations to have # a better use. Keep this to 1, except if AWStats says you can change it. # Change : Effective immediatly # Possible values: 0 or 1 # Default: 1 # WarningMessages=1 # When an error occurs, AWStats outputs a message related to errors. If you # want (in most cases for security reasons) to have no error messages, you # can set this parameter to your personalized generic message. # Change : Effective immediatly # Example: "An error occurred. Contact your Administrator" # Default: "" # ErrorMessages="" # AWStat can be run with debug=x parameter to output various informations # to help in debugging or solving troubles. If you want to allow this (not # enabled by default for security reasons), set this parameter to 0. # Change : Effective immediatly # Possible values: 0 or 1 # Default: 0 # DebugMessages=0 # To help you to detect if your log format is good, AWStats reports an error # if all the first NbOfLinesForCorruptedLog lines have a format that does not # match the LogFormat parameter. # However, some worm virus attack on your web server can result in a very high # number of corrupted lines in your log. So if you experience awstats stop # because of bad virus records at the beginning of your log file, you can # increase this parameter (very rare). # Change : Effective for new updates only # Default: 50 # NbOfLinesForCorruptedLog=50 # For some particular integration needs, you may want to have CGI links to # point to another script than awstats.pl. # Use the name of this script in WrapperScript parameter. # Change : Effective immediatly # Example: "awstatslauncher.pl" # Default: "" # WrapperScript="" # DecodeUA must be set to 1 if you use Roxen web server. This server converts # all spaces in user agent field into %20. This make the AWStats robots, OS # and browsers detection fail in some cases. Just change it to 1 if and only # if your web server is Roxen. # Change : Effective for new updates only # Possible values: 0 or 1 # Default: 0 # DecodeUA=0 # MiscTrackerUrl can be used to make AWStats able to detect some miscellaneous # things, that can not be tracked on other way, like: # - Javascript disabled # - Java enabled # - Screen size # - Color depth # - Macromedia Director plugin # - Macromedia Shockwave plugin # - Realplayer G2 plugin # - QuickTime plugin # - Mediaplayer plugin # - Acrobat PDF plugin # To enable all these features, you must copy the awstats_misc_tracker.js file # into a /js/ directory stored in your web document root and add the following # HTML code at the end of your index page (but before ) : # # # # # If code is not added in index page, all those detection capabilities will be # disabled. You must also check that ShowScreenSizeStats and ShowMiscStats # parameters are set to 1 to make results appear in AWStats report page. # If you want to use another directory than /js/, you must also change the # awstatsmisctrackerurl variable into the awstats_misc_tracker.js file. # Change : Effective for new updates only. # Possible value: URL of javascript tracker file added in your HTML code. # Default: "/js/awstats_misc_tracker.js" # MiscTrackerUrl="/js/awstats_misc_tracker.js" #----------------------------------------------------------------------------- # OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features) #----------------------------------------------------------------------------- # The following values allow you to define accuracy of AWStats entities # (robots, browsers, os, referers, file types) detection. # It might be a good idea for large web sites or ISP that provides AWStats to # high number of customers, to set this parameter to 1 (or 0), instead of 2. # Possible values: # 0 = No detection, # 1 = Medium/Standard detection # 2 = Full detection # Change : Effective for new updates only # Note : LevelForBrowsersDetection can also accept value "allphones". This # enable detailed detection of phone/pda browsers. # Default: 2 (0 for LevelForWormsDetection) # LevelForBrowsersDetection=2 # 0 disables Browsers detection. # 2 reduces AWStats speed by 2% # allphones reduces AWStats speed by 5% LevelForOSDetection=2 # 0 disables OS detection. # 2 reduces AWStats speed by 3% LevelForRefererAnalyze=2 # 0 disables Origin detection. # 2 reduces AWStats speed by 14% LevelForRobotsDetection=2 # 0 disables Robots detection. # 2 reduces AWStats speed by 2.5% LevelForSearchEnginesDetection=2 # 0 disables Search engines detection. # 2 reduces AWStats speed by 9% LevelForKeywordsDetection=2 # 0 disables Keyphrases/Keywords detection. # 2 reduces AWStats speed by 1% LevelForFileTypesDetection=2 # 0 disables File types detection. # 2 reduces AWStats speed by 1% LevelForWormsDetection=0 # 0 disables Worms detection. # 2 reduces AWStats speed by 15% #----------------------------------------------------------------------------- # OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features) #----------------------------------------------------------------------------- # When you use AWStats as a CGI, you can have the reports shown in HTML frames. # Frames are only available for report viewed dynamically. When you build # pages from command line, this option is not used and no frames are built. # Possible values: 0 or 1 # Default: 1 # UseFramesWhenCGI=1 # This parameter asks your browser to open detailed reports into a different # window than the main page. # Possible values: # 0 - Open all in same browser window # 1 - Open detailed reports in another window except if using frames # 2 - Open always in a different window even if reports are framed # Default: 1 # DetailedReportsOnNewWindows=1 # You can add, in the HTML report page, a cache lifetime (in seconds) that # will be returned to the browser in HTTP header answer by server. # This parameter is not used when reports are built with -staticlinks option. # Example: 3600 # Default: 0 # Expires=0 # To avoid too large web pages, you can ask AWStats to limit number of rows of # all reported charts to this number when no other limits apply. # Default: 1000 # MaxRowsInHTMLOutput=1000 # Set your primary language (ISO-639-1 language codes). # Possible values: # Albanian=al, Bosnian=ba, Bulgarian=bg, Catalan=ca, # Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Croatian=hr, Czech=cz, # Danish=dk, Dutch=nl, English=en, Estonian=et, Euskara=eu, Finnish=fi, # French=fr, Galician=gl, German=de, Greek=gr, Hebrew=he, Hungarian=hu, # Icelandic=is, Indonesian=id, Italian=it, Japanese=jp, Korean=ko, # Latvian=lv, Norwegian (Nynorsk)=nn, Norwegian (Bokmal)=nb, Polish=pl, # Portuguese=pt, Portuguese (Brazilian)=br, Romanian=ro, Russian=ru, # Serbian=sr, Slovak=sk, Slovenian=si, Spanish=es, Swedish=se, Turkish=tr, # Ukrainian=ua, Welsh=cy. # First available language accepted by browser=auto # Default: "auto" # Lang="auto" # Set the location of language files. # Example: "/usr/share/awstats/lang" # Default: "./lang" (means lang directory is in same location than awstats.pl) # DirLang="./lang" # Show menu header with reports' links # Possible values: 0 or 1 # Default: 1 # ShowMenu=1 # You choose here which reports you want to see in the main page and what you # want to see in those reports. # Possible values: # 0 - Report is not shown at all # 1 - Report is shown in main page with an entry in menu and default columns # XYZ - Report shows column informations defined by code X,Y,Z... # X,Y,Z... are code letters among the following: # U = Unique visitors # V = Visits # P = Number of pages # H = Number of hits (or mails) # B = Bandwith (or total mail size for mail logs) # L = Last access date # E = Entry pages # X = Exit pages # C = Web compression (mod_gzip,mod_deflate) # M = Average mail size (mail logs) # # Show monthly summary # Context: Web, Streaming, Mail, Ftp # Default: UVPHB, Possible column codes: UVPHB ShowSummary=UVPHB # Show monthly chart # Context: Web, Streaming, Mail, Ftp # Default: UVPHB, Possible column codes: UVPHB ShowMonthStats=UVPHB # Show days of month chart # Context: Web, Streaming, Mail, Ftp # Default: VPHB, Possible column codes: VPHB ShowDaysOfMonthStats=VPHB # Show days of week chart # Context: Web, Streaming, Mail, Ftp # Default: PHB, Possible column codes: PHB ShowDaysOfWeekStats=PHB # Show hourly chart # Context: Web, Streaming, Mail, Ftp # Default: PHB, Possible column codes: PHB ShowHoursStats=PHB # Show domains/country chart # Context: Web, Streaming, Mail, Ftp # Default: PHB, Possible column codes: PHB ShowDomainsStats=PHB # Show hosts chart # Context: Web, Streaming, Mail, Ftp # Default: PHBL, Possible column codes: PHBL ShowHostsStats=PHBL # Show authenticated users chart # Context: Web, Streaming, Ftp # Default: 0, Possible column codes: PHBL ShowAuthenticatedUsers=0 # Show robots chart # Context: Web, Streaming # Default: HBL, Possible column codes: HBL ShowRobotsStats=HBL # Show worms chart # Context: Web, Streaming # Default: 0 (If set to other than 0, see also LevelForWormsDetection), Possible column codes: HBL ShowWormsStats=0 # Show email senders chart (For use when analyzing mail log files) # Context: Mail # Default: 0, Possible column codes: HBML ShowEMailSenders=0 # Show email receivers chart (For use when analyzing mail log files) # Context: Mail # Default: 0, Possible column codes: HBML ShowEMailReceivers=0 # Show session chart # Context: Web, Streaming, Ftp # Default: 1, Possible column codes: None ShowSessionsStats=1 # Show pages-url chart. # Context: Web, Streaming, Ftp # Default: PBEX, Possible column codes: PBEX ShowPagesStats=PBEX # Show file types chart. # Context: Web, Streaming, Ftp # Default: HB, Possible column codes: HBC ShowFileTypesStats=HB # Show file size chart (Not yet available) # Context: Web, Streaming, Mail, Ftp # Default: 1, Possible column codes: None ShowFileSizesStats=0 # Show operating systems chart # Context: Web, Streaming, Ftp # Default: 1, Possible column codes: None ShowOSStats=1 # Show browsers chart # Context: Web, Streaming # Default: 1, Possible column codes: None ShowBrowsersStats=1 # Show screen size chart # Context: Web, Streaming # Default: 0 (If set to 1, see also MiscTrackerUrl), Possible column codes: None ShowScreenSizeStats=0 # Show origin chart # Context: Web, Streaming # Default: PH, Possible column codes: PH ShowOriginStats=PH # Show keyphrases chart # Context: Web, Streaming # Default: 1, Possible column codes: None ShowKeyphrasesStats=1 # Show keywords chart # Context: Web, Streaming # Default: 1, Possible column codes: None ShowKeywordsStats=1 # Show misc chart # Context: Web, Streaming # Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp ShowMiscStats=a # Show http errors chart # Context: Web, Streaming # Default: 1, Possible column codes: None ShowHTTPErrorsStats=1 # Show smtp errors chart (For use when analyzing mail log files) # Context: Mail # Default: 0, Possible column codes: None ShowSMTPErrorsStats=0 # Show the cluster report (Your LogFormat must contains the %cluster tag) # Context: Web, Streaming, Ftp # Default: 0, Possible column codes: PHB ShowClusterStats=0 # Some graphical reports are followed by the data array of values. # If you don't want this array (to reduce the report size for example), you # can set thoose options to 0. # Possible values: 0 or 1 # Default: 1 # # Data array values for the ShowMonthStats report AddDataArrayMonthStats=1 # Data array values for the ShowDaysOfMonthStats report AddDataArrayShowDaysOfMonthStats=1 # Data array values for the ShowDaysOfWeekStats report AddDataArrayShowDaysOfWeekStats=1 # Data array values for the ShowHoursStats report AddDataArrayShowHoursStats=1 # In the Origin chart, you have stats on where your hits came from. You can # include hits on pages that come from pages of same sites in this chart. # Possible values: 0 or 1 # Default: 0 # IncludeInternalLinksInOriginSection=0 # The following parameters can be used to choose the maximum number of lines # shown for the particular following reports. # # Stats by countries/domains MaxNbOfDomain = 10 MinHitDomain = 1 # Stats by hosts MaxNbOfHostsShown = 10 MinHitHost = 1 # Stats by authenticated users MaxNbOfLoginShown = 10 MinHitLogin = 1 # Stats by robots MaxNbOfRobotShown = 10 MinHitRobot = 1 # Stats by pages MaxNbOfPageShown = 10 MinHitFile = 1 # Stats by OS MaxNbOfOsShown = 10 MinHitOs = 1 # Stats by browsers MaxNbOfBrowsersShown = 10 MinHitBrowser = 1 # Stats by screen size MaxNbOfScreenSizesShown = 5 MinHitScreenSize = 1 # Stats by window size (following 2 parameters are not yet used) MaxNbOfWindowSizesShown = 5 MinHitWindowSize = 1 # Stats by referers MaxNbOfRefererShown = 10 MinHitRefer = 1 # Stats for keyphrases MaxNbOfKeyphrasesShown = 10 MinHitKeyphrase = 1 # Stats for keywords MaxNbOfKeywordsShown = 10 MinHitKeyword = 1 # Stats for sender or receiver emails MaxNbOfEMailsShown = 20 MinHitEMail = 1 # Choose if you want the week report to start on sunday or monday # Possible values: # 0 - Week starts on sunday # 1 - Week starts on monday # Default: 1 # FirstDayOfWeek=1 # List of visible flags that link to other language translations. # See Lang parameter for list of allowed flag/language codes. # If you don't want any flag link, set ShowFlagLinks to "". # This parameter is used only if ShowMenu parameter is set to 1. # Possible values: "" or "language_codes_separated_by_space" # Example: "en es fr nl de" # Default: "" # ShowFlagLinks="" # Each URL, shown in stats report views, are links you can click. # Possible values: 0 or 1 # Default: 1 # ShowLinksOnUrl=1 # When AWStats builds HTML links in its report pages, it starts those links # with "http://". However some links might be HTTPS links, so you can enter # here the root of all your HTTPS links. If all your site is a SSL web site, # just enter "/". # This parameter is not used if ShowLinksOnUrl is 0. # Example: "/shopping" # Example: "/" # Default: "" # UseHTTPSLinkForUrl="" # Maximum length of URL part shown on stats page (number of characters). # This affects only URL visible text, links still work. # Default: 64 # MaxLengthOfShownURL=64 # You can enter HTML code that will be added at the top of AWStats reports. # Default: "" # HTMLHeadSection="" # You can enter HTML code that will be added at the end of AWStats reports. # Great to add advert ban. # Default: "" # HTMLEndSection="" # You can set Logo and LogoLink to use your own logo. # Logo must be the name of image file (must be in $DirIcons/other directory). # LogoLink is the expected URL when clicking on Logo. # Default: "awstats_logo6.png" # Logo="awstats_logo6.png" LogoLink="http://awstats.sourceforge.net" # Value of maximum bar width/height for horizontal/vertical HTML graphics bars. # Default: 260/90 # BarWidth = 260 BarHeight = 90 # You can ask AWStats to use a particular CSS (Cascading Style Sheet) to # change its look. To create a style sheet, you can use samples provided with # AWStats in wwwroot/css directory. # Example: "/awstatscss/awstats_bw.css" # Example: "/css/awstats_bw.css" # Default: "" # StyleSheet="" # Those color parameters can be used (if StyleSheet parameter is not used) # to change AWStats look. # Example: color_name="RRGGBB" # RRGGBB is Red Green Blue components in Hex # color_Background="FFFFFF" # Background color for main page (Default = "FFFFFF") color_TableBGTitle="CCCCDD" # Background color for table title (Default = "CCCCDD") color_TableTitle="000000" # Table title font color (Default = "000000") color_TableBG="CCCCDD" # Background color for table (Default = "CCCCDD") color_TableRowTitle="FFFFFF" # Table row title font color (Default = "FFFFFF") color_TableBGRowTitle="ECECEC" # Background color for row title (Default = "ECECEC") color_TableBorder="ECECEC" # Table border color (Default = "ECECEC") color_text="000000" # Color of text (Default = "000000") color_textpercent="606060" # Color of text for percent values (Default = "606060") color_titletext="000000" # Color of text title within colored Title Rows (Default = "000000") color_weekend="EAEAEA" # Color for week-end days (Default = "EAEAEA") color_link="0011BB" # Color of HTML links (Default = "0011BB") color_hover="605040" # Color of HTML on-mouseover links (Default = "605040") color_u="FFAA66" # Background color for number of unique visitors (Default = "FFAA66") color_v="F4F090" # Background color for number of visites (Default = "F4F090") color_p="4477DD" # Background color for number of pages (Default = "4477DD") color_h="66DDEE" # Background color for number of hits (Default = "66DDEE") color_k="2EA495" # Background color for number of bytes (Default = "2EA495") color_s="8888DD" # Background color for number of search (Default = "8888DD") color_e="CEC2E8" # Background color for number of entry pages (Default = "CEC2E8") color_x="C1B2E2" # Background color for number of exit pages (Default = "C1B2E2") #----------------------------------------------------------------------------- # PLUGINS #----------------------------------------------------------------------------- # Add here all plugin files you want to load. # Plugin files must be .pm files stored in 'plugins' directory. # Uncomment LoadPlugin lines to enable a plugin after checking that perl # modules required by the plugin are installed. # Plugin: Tooltips # Perl modules required: None # Add some tooltips help on HTML report pages. # Note that enabling this kind of help will increased HTML report pages size, # so server load and bandwidth. # #LoadPlugin="tooltips" # Plugin: DecodeUTFKeys # Perl modules required: Encode and URI::Escape # Allow AWStats to show correctly (in language charset) keywords/keyphrases # strings even if they were UTF8 coded by the referer search engine. # #LoadPlugin="decodeutfkeys" # Plugin: IPv6 # Perl modules required: Net::IP and Net::DNS # This plugin gives AWStats capability to make reverse DNS lookup on IPv6 # addresses. # Note: If you are interested in having country report, you should use the # geoip or geoipfree plugin instead of enabled reverse DNS lookup. # #LoadPlugin="ipv6" # Plugin: HashFiles # Perl modules required: Storable # AWStats DNS cache files are read/saved as native hash files. This increases # DNS cache files loading speed, above all for very large web sites. # #LoadPlugin="hashfiles" # Plugin: GeoIP # Perl modules required: Geo::IP or Geo::IP::PurePerl (from Maxmind) # Country chart is built from an Internet IP-Country database. # This plugin is useless for intranet only log files. # Note: You must choose between using this plugin (need Perl Geo::IP module # from Maxmind, database is free and up to date) or the GeoIPfree plugin # (need Perl Geo::IPfree module, database is free but not up to date). # There is two versions of Maxmind Country Database: # You can get a free version or purchase a license from Maxmind to get/use a more # accurate version including updates (http://www.maxmind.com/app/perl?rId=awstat) # This plugin reduces AWStats speed of 8% ! # #LoadPlugin="geoip GEOIP_STANDARD /pathto/GeoIP.dat" # Plugin: GeoIPfree # Perl modules required: Geo::IPfree version 0.2+ (from Graciliano M.P.) # Country chart is built from an Internet IP-Country database. # This plugin is useless for intranet only log files. # Note: You must choose between using this plugin (need Perl Geo::IPfree # module, database is free but not up to date) or the GeoIP plugin (need # Perl Geo::IP module from Maxmind, database is also free and up to date). # Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl # module, so install it from elsewhere (from www.cpan.org for example). # This plugin reduces AWStats speed of 10% ! # #LoadPlugin="geoipfree" # Plugin: GeoIP_Region_Maxmind # Perl modules required: Geo::IP (from Maxmind) # This plugin add a chart of hits by regions. Only regions for US and # Canada can be detected. # Note: This plugin need Maxmind GeoIP Perl module AND the region database. # Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState # on Windows but it works great on Linux with default Perl. # You need to purchase a license from Maxmind to get/use the Region database. # This plugin reduces AWStats speed. # #LoadPlugin="geoip_region_maxmind GEOIP_STANDARD /pathto/GeoIPRegion.dat" # Plugin: GeoIP_City_Maxmind # Perl modules required: Geo::IP (from Maxmind) # This plugin add a chart of hits by cities (with country and regions # informations for major countries). # Note: This plugin need Maxmind GeoIP Perl module AND the city database. # Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState # on Windows but it works great on Linux with default Perl. # There is two versions of Maxmind City Database: # You can get a free version or purchase a license from Maxmind to get/use a more # accurate version including updates (http://www.maxmind.com/app/perl?rId=awstat) # This plugin reduces AWStats speed. # #LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /pathto/GeoIPCity.dat" # Plugin: GeoIP_ISP_Maxmind # Perl modules required: Geo::IP (from Maxmind) # This plugin add a chart of hits by ISP. # Note: This plugin need Maxmind GeoIP Perl module AND the ISP database. # Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState # on Windows but it works great on Linux with default Perl. # You need to purchase a license from Maxmind to get/use the ISP database. # This plugin reduces AWStats speed. # #LoadPlugin="geoip_isp_maxmind GEOIP_STANDARD /pathto/GeoIPISP.dat" # Plugin: GeoIP_Org_Maxmind # Perl modules required: Geo::IP (from Maxmind) # This plugin add a chart of hits by Organization name # Note: This plugin need Maxmind GeoIP Perl module AND the Org database. # Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState # on Windows but it works great on Linux with default Perl. # You need to purchase a license from Maxmind to get/use the Org database. # This plugin reduces AWStats speed. # #LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /pathto/GeoIPOrg.dat" # Plugin: UserInfo # Perl modules required: None # Add a text (Firtname, Lastname, Office Department, ...) in authenticated user # reports for each login value. # A text file called userinfo.myconfig.txt, with two fields (first is login, # second is text to show, separated by a tab char) must be created in DirData # directory. # #LoadPlugin="userinfo" # Plugin: HostInfo # Perl modules required: Net::XWhois # Add a column into host chart with a link to open a popup window that shows # info on host (like whois records). # #LoadPlugin="hostinfo" # Plugin: ClusterInfo # Perl modules required: None # Add a text (for example a full hostname) in cluster reports for each cluster # number. # A text file called clusterinfo.myconfig.txt, with two fields (first is # cluster number, second is text to show) separated by a tab char. must be # created into DirData directory. # Note this plugin is useless if ShowClusterStats is set to 0 or if you don't # use a personalized log format that contains %cluster tag. # #LoadPlugin="clusterinfo" # Plugin: UrlAliases # Perl modules required: None # Add a text (Page title, description...) in URL reports before URL value. # A text file called urlalias.myconfig.txt, with two fields (first is URL, # second is text to show, separated by a tab char) must be created into # DirData directory. # #LoadPlugin="urlalias" # Plugin: TimeHiRes # Perl modules required: Time::HiRes (if Perl < 5.8) # Time reported by -showsteps option is in millisecond. For debug purpose. # #LoadPlugin="timehires" # Plugin: TimeZone # Perl modules required: Time::Local # Allow AWStats to correct a bad timezone for user of some IIS that use # GMT date in its log instead of local server time. # This module is useless for Apache and most IIS version. # This plugin reduces AWStats speed of 40% !!!!!!! # #LoadPlugin="timezone +2" # Plugin: Rawlog # Perl modules required: None # This plugin adds a form in AWStats main page to allow users to see raw # content of current log files. A filter is also available. # #LoadPlugin="rawlog" # Plugin: GraphApplet # Perl modules required: None # Supported charts are built by a 3D graphic applet. # #LoadPlugin="graphapplet /awstatsclasses" # EXPERIMENTAL FEATURE #----------------------------------------------------------------------------- # EXTRA SECTIONS #----------------------------------------------------------------------------- # You can define your own charts, you choose here what are rows and columns # keys. This feature is particularly useful for marketing purpose, tracking # products orders for example. # For this, edit all parameters of Extra section. Each set of parameter is a # different chart. For several charts, duplicate section changing the number. # Note: Each Extra section reduces AWStats speed by 8%. # # WARNING: A wrong setup of Extra section might result in too large arrays # that will consume all your memory, making AWStats unusable after several # updates, so be sure to setup it correctly. # In most cases, you don't need this feature. # # ExtraSectionNameX is title of your personalized chart. # ExtraSectionCodeFilterX is list of codes the record code field must match. # Put an empty string for no test on code. # ExtraSectionConditionX are conditions you can use to count or not the hit, # Use one of the field condition # (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) # and a regex to match, after a coma. Use "||" for "OR". # ExtraSectionFirstColumnTitleX is the first column title of the chart. # ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to # extract value from # (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) # and how to extract the value (using regex syntax). Each different value # found will appear in first column of report on a different row. Be sure # that list of different possible values will not grow indefinitely. # ExtraSectionFirstColumnFormatX is the string used to write value. # ExtraSectionStatTypesX are things you want to count. You can use standard # code letters (P for pages,H for hits,B for bandwidth,L for last access). # ExtraSectionAddAverageRowX add a row at bottom of chart with average values. # ExtraSectionAddSumRowX add a row at bottom of chart with sum values. # MaxNbOfExtraX is maximum number of rows shown in chart. # MinHitExtraX is minimum number of hits required to be shown in chart. # # Example to report the 20 products the most ordered by "order.cgi" script #ExtraSectionName1="Product orders" #ExtraSectionCodeFilter1="200 304" #ExtraSectionCondition1="URL,\/cgi\-bin\/order\.cgi||URL,\/cgi\-bin\/order2\.cgi" #ExtraSectionFirstColumnTitle1="Product ID" #ExtraSectionFirstColumnValues1="QUERY_STRING,productid=([^&]+)" #ExtraSectionFirstColumnFormat1="%s" #ExtraSectionStatTypes1=PL #ExtraSectionAddAverageRow1=0 #ExtraSectionAddSumRow1=1 #MaxNbOfExtra1=20 #MinHitExtra1=1 # There is also a global parameter ExtraTrackedRowsLimit that limits the # number of possible rows an ExtraSection can report. This parameter is # here to protect too much memory use when you make a bad setup in your # ExtraSection. It applies to all ExtraSection independently meaning that # none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit. # If you know an ExtraSection will report more rows than its value, you should # increase this parameter or AWStats will stop with an error. # Example: 2000 # Default: 500 # ExtraTrackedRowsLimit=500 #----------------------------------------------------------------------------- # INCLUDES #----------------------------------------------------------------------------- # You can include other config files using the directive with the name of the # config file. # This is particularly useful for users who have a lot of virtual servers, so # a lot of config files and want to maintain common values in only one file. # Note that when a variable is defined both in a config file and in an # included file, AWStats will use the last value read for parameters that # contains one value and AWStats will concat all values from both files for # parameters that are lists of values. # #Include "" Include "/hsphere/shared/awstats/wwwroot/cgi-bin/geo.plugins.conf" lib/.DS_Store000064400000014004152532065620007002 0ustar00Bud1eslg1Scomp_noteslg1Scompq_notesmoDDdutcÏ f_notesmodDdutcÏ f_notesph1Scomp  @€ @€ @€ @ EDSDB `€ @€ @€ @lib/referer_spam.pm000064400000002265152532065620010335 0ustar00# AWSTATS REFERER SPAMMERS ADATABASE #------------------------------------------------------- # If you want to extend AWStats detection capabilities, # you must add an entry in RefererSpamKeys #------------------------------------------------------- # $Revision: 1.6 $ - $Author: eldy $ - $Date: 2007/10/15 02:33:53 $ #package AWSREFSPAMMERS; # RefererSpamKeys # This list is used to know which keywords to search for in referer URLs # to find if hits comes from a referer spammers. If referer URLs has a # cost higher or equal to 4, it's a referer spammer. # key, cost #------------------------------------------------------- %RefererSpamKeys = ( 'adult'=>1, 'anal'=>2, 'dick'=>1, 'erotic'=>2, # erotic, erotica 'gay'=>2, 'lesbian'=>2, 'free'=>1, 'porn'=>2, 'sex'=>2, 'full-list.net'=>4, 'voodoomachine.com'=>4, 'mastodonte.com'=>4, 'surfnomore.com'=>4, 'raverpussies.com'=>4, 'quiveringfuckholes.com'=>4, 'burningbush.netfirms.com'=>4, 'lesbo-tennie-girls.lesbian-hardcore-porn-teen-pics.com'=>4, 'free-people-search-engines.com'=>4, 'iaea.org'=>4, '1stchoicecolo.com'=>4, 'globoads.com'=>4, 'morganindustriesinc.com'=>4, 'chicagodrugclub.com'=>4, 'massivecocks.com'=>4, ); 1; lib/status_http.pm000064400000004150152532065620010240 0ustar00# AWSTATS HTTP STATUS DATABASE #------------------------------------------------------- # If you want to add a HTTP status code, you must add # an entry in httpcodelib. #------------------------------------------------------- # $Revision: 1.1 $ - $Author: eldy $ - $Date: 2003/09/27 13:56:10 $ #package AWSHTTPCODES; # httpcodelib # This list is used to found description of a HTTP status code #----------------------------------------------------------------- %httpcodelib = ( #[Miscellaneous successes] '2xx'=>'[Miscellaneous successes]', '200'=>'OK', # HTTP request OK '201'=>'Created', '202'=>'Request recorded, will be executed later', '203'=>'Non-authoritative information', '204'=>'Request executed', '205'=>'Reset document', '206'=>'Partial Content', #[Miscellaneous redirections] '3xx'=>'[Miscellaneous redirections]', '300'=>'Multiple documents available', '301'=>'Moved permanently (redirect)', '302'=>'Moved temporarily (redirect)', '303'=>'See other document', '304'=>'Not Modified since last retrieval', # HTTP request OK '305'=>'Use proxy', '306'=>'Switch proxy', '307'=>'Moved temporarily', #[Miscellaneous client/user errors] '4xx'=>'[Miscellaneous client/user errors]', '400'=>'Bad Request', '401'=>'Unauthorized', '402'=>'Payment required', '403'=>'Forbidden', '404'=>'Document Not Found', '405'=>'Method not allowed', '406'=>'Document not acceptable to client', '407'=>'Proxy authentication required', '408'=>'Request Timeout', '409'=>'Request conflicts with state of resource', '410'=>'Document gone permanently', '411'=>'Length required', '412'=>'Precondition failed', '413'=>'Request too long', '414'=>'Requested filename too long', '415'=>'Unsupported media type', '416'=>'Requested range not valid', '417'=>'Failed', #[Miscellaneous server errors] '5xx'=>'[Miscellaneous server errors]', '500'=>'Internal server Error', '501'=>'Not implemented', '502'=>'Received bad response from real server', '503'=>'Server busy', '504'=>'Gateway timeout', '505'=>'HTTP version not supported', '506'=>'Redirection failed', #[Unknown] 'xxx'=>'[Unknown]' ); 1; lib/domains.pm000064400000013306152532065620007313 0ustar00# AWSTATS DOMAINS DATABASE #------------------------------------------------------- # If you want to add a new domain to extend AWStats database detection capabilities, # you must add an entry in DomainsHashIDLib. #------------------------------------------------------- # $Revision: 1.12 $ - $Author: eldy $ - $Date: 2007/07/02 21:50:51 $ #package AWSDOM; # DomainsHashIDLib # List of domain with their name ('domain id', 'Domain name') # Official list can be found at http://www.iana.org/cctld/cctld-whois.htm # 'Domain id' should be ISO 3166 code + miscelanous domains #------------------------------------------------------- %DomainsHashIDLib = ( 'localhost','localhost', 'i0','Local network host', 'a2','Satellite access host', 'ac','Ascension Island','ad','Andorra','ae','United Arab Emirates', 'aero','Aero/Travel domains','af','Afghanistan', 'ag','Antigua and Barbuda','ai','Anguilla','al','Albania', 'am','Armenia','an','Netherlands Antilles','ao','Angola', 'aq','Antarctica','ar','Argentina','arpa','Old style Arpanet', 'as','American Samoa','at','Austria','au','Australia','aw','Aruba', 'az','Azerbaidjan','ba','Bosnia-Herzegovina','bb','Barbados', 'bd','Bangladesh','be','Belgium','bf','Burkina Faso','bg','Bulgaria', 'bh','Bahrain','bi','Burundi','biz','Biz domains','bj','Benin','bm','Bermuda', 'bn','Brunei Darussalam','bo','Bolivia','br','Brazil','bs','Bahamas', 'bt','Bhutan','bv','Bouvet Island','bw','Botswana','by','Belarus', 'bz','Belize','ca','Canada','cc','Cocos (Keeling) Islands', 'cd','Congo, Democratic Republic of the', 'cf','Central African Republic','cg','Congo','ch','Switzerland', 'ci','Ivory Coast (Cote D\'Ivoire)','ck','Cook Islands','cl','Chile','cm','Cameroon', 'cn','China','co','Colombia','com','Commercial','coop','Coop domains','cr','Costa Rica', 'cs','Former Czechoslovakia','cu','Cuba','cv','Cape Verde', 'cx','Christmas Island','cy','Cyprus','cz','Czech Republic','de','Germany', 'dj','Djibouti','dk','Denmark','dm','Dominica','do','Dominican Republic', 'dz','Algeria','ec','Ecuador','edu','USA Educational','ee','Estonia', 'eg','Egypt','eh','Western Sahara','er','Eritrea','es','Spain','et','Ethiopia', 'eu','European country', 'fi','Finland','fj','Fiji','fk','Falkland Islands','fm','Micronesia','fo','Faroe Islands', 'fr','France','fx','France (European Territory)','ga','Gabon', 'gb','Great Britain','gd','Grenada','ge','Georgia','gf','French Guyana', 'gg','Guernsey','gh','Ghana','gi','Gibraltar', 'gl','Greenland','gm','Gambia','gn','Guinea','gov','USA Government','gp','Guadeloupe (French)', 'gq','Equatorial Guinea','gr','Greece','gs','S. Georgia & S. Sandwich Isls.', 'gt','Guatemala','gu','Guam (USA)','gw','Guinea Bissau','gy','Guyana', 'hk','Hong Kong','hm','Heard and McDonald Islands','hn','Honduras', 'hr','Croatia','ht','Haiti','hu','Hungary','id','Indonesia','ie','Ireland','il','Israel', 'im','Isle of Man','in','India','info','Info domains','int','International','io','British Indian Ocean Territory', 'iq','Iraq','ir','Iran','is','Iceland','it','Italy', 'je','Jersey','jm','Jamaica','jo','Jordan', 'jobs','Jobs domains', 'jp','Japan','ke','Kenya','kg','Kyrgyzstan', 'kh','Cambodia','ki','Kiribati','km','Comoros','kn','Saint Kitts & Nevis Anguilla', 'kp','North Korea','kr','South Korea','kw','Kuwait', 'ky','Cayman Islands','kz','Kazakhstan','la','Laos','lb','Lebanon','lc','Saint Lucia', 'li','Liechtenstein','lk','Sri Lanka','lr','Liberia','ls','Lesotho','lt','Lithuania', 'lu','Luxembourg','lv','Latvia','ly','Libya','ma','Morocco','mc','Monaco', 'md','Moldova','mg','Madagascar','mh','Marshall Islands','mil','USA Military', 'mk','Macedonia','ml','Mali','mm','Myanmar','mn','Mongolia','mo','Macau', 'mobi','Mobi domains', 'mp','Northern Mariana Islands','mq','Martinique (French)','mr','Mauritania', 'ms','Montserrat','mt','Malta','mu','Mauritius','museum','Museum domains','mv','Maldives', 'mw','Malawi','mx','Mexico','my','Malaysia','mz','Mozambique','na','Namibia','name','Name domains','nato','NATO', 'nc','New Caledonia (French)','ne','Niger','net','Network','nf','Norfolk Island', 'ng','Nigeria','ni','Nicaragua','nl','Netherlands','no','Norway', 'np','Nepal','nr','Nauru','nt','Neutral Zone','nu','Niue','nz','New Zealand','om','Oman', 'org','Non-Profit Organizations','pa','Panama','pe','Peru','pf','Polynesia (French)', 'pg','Papua New Guinea','ph','Philippines','pk','Pakistan','pl','Poland', 'pm','Saint Pierre and Miquelon','pn','Pitcairn Island','pr','Puerto Rico','pro','Professional domains', 'ps','Palestinian Territories','pt','Portugal','pw','Palau','py','Paraguay','qa','Qatar', 're','Reunion (French)','ro','Romania','ru','Russian Federation','rw','Rwanda', 'sa','Saudi Arabia','sb','Solomon Islands','sc','Seychelles', 'sd','Sudan','se','Sweden','sg','Singapore','sh','Saint Helena','si','Slovenia', 'sj','Svalbard and Jan Mayen Islands','sk','Slovak Republic','sl','Sierra Leone', 'sm','San Marino','sn','Senegal','so','Somalia','sr','Suriname', 'st','Sao Tome and Principe','su','Former USSR','sv','El Salvador','sy','Syria','sz','Swaziland', 'tc','Turks and Caicos Islands','td','Chad','tf','French Southern Territories','tg','Togo', 'th','Thailand','tj','Tadjikistan','tk','Tokelau','tm','Turkmenistan','tn','Tunisia', 'to','Tonga','tp','East Timor','tr','Turkey','tt','Trinidad and Tobago','tv','Tuvalu', 'tw','Taiwan','tz','Tanzania','ua','Ukraine','ug','Uganda', 'uk','United Kingdom','um','USA Minor Outlying Islands','us','United States', 'uy','Uruguay','uz','Uzbekistan','va','Vatican City State', 'vc','Saint Vincent & Grenadines','ve','Venezuela','vg','Virgin Islands (British)', 'vi','Virgin Islands (USA)','vn','Vietnam','vu','Vanuatu','wf','Wallis and Futuna Islands', 'ws','Samoa Islands','ye','Yemen','yt','Mayotte','yu','Yugoslavia','za','South Africa', 'zm','Zambia','zr','Zaire','zw','Zimbabwe' ); 1; lib/status_smtp.pm000064400000015642152532065620010254 0ustar00# AWSTATS SMTP STATUS DATABASE #------------------------------------------------------- # If you want to add a SMTP status code, you must add # an entry in smtpcodelib. #------------------------------------------------------- # $Revision: 1.2 $ - $Author: eldy $ - $Date: 2003/11/17 05:12:55 $ #package AWSSMTPCODES; # smtpcodelib # This list is used to found description of a SMTP status code #----------------------------------------------------------------- %smtpcodelib = ( #[Successfull code] '200'=>'Nonstandard success response', '211'=>'System status, or system help reply', '214'=>'Help message', '220'=>' Service ready', '221'=>' Service closing transmission channel', '250'=>'Requested mail action taken and completed', # Your ISP mail server have successfully executes a command and the DNS is reporting a positive delivery. '251'=>'User not local: will forward to ', # Your message to a specified email address is not local to the mail server, but it will accept and forward the message to a different recipient email address. '252'=>'Recipient cannot be verified', # but mail server accepts the message and attempts delivery. '354'=>'Start mail input and end with .', # Indicates mail server is ready to accept the message or instruct your mail client to send the message body after the mail server have received the message headers. #[Temporary error code] Ask sender to try later to complete successfully '421'=>' Service not available, closing transmission channel', # This may be a reply to any command if the service knows it must shut down. '450'=>'Requested mail action not taken: mailbox busy, DNS check failed or access denied for other reason', # Your ISP mail server indicates that an email address does not exist or the mailbox is busy. It could be the network connection went down while sending, or it could also happen if the remote mail server does not want to accept mail from you for some reason i.e. (IP address, From address, Recipient, etc.) '451'=>'Requested mail action aborted: error in processing', # Your ISP mail server indicates that the mailing has been interrupted, usually due to overloading from too many messages or transient failure is one in which the message sent is valid, but some temporary event prevents the successful sending of the message. Sending in the future may be successful. '452'=>'Requested mail action not taken: insufficient system storage', # Your ISP mail server indicates, probable overloading from too many messages and sending in the future may be successful. '453'=>'Too many messages', # Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up it could go over the max number of messages per connection. To see if this is the case you can try submitting only a few messages to that domain at a time and then keep increasing the number until you find the maximum number accepted by the server. # Postfix code for unknown_client_reject_code (postfix default=450) with reject_unknown_clients rule '470'=>'Access denied: Unknown SMTP client hostname (without DNS A or MX record)', # Postfix code for unknown_address_reject_code (postfix default=450) with reject_unknown_sender_domain rule '471'=>'Access denied: Unknown domain for sender or recipient email address (without DNS A or MX record)', #[Permanent error code] '500'=>'Syntax error, command unrecognized or command line too long', '501'=>'Syntax error in parameters or arguments', '502'=>'Command not implemented', '503'=>'Server encountered bad sequence of commands', '504'=>'Command parameter not implemented', '521'=>' does not accept mail or closing transmission channel', # You must be pop-authenticated before you can use this SMTP server and you must use your mail address for the Sender/From field. '530'=>'Access denied', # a Sendmailism ? '550'=>'Requested mail action not taken: relaying not allowed, unknown recipient user, ...', # Sending an email to recipients outside of your domain are not allowed or your mail server does not know that you have access to use it for relaying messages and authentication is required. Or to prevent the sending of SPAM some mail servers will not allow (relay) send mail to any e-mail using another company’s network and computer resources. '551'=>'User not local: please try or Invalid Address: Relay request denied', '552'=>'Requested mail action aborted: exceeded storage allocation', # ISP mail server indicates, probable overloading from too many messages. '553'=>'Requested mail action not taken: mailbox name not allowed', # Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up (being sent) for a domain, it could go over the maximum number of messages per connection and/or some change to the message and/or destination must be made for successful delivery. '554'=>'Requested mail action rejected: access denied', '557'=>'Too many duplicate messages', # Resource temporarily unavailable Indicates (probable) that there is some kind of anti-spam system on the mail server. # Postfix code for access_map_reject_code (postfix default=554) with access map rule '570'=>'Access denied: access_map violation (on SMTP client or HELO hostname, sender or recipient email address)', # Postfix code for maps_rbl_reject_code (postfix default=554) with maps_rbl_domains rule '571'=>'Access denied: SMTP client listed in RBL', # Postfix code for relay_domains_reject_code (postfix default=554) with relay_domains_reject rule '572'=>'Access denied: Relay not authorized or not local host not a gateway', # Postfix code for unknown_client_reject_code (postfix default=450) with reject_unknown_client rule '573'=>'Access denied: Unknown SMTP client hostname (without DNS A or MX record)', # Postfix code for invalid_hostname_reject_code (postfix default=501) with reject_invalid_hostname rule '574'=>'Access denied: Bad syntax for client HELO hostname (Not RFC compliant)', # Postfix code for reject_code (postfix default=554) with smtpd_client_restrictions '575'=>'Access denied: SMTP client hostname rejected', # Postfix code for unknown_address_reject_code (postfix default=450) with reject_unknown_sender_domain or reject_unknown_recipient_domain rule '576'=>'Access denied: Unknown domain for sender or recipient email address (without DNS A or MX record)', # Postfix code for unknown_hostname_reject_code (postfix default=501) with reject_unknown_hostname rule '577'=>'Access denied: Unknown client HELO hostname (without DNS A or MX record)', # Postfix code for non_fqdn_reject_code (Postfix default=504) with reject_non_fqdn_hostname, reject_non_fqdn_sender or reject_non_fqdn_recipient rule '578'=>'Access denied: Invalid domain for client HELO hostname, sender or recipient email address (not FQDN)', ); 1;lib/mime.pm000064400000011470152532065620006610 0ustar00# AWSTATS MIME DATABASE #------------------------------------------------------- # If you want to add MIME types, # you must add an entry in MimeFamily and may be MimeHashLib #------------------------------------------------------- # $Revision: 1.23 $ - $Author: eldy $ - $Date: 2006/02/14 21:31:15 $ #package AWSMIME; # MimeHashLib # List of mime's label ("mime id in lower case", "mime text") #--------------------------------------------------------------- %MimeHashLib = ( 'text', 'Text file', 'page', 'HTML or XML static page', 'script', 'Dynamic Html page or Script file', 'pl', 'Dynamic Perl Script file', 'php', 'Dynamic PHP Script file', 'image', 'Image', 'document', 'Document', 'package', 'Package', 'archive', 'Archive', 'audio', 'Audio file', 'video', 'Video file', 'javascript','JavaScript file', 'vbs', 'Visual Basic script', 'conf', 'Config file', 'css', 'Cascading Style Sheet file', 'xsl', 'Extensible Stylesheet Language file', 'runtime', 'Binary runtime', 'library', 'Binary library', 'swf', 'Macromedia Flash Animation', 'dtd', 'Document Type Definition', 'csv', 'Comma Separated Value file', 'jnlp', 'Java Web Start launch file', 'lit', 'Microsoft Reader e-book', 'svg', 'Scalable Vector Graphics', 'ai', 'Adobe Illustrator file', 'phshop', 'Adobe Photoshop image file', 'ttf', 'TrueType scalable font file', 'fon', 'Font file', 'pdf', 'Adobe Acrobat file', ); # MimeHashIcon # Each Mime ID is associated to a string that is the name of icon # file for this Mime type. #--------------------------------------------------------------------------- %MimeHashIcon = ( # Text file 'txt','text', 'log','text', # HTML Static page 'html','html', 'htm','html', 'hdml','html', 'wml','html', 'wmlp','html', 'xhtml','html', 'xml','html', 'vak','glasses', 'sgm','html', 'sgml','html', # HTML Dynamic pages or script 'asp','script', 'aspx','script', 'asmx','script', 'cfm','script', 'jsp','script', 'cgi','script', 'ksh','script', 'php','php', 'php3','php', 'php4','php', 'pl','pl', 'py','script', 'sh','script', 'shtml','html', 'tcl','script', 'xsp','script', # Image 'gif','image', 'png','image', 'bmp','image', 'jpg','image', 'jpeg','image', 'cdr','image', 'ico','image', 'svg','svg', 'psd','phshop', # Document 'doc','doc', 'wmz','doc', 'rtf','doc', 'pdf','pdf', 'xls','xls', 'ppt','ppt', 'pps','ppt', 'sxw','other', 'sxc','other', 'sxi','other', 'sxd','other', 'csv','other', 'xsl','html', 'lit','lit', 'ai','ai', # Package 'rpm',($LogType eq 'S'?'audio':'archive'), 'deb','archive', 'msi','archive', # Archive '7z','archive', 'ace','archive', 'bz2','archive', 'gz','archive', 'jar','archive', 'rar','archive', 'tar','archive', 'tgz','archive', 'tbz2','archive', 'z','archive', 'zip','archive', # Audio 'mp3','audio', 'ogg','audio', 'wma','audio', 'wav','audio', # Video 'avi','video', 'divx','video', 'mp4','video', 'mpeg','video', 'mpg','video', 'rm','real', 'swf','flash', 'wmv','video', 'mov','quicktime', 'qt','quicktime', # Web scripts 'js','jscript', 'vbs','jscript', # Config 'cf','other', 'conf','other', 'css','other', 'ini','other', 'dtd','other', # Program 'exe','script', 'dll','script', 'jnlp','jnlp', # Fonts 'ttf','ttf', 'fon','fon', ); %MimeHashFamily=( # Text file 'txt','text', 'log','text', # HTML Static page 'html','page', 'htm','page', 'wml','page', 'wmlp','page', 'xhtml','page', 'xml','page', 'vak','page', 'sgm','page', 'sgml','page', # HTML Dynamic pages or script 'asp','script', 'aspx','script', 'asmx','script', 'cfm','script', 'jsp','script', 'cgi','script', 'ksh','script', 'php','php', 'php3','php', 'php4','php', 'pl','pl', 'py','script', 'sh','script', 'shtml','script', 'tcl','script', 'xsp','script', # Image 'gif','image', 'png','image', 'bmp','image', 'jpg','image', 'jpeg','image', 'cdr','image', 'ico','image', 'svg','svg', 'psd','phshop', 'ai','ai', # Document 'doc','document', 'wmz','document', 'rtf','document', 'pdf','pdf', 'xls','document', 'ppt','document', 'pps','document', 'sxw','document', 'sxc','document', 'sxi','document', 'sxd','document', 'csv','csv', 'xsl','xsl', 'lit','lit', # Package 'rpm',($LogType eq 'S'?'audio':'package'), 'deb','package', 'msi','package', # Archive '7z','archive', 'ace','archive', 'bz2','archive', 'gz','archive', 'jar','archive', 'rar','archive', 'tar','archive', 'tgz','archive', 'tbz2','archive', 'z','archive', 'zip','archive', # Audio 'mp3','audio', 'ogg','audio', 'wav','audio', 'wma','audio', # Video 'avi','video', 'divx','video', 'mp4','video', 'mpeg','video', 'mpg','video', 'rm','video', 'swf','swf', 'wmv','video', 'mov','video', 'qt','video', # Web scripts 'js','javascript', 'vbs','vbs', # Config 'cf','conf', 'conf','conf', 'css','css', 'ini','conf', 'dtd','dtd', # Program 'exe','runtime', 'jnlp','jnlp', 'dll','library', # Font 'ttf','ttf', 'fon','fon', ); 1; lib/worms.pm000064400000004413152532065620007027 0ustar00# AWSTATS WORMS ADATABASE #----------------------------------------------------------------------------- # If you want to add worms to extend AWStats database detection capabilities, # you must add an entry in WormsSearchIDOrder, WormsHashID and WormsHashLib. #----------------------------------------------------------------------------- # $Revision: 1.9 $ - $Author: eldy $ - $Date: 2004/03/04 12:45:10 $ #package AWSWORMS; # WormsSearchIDOrder # This list is used to know in which order to search Worm IDs. # This array is array of Worms matching criteria found in URL submitted # to web server. This is a not case sensitive ID. #----------------------------------------------------------------------------- @WormsSearchIDOrder = ( '\/default\.ida', '\/null\.idq', 'exe\?\/c\+dir', 'root\.exe', 'admin\.dll', '\/nsiislog\.dll', '\/sumthin', '\/winnt\/system32\/cmd\.exe', '\/_vti_inf\.html', '\/_vti_bin\/shtml\.exe\/_vti_rpc' ); # WormsHashID # Each Worms search ID is associated to a string that is unique name of worm. #----------------------------------------------------------------------------- %WormsHashID = ( '\/default\.ida','code_red', '\/null\.idq','code_red', 'exe\?\/c\+dir','nimda', 'root\.exe','nimda', 'admin\.dll','nimda', '\/nsiislog\.dll','mpex', '\/sumthin','sumthin', '\/winnt\/system32\/cmd\.exe','nimda', '\/_vti_inf\.html','unknown', '\/_vti_bin\/shtml\.exe\/_vti_rpc','unknown' #'/MSOffice/cltreq.asp' # Not a worm, a check by IE to see if discussion bar is turned on #'/_vti_bin/owssrv.dll' # Not a worm, a check by IE to see if discussion bar is turned on ); # WormsHashLib # Worms name list ('worm unique id in lower case','worm clear text') # Each unique ID string is associated to a label #----------------------------------------------------------------------------- %WormsHashLib = ( 'code_red','Code Red family worm', 'mpex','IIS Exploit worm', 'nimda','Nimda family worm', 'sumthin','Sumthin worm', 'unknown','Unknown worm' ); # WormsHashTarget # Worms target list ('worm unique id in lower case','worm target clear text') # Each unique ID string is associated to a target #----------------------------------------------------------------------------- %WormsHashTarget = ( 'code_red','IIS', 'mpex','IIS', 'nimda','IIS', 'sumthin','?', 'unknown','MS products', ); 1; lib/browsers_phone.pm000064400000124712152532065620010724 0ustar00# AWSTATS BROWSERS DATABASE #------------------------------------------------------- # If you want to add a Browser to extend AWStats database detection capabilities, # you must add an entry in BrowsersSearchIDOrder and in BrowsersHashIDLib. #------------------------------------------------------- # Originale version by malu # $Revision: 1.6 $ - $Author: eldy $ - $Date: 2006/01/22 12:55:18 $ #package AWSUA; # BrowsersSearchIDOrder # This list is used to know in which order to search Browsers IDs (Most # frequent one are first in this list to increase detect speed). # It contains all matching criteria to search for in log fields. # Note: Regex IDs are in lower case and ' ' and '+' are changed into '_' #------------------------------------------------------- @BrowsersSearchIDOrder = ( # Most frequent standard web browsers are first in this list (except msie, netscape and firefox) 'firebird', 'go!zilla', 'icab', 'konqueror', 'links', 'lynx', 'omniweb', 'opera', # Other standard web browsers '22acidownload', 'aol\-iweng', 'amaya', 'amigavoyager', 'aweb', 'bpftp', 'camino', 'chimera', 'cyberdog', 'dillo', 'dreamcast', 'xbox', 'downloadagent', 'ecatch', 'emailsiphon', 'encompass', 'epiphany', 'friendlyspider', 'fresco', 'galeon', 'getright', 'netants', 'headdump', 'hotjava', 'ibrowse', 'intergo', 'javaws', 'k\-meleon', 'linemodebrowser', 'lotus\-notes', 'macweb', 'multizilla', 'ncsa_mosaic', 'netcaptor', 'netpositive', 'nutscrape', 'msfrontpageexpress', 'phoenix', 'shiira', # Must be before safari 'safari', 'tzgeturl', 'viking', 'webfetcher', 'webexplorer', 'webmirror', 'webvcr', # Site grabbers 'teleport', 'webcapture', 'webcopier', # Media only browsers 'real', 'winamp', # Works for winampmpeg and winamp3httprdr 'windows\-media\-player', 'audion', 'freeamp', 'itunes', 'jetaudio', 'mint_audio', 'mpg123', 'mplayer', 'nsplayer', 'qts', 'sonique', 'uplayer', 'xaudio', 'xine', 'xmms', # RSS Readers 'aggrevator', 'feeddemon', 'feedreader', 'jetbrains_omea_reader', 'netnewswire', 'newsfire', 'newsgator', 'newzcrawler', 'pluck', 'pulpfiction', 'rssbandit', 'rssreader', 'rssowl', 'sage', 'sharpreader', 'shrook', 'straw', 'syndirella', # PDA/Phonecell browsers 'alcatel\-be4', 'alcatel\-be5', 'alcatel\-bf3', 'alcatel\-bf4', 'alcatel\-bf5', 'alcatel\-bg3', 'alcatel\-bh4', 'auditautomatic', 'ericssonr520', 'ericssont20', 'ericssont29', 'ericssont39', 'ericssont65', 'ericssont66', 'ericssont68', 'lg\-g7000', 'mitsu', 'mot\-c350m', 'mot\-c4', 'mot\-cb', 'mot\-d4', 'mot\-d5', 'mot\-d8', 'mot\-e1', 'mot\-f0', 'mot\-f6', 'mot\-pan4', 'mot\-phx4', 'mot\-sap4', 'mot\-t720', 'mot\-ta02', 'mot\-v66m', 'mot\-v708', 'mot\-8300', 'mot\-a\-86', 'mot\-af', 'mot\-c2', 'mot\-c350', 'mot\-c550', 'mot\-c650', 'mot\-cf', 'mot\-f5', 'mot\-fe', 'mot\-t280', 'mot\-v300', 'mot\-v400', 'mot\-v500', 'mot\-v525', 'mot\-v600', 'mot\-v60m', 'mot\-v80', 'mot\-v810', 'nokia3100', 'nokia3200', 'nokia3560', 'nokia3595', 'nokia6220', 'nokia8265', 'nokia3300', 'nokia3530', 'nokia3590', 'nokia6108', 'nokia6211', 'nokia6600', 'nokia6650', 'nokia9210', 'nokian\-gage', 'nokia3210', 'nokia3310', 'nokia3330', 'nokia3350', 'nokia3410', 'nokia3510', 'nokia3650', 'nokia5100', 'nokia5110', 'nokia5130', 'nokia5210', 'nokia5510', 'nokia6100', 'nokia6110', 'nokia6130', 'nokia6150', 'nokia6210', 'nokia6250', 'nokia6310\/', 'nokia6310i', 'nokia6500', 'nokia6510', 'nokia6610', 'nokia6800', 'nokia7110', 'nokia7210', 'nokia7250', 'nokia7650', 'nokia8110i', 'nokia8210', 'nokia8310', 'nokia8810', 'nokia8850', 'nokia8855', 'nokia8890', 'nokia8910', 'nokia9000', 'nokia9110', 'nokia9210i', 'nokia3660', 'nokia6230', 'nokia6340i', 'nokia6810', 'nokia6820', 'nokia7200', 'nokia7600', 'nokia7610', 'opwv\-sdk', 'panasonic\-gad35', 'panasonic\-gad67', 'panasonic\-gad68', 'panasonic\-gad6\*', 'panasonic\-gad75', 'panasonic\-gad76', 'panasonic\-gad87', 'panasonic\-gad88', 'panasonic\-gad95', 'panasonic\-gad96', 'panasonic\-g50', 'panasonic\-g60', 'panasonic\-x60', 'panasonic\-x70', 'philips\-az\@lis238', 'philips\-az\@lis268', 'philips\-az\@lis288', 'philips\-fisio120', 'philips\-fisio121', 'philips\-fisio311', 'philips\-fisio312', 'philips\-fisio316', 'philips\-fisio610', 'philips\-fisio620', 'philips\-fisio_625', 'philips\-fisio_820', 'philips\-fisio_822', 'philips\-fisio_825', 'philips\-v21wap', 'philips\-xenium9\@9', 'r380', 'r600', 'sagem\-3xxx', 'sagem\-9xx', 'sagem\-myx\-2', 'sagem\-myx\-3', 'sagem\-myx\-5\/', 'sagem\-myx\-5d', 'sagem\-myx\-5m', 'sagem\-myx\-6', 'samsung\-sgh\-e700', 'samsung\-sgh\-s500', 'samsung\-sgh\-t500', 'samsung\-sgh\-a300', 'samsung\-sgh\-a400', 'samsung\-sgh\-a800', 'samsung\-sgh\-n100', 'samsung\-sgh\-n400_up', 'samsung\-sgh\-n500', 'samsung\-sgh\-n600', 'samsung\-sgh\-n620', 'samsung\-sgh\-r200s', 'samsung\-sgh\-r200', 'samsung\-sgh\-r210', 'samsung\-sgh\-s100', 'samsung\-sgh\-t100', 'samsung\-sgh\-t400', 'samsung\-sgh\-v200', 'samsung_sgh\-x100', 'samsung\-sgh\-e100', 'samsung\-sgh\-e708', 'samsung\-sgh\-e800', 'samsung\-sgh\-x100', 'samsung\-sgh\-x600', 'sec\-sghc100', 'sec\-sghp100', 'sec\-sghp400', 'sec\-sghq200', 'sec\-sghs200', 'sec\-spha460', 'sec\-sghs100', 'sec\-sghs300', 'sec\-sghv200', 'sec\-sghv205', 'sec\-sghd410', 'sec\-sghe105', 'sec\-sghe410', 'sec\-sghe400', 'sec\-sghe600', 'sec\-sghe710', 'sec\-sghe715', 'sec\-sghs105', 'sec\-sghx105', 'sec\-sghx426', 'sec\-sghx427', 'sec\-sghx430', 'sec\-sghx450', 'sharp\-tq\-gx10', 'sharp\-tq\-gx12', 'sie\-2128', 'sie\-6618', 'sie\-a55', 'sie\-c60', 'sie\-c62', 'sie\-m55', 'sie\-mc60', 'sie\-sl55', 'sie\-slin', 'sie\-a50', 'sie\-c3i', 'sie\-c45', 'sie\-c55', 'sie\-m50', 'sie\-me45', 'sie\-mt50', 'sie\-s35', 'sie\-s40', 'sie\-s45', 'sie\-s55', 'sie\-sl45', 'sie\-slik', 'sie\-a57', 'sie\-a60', 'sie\-c56', 'sie\-c61', 'sie\-cf62', 'sie\-m65', 'sie\-s56', 'sie\-s57c', 'sie\-s65', 'sie\-sl5e', 'sie\-st60', 'sie\-sx1', 'sonyericssonp900', 'sonyericssont230', 'sonyericssont306', 'sonyericssont316', 'sonyericssont616', 'sonyericssonz600', 'sonyericssonp800', 'sonyericssont100', 'sonyericssont200', 'sonyericssont300', 'sonyericssont310', 'sonyericssont600', 'sonyericssont610', 'sonyericssont68\/', 'sonyericssont68i', 'sonyericssont620', 'sonyericssont630', 'lg\-c1100', 'lg\-c1200', 'lg\-c2200', 'lg\-g1500', 'lg\-g3100', 'lg\-g4015', 'lg\-g5300', 'lg\-g5400', 'lg\-g7050', 'lg\-g7100', 'lg\-l1100', 'lg\-l1200', 'mot\-85', 'mot\-a\-0a', 'mot\-a\-2b', 'mot\-c357', 'mot\-c380', 'mot\-e398', 'mot\-v180', 'mot\-v220', 'mot\-v3', 'mot\-v980', 'nokia2650', 'nokia3108', 'nokia3120', 'nokia3220', 'nokia5140', 'nokia6010', 'nokia6170', 'nokia6260', 'nokia6630', 'nokia6670', 'nokia7260', 'sie\-a65', 'sie\-c65', 'sie\-c6v', 'sie\-cx65', 'sie\-cx70', 'sie\-sl65', 'sonyericssonk500i', 'sonyericssonk700c', 'sonyericssonk700i', 'sonyericssonp910i', 'sonyericssons700i', 'sonyericssont226', 'sonyericssont628', 'sonyericssonz1010', 'sonyericssonz200', 'alcatel\-be3', 'alcatel\-oh5', 'alcatel\-th3', 'alcatel\-th4', 'ericssona2628s', 'ericssonr320', 'lg\-c1300', 'lg\-c3100', 'lg\-f2100', 'lg\-g1600', 'lg\-g210', 'lg\-g4010', 'lg\-g510', 'lg\-g5310', 'lg\-g5600', 'lg\-g650', 'lg\-g7070', 'lg\-l3100', 'lg\-t5100', 'mot\-2200', 'mot\-32', 'mot\-74', 'mot\-76', 'mot\-87', 'mot\-8700', 'mot\-a\-0e', 'mot\-a\-1c', 'mot\-a760', 'mot\-a835', 'mot\-c385', 'mot\-v26x', 'mot\-v290', 'mot\-v505', 'mot\-v547', 'mot\-v551', 'mot\-v620', 'mot\-v690', 'mot\-v878', 'sie\-3618', 'sie\-a56', 'sie\-c6c', 'sie\-cx6c', 'sie\-cx6v', 'sie\-m6c', 'sie\-m6v', 'sie\-s46', 'sie\-sk65', 'sie\-sl56', 'sie\-st55', 'sagem\-mo130', 'sagem\-myc', 'sagem\-myv', 'sagem\-myx3', 'sagem\-myx5', 'sagem\-myx', 'lg\-G610', 'mot\-v550', 'mot\-a\-1f', 'mot\-c155', 'mot\-c975', 'mot\-c980', 'mot\-e380', 'mot\-e680', 'mot\-ed', 'mot\-t725e', 'mot\-v150', 'mot\-v171', 'mot\-v535', 'mot\-v545', 'mot\-v635', 'mot\-v870', 'nokia2112', 'nokia3620', 'nokia6020', 'nokia6200', 'nokia6620', 'nokia6680', 'nokia7270', 'nokia7280', 'nokia9500', 'panasonic\-a200', 'panasonic\-g70', 'panasonic\-x100', 'panasonic\-x300', 'panasonic\-x400', 'panasonic\-x500', 'panasonic\-x66', 'panasonic\-x77', 't66', 'n21i', 'n22i', 'ts21i', 'portalmmm', 'ipcheck', 'cnf2', # Others (TV) 'webtv', # Other kind of browsers 'gnome\-vfs', 'neon', 'apt', 'curl', 'csscheck', 'wget', 'chilkat', 'webdownloader_for_x', 'w3m', 'wdg_validator', 'webzip', 'staroffice', 'gnus', 'liferea', 'nikto', 'microsoft\-webdav\-miniredir', 'mozilla', # Must be at end because a lot of browsers contains mozilla in string 'libwww', # Must be at end because some browser have both 'browser id' and 'libwww' 'lwp', ); # BrowsersHashIDLib # List of browser's name ('browser id in lower case', 'browser text') #--------------------------------------------------------------- %BrowsersHashIDLib = ( # Common web browsers text 'msie','MS Internet Explorer', 'netscape','Netscape', 'firefox','Firefox', 'firebird','Firebird (Old Firefox)', 'go!zilla','Go!Zilla', 'icab','iCab', 'konqueror','Konqueror', 'links','Links', 'lynx','Lynx', 'omniweb','OmniWeb', 'opera','Opera', # Other standard web browsers '22acidownload','22AciDownload', 'aol\-iweng','AOL-Iweng', 'amaya','Amaya', 'amigavoyager','AmigaVoyager', 'aweb','AWeb', 'bpftp','BPFTP', 'camino','Camino', 'chimera','Chimera (Old Camino)', 'cyberdog','Cyberdog', 'dillo','Dillo', 'dreamcast','Dreamcast', 'xbox', 'XBoX', 'downloadagent','DownloadAgent', 'ecatch', 'eCatch', 'emailsiphon','EmailSiphon', 'encompass','Encompass', 'epiphany','Epiphany', 'friendlyspider','FriendlySpider', 'fresco','ANT Fresco', 'galeon','Galeon', 'getright','GetRight', 'netants','NetAnts', 'headdump','HeadDump', 'hotjava','Sun HotJava', 'ibrowse','iBrowse', 'intergo','InterGO', 'k\-meleon','K-Meleon', 'linemodebrowser','W3C Line Mode Browser', 'lotus\-notes','Lotus Notes web client', 'macweb','MacWeb', 'multizilla','MultiZilla', 'ncsa_mosaic','NCSA Mosaic', 'netcaptor','NetCaptor', 'netpositive','NetPositive', 'nutscrape', 'Nutscrape', 'msfrontpageexpress','MS FrontPage Express', 'phoenix','Phoenix', 'shiira','Shiira', 'safari','Safari', 'tzgeturl','TzGetURL', 'viking','Viking', 'webfetcher','WebFetcher', 'webexplorer','IBM-WebExplorer', 'webmirror','WebMirror', 'webvcr','WebVCR', # Site grabbers 'teleport','TelePort Pro', 'webcapture','Acrobat Webcapture', 'webcopier', 'WebCopier', # Media only browsers 'real','Real player or compatible (media player)', 'winamp','WinAmp (media player)', # Works for winampmpeg and winamp3httprdr 'windows\-media\-player','Windows Media Player (media player)', 'audion','Audion (media player)', 'freeamp','FreeAmp (media player)', 'itunes','Apple iTunes (media player)', 'jetaudio','JetAudio (media player)', 'mint_audio','Mint Audio (media player)', 'mpg123','mpg123 (media player)', 'mplayer','The Movie Player (media player)', 'nsplayer','NetShow Player (media player)', 'qts','Quicktime', 'sonique','Sonique (media player)', 'uplayer','Ultra Player (media player)', 'xaudio','Some XAudio Engine based MPEG player (media player)', 'xine','Xine, a free multimedia player (media player)', 'xmms','XMMS (media player)', # RSS Readers 'aggrevator', 'Aggrevator (RSS Reader)', 'feeddemon', 'FeedDemon (RSS Reader)', 'feedreader', 'FeedReader (RSS Reader)', 'jetbrains_omea_reader', 'Omea Reader (RSS Reader)', 'netnewswire', 'NetNewsWire (RSS Reader)', 'newsfire', 'NewsFire (RSS Reader)', 'newsgator', 'NewsGator (RSS Reader)', 'newzcrawler', 'NewzCrawler (RSS Reader)', 'pluck', 'Pluck (RSS Reader)', 'pulpfiction', 'PulpFiction (RSS Reader)', 'rssbandit', 'RSS Bandit (RSS Reader)', 'rssreader', 'RssReader (RSS Reader)', 'rssowl', 'RSSOwl (RSS Reader)', 'sage', 'Sage (RSS Reader)', 'sharpreader', 'SharpReader (RSS Reader)', 'shrook', 'Shrook (RSS Reader)', 'straw', 'Straw (RSS Reader)', 'syndirella', 'Syndirella (RSS Reader)', # PDA/Phonecell browsers 'alcatel\-be4','Alcatel BE4 (phone)', 'alcatel\-be5','Alcatel BE5 (phone)', 'alcatel\-bf3','Alcatel OT311 (phone)', 'alcatel\-bf4','Alcatel OT511 (phone)', 'alcatel\-bf5','Alcatel BF5 (phone)', 'alcatel\-bg3','Alcatel BG3 (phone)', 'alcatel\-bh4','Alcatel BH4 (phone)', 'auditautomatic','Audit ByTel (phone)', 'ericssonr520','SonyEricsson R520-R2 (phone)', 'ericssont20','SonyEricsson T20e (phone)', 'ericssont29','SonyEricsson 29s (phone)', 'ericssont39','SonyEricsson T39m (phone)', 'ericssont65','SonyEricsson T65 (phone)', 'ericssont66','SonyEricsson T66 (phone)', 'ericssont68','SonyEricsson T68 (phone)', 'lg\-g7000','LG G7000 (phone)', 'mitsu','Trium Eclipse (phone)', 'mot\-c350m','Motorola C350M (phone)', 'mot\-c4','Motorola Talkabout T2288 (phone)', 'mot\-cb','Motorola Timeport P7389 (phone)', 'mot\-d4','Motorola Timeport P7389e (phone)', 'mot\-d5','motorola-t191 (phone)', 'mot\-d8','Motorola T250 (phone)', 'mot\-e1','Motorola ? (E1) (phone)', 'mot\-f0','Motorola v50 (phone)', 'mot\-f6','Motorola Accompli 008 (phone)', 'mot\-pan4','Motorola T280 (phone)', 'mot\-phx4','Motorola ? (PHX4) (phone)', 'mot\-sap4','Motorola V66 (phone)', 'mot\-t720','Motorola T720 (phone)', 'mot\-ta02','Motorola ? (TA02) (phone)', 'mot\-v66m','Motorola V66M (phone)', 'mot\-v708','Motorola V708 (phone)', 'mot\-8300','Motorola 8300 (phone)', 'mot\-a-86','Motorola A86 (phone)', 'mot\-af','Motorola AF (phone)', 'mot\-c2','Motorola C2 (phone)', 'mot\-c350','Motorola C350 (phone)', 'mot\-c550','Motorola C550 (phone)', 'mot\-c650','Motorola C650 (phone)', 'mot\-cf','Motorola CF (phone)', 'mot\-f5','Motorola F5 (phone)', 'mot\-fe','Motorola FE (phone)', 'mot\-t280','Motorola T280 (phone)', 'mot\-v300','Motorola V300 (phone)', 'mot\-v400','Motorola V400 (phone)', 'mot\-v500','Motorola V500 (phone)', 'mot\-v525','Motorola V525 (phone)', 'mot\-v600','Motorola V600 (phone)', 'mot\-v60m','Motorola V60M (phone)', 'mot\-v80','Motorola V80 (phone)', 'mot\-v810','Motorola V810 (phone)', 'nokia3200','Nokia 3200 (phone)', 'nokia3560','Nokia 3560 (phone)', 'nokia3595','Nokia 3595 (phone)', 'nokia6220','Nokia 6200 (phone)', 'nokia8265','Nokia 8265 (phone)', 'nokia3100','Nokia 3100 (phone)', 'nokia3300','Nokia 3300 (phone)', 'nokia3530','Nokia 3530 (phone)', 'nokia3590','Nokia 3590 (phone)', 'nokia6108','Nokia 6108 (phone)', 'nokia6211','Nokia 6211 (phone)', 'nokia6600','Nokia 6600 (phone)', 'nokia6650','Nokia 6650 (phone)', 'nokia9210','Nokia 9210 (phone)', 'nokian\-gage','Nokia N-Gage (phone)', 'nokia3210','Nokia 3210 (phone)', 'nokia3310','Nokia 3310 (phone)', 'nokia3330','Nokia 3330 (phone)', 'nokia3350','Nokia 3350 (phone)', 'nokia3410','Nokia 3410 (phone)', 'nokia3510','Nokia 3510 (phone)', 'nokia3650','Nokia 3650 (phone)', 'nokia5100','Nokia 5100 (phone)', 'nokia5110','Nokia 5110 (phone)', 'nokia5130','Nokia 5130 (phone)', 'nokia5210','Nokia 5210 (phone)', 'nokia5510','Nokia 5510 (phone)', 'nokia6100','Nokia 6100 (phone)', 'nokia6110','Nokia 6110 (phone)', 'nokia6130','Nokia 6130 (phone)', 'nokia6150','Nokia 6150 (phone)', 'nokia6210','Nokia 6210 (phone)', 'nokia6250','Nokia 6250 (phone)', 'nokia6310/','Nokia 6310 (phone)', 'nokia6310i','Nokia 6310i (phone)', 'nokia6500','Nokia 6500 (phone)', 'nokia6510','Nokia 6510 (phone)', 'nokia6610','Nokia 6610 (phone)', 'nokia6800','Nokia 6800 (phone)', 'nokia7110','Nokia 7110 (phone)', 'nokia7210','Nokia 7210 (phone)', 'nokia7250','Nokia 7250 (phone)', 'nokia7650','Nokia 7650 (phone)', 'nokia8110i','Nokia 8110i (phone)', 'nokia8210','Nokia 8210 (phone)', 'nokia8310','Nokia 8310 (phone)', 'nokia8810','Nokia 8810 (phone)', 'nokia8850','Nokia 8850 (phone)', 'nokia8855','Nokia 8855 (phone)', 'nokia8890','Nokia 8890 (phone)', 'nokia8910','Nokia 8910 (phone)', 'nokia9000','Nokia 9000i (phone)', 'nokia9110','Nokia 9110 (phone)', 'nokia9210i','Nokia 9210i (phone)', 'nokia3660','Nokia 3660 (phone)', 'nokia6230','Nokia 6230 (phone)', 'nokia6340i','Nokia 6340i (phone)', 'nokia6810','Nokia 6810 (phone)', 'nokia6820','Nokia 6820 (phone)', 'nokia7200','Nokia 7200 (phone)', 'nokia7600','Nokia 7600 (phone)', 'nokia7610','Nokia 7610 (phone)', 'opwv\-sdk','openwave sdk (phone)', 'panasonic\-gad35','Panasonic GD35 (phone)', 'panasonic\-gad67','panasonic GD67 (phone)', 'panasonic\-gad68','panasonic-gd68 (phone)', 'panasonic\-gad6\*','Panasonic GD6xx (phone)', 'panasonic\-gad75','panasonic-gd75 (phone)', 'panasonic\-gad76','panasonic-gd76 (phone)', 'panasonic\-gad87','panasonic-gd87 (phone)', 'panasonic\-gad88','panasonic-gd88 (phone)', 'panasonic\-gad95','panasonic-gd95 (phone)', 'panasonic\-gad96','panasonic-gd96 (phone)', 'panasonic\-g50','Panasonic G50 (phone)', 'panasonic\-g60','Panasonic G60 (phone)', 'panasonic\-x60','Panasonic X60 (phone)', 'panasonic\-x70','Panasonic X70 (phone)', 'philips\-az\@lis238','Philips Azalis-238 (phone)', 'philips\-az\@lis268','Philips Azalis-268 (phone)', 'philips\-az\@lis288','Philips Azalis-288 (phone)', 'philips\-fisio120','Philips Fisio 120 (phone)', 'philips\-fisio121','Philips Fisio 121 (phone)', 'philips\-fisio311','Philips Fisio 311 (phone)', 'philips\-fisio312','Philips Fisio 312 (phone)', 'philips\-fisio316','Philips Fisio 316 (phone)', 'philips\-fisio610','Philips Fisio 610 (phone)', 'philips\-fisio620','Philips Fisio 620 (phone)', 'philips\-fisio_625','Philips Fisio 625 (phone)', 'philips\-fisio_820','Philips Fisio 820 (phone)', 'philips\-fisio_822','Philips Fisio 822 (phone)', 'philips\-fisio_825','Philips Fisio 825 (phone)', 'philips\-v21wap','Philips V21 (phone)', 'philips\-xenium9\@9','Philips Xenium 9A9 (phone)', 'r380','Ericsson R380 (phone)', 'r600','Ericsson R600 (phone)', 'sagem\-3xxx','Sagem 3XXX (phone)', 'sagem\-9xx','Sagem 9XX (phone)', 'sagem\-myx\-2','Sagem MyX-2 (phone)', 'sagem\-myx\-3','Sagem MyX-3d (phone)', 'sagem\-myx\-5\/','Sagem MyX-5 (phone)', 'sagem\-myx\-5d','Sagem MyX-5d (phone)', 'sagem\-myx\-5m','Sagem MyX-5m (phone)', 'sagem\-myx\-6','Sagem MyX-6 (phone)', 'samsung\-sgh\-e700','Samsung E700 (phone)', 'samsung\-sgh\-s500','Samsung S500 (phone)', 'samsung\-sgh\-t500','Samsung T500 (phone)', 'samsung\-sgh\-a300','Samsung A300 (phone)', 'samsung\-sgh\-a400','Samsung A400 (phone)', 'samsung\-sgh\-a800','Samsung A800 (phone)', 'samsung\-sgh\-n100','Samsung N100 (phone)', 'samsung\-sgh\-n400','Samsung N400 (phone)', 'samsung\-sgh\-n500','Samsung N500 (phone)', 'samsung\-sgh\-n600','Samsung N600 (phone)', 'samsung\-sgh\-n620','Samsung N620 (phone)', 'samsung\-sgh\-r200','Samsung R200 (phone)', 'samsung\-sgh\-r200s','Samsung R200s (phone)', 'samsung\-sgh\-r210','Samsung R210 (phone)', 'samsung\-sgh\-s100','Samsung S100 (phone)', 'samsung\-sgh\-t100','Samsung T100 (phone)', 'samsung\-sgh\-t400','Samsung T400 (phone)', 'samsung\-sgh\-v200','Samsung V200 (phone)', 'samsung\_sgh\-x100','Samsung X100 (phone)', 'samsung\-sgh\-e100','Samsung E100 (phone)', 'samsung\-sgh\-e708','Samsung E700 (phone)', 'samsung\-sgh\-e800','Samsung E800 (phone)', 'samsung\-sgh\-x100','Samsung X100 (phone)', 'samsung\-sgh\-x600','Samsung X600 (phone)', 'sec\-sghc100','Samsung SGHC100 (phone)', 'sec\-sghp100','Samsung SGHP100 (phone)', 'sec\-sghp400','Samsung SGHP400 (phone)', 'sec\-sghq200','Samsung SGHQ200 (phone)', 'sec\-sghs200','Samsung SGHS200 (phone)', 'sec\-spha460','Samsung SPHA460 (phone)', 'sec\-sghs100','Samsung SGHS100 (phone)', 'sec\-sghs300','Samsung SGHS300 (phone)', 'sec\-sghv200','Samsung SGHS200 (phone)', 'sec\-sghv205','Samsung SGHS205 (phone)', 'sec\-sghd410','Samsung SGHD410 (phone)', 'sec\-sghe105','Samsung SGHE105 (phone)', 'sec\-sghe410','Samsung SGHE410 (phone)', 'sec\-sghe400','Samsung SGHE400 (phone)', 'sec\-sghe600','Samsung SGHE600 (phone)', 'sec\-sghe710','Samsung SGHE710 (phone)', 'sec\-sghe715','Samsung SGHE715 (phone)', 'sec\-sghs105','Samsung SGHS105 (phone)', 'sec\-sghx105','Samsung SGHX108 (phone)', 'sec\-sghx426','Samsung SGHX426 (phone)', 'sec\-sghx427','Samsung SGHX427 (phone)', 'sec\-sghx430','Samsung SGHS430 (phone)', 'sec\-sghx450','Samsung SGHS450 (phone)', 'sharp\-tq\-gx10','Sharp TQ-GX10 (phone)', 'sharp\-tq\-gx12','Sharp TQ-GX12 (phone)', 'sie\-2128','Siemens 2128 (phone)', 'sie\-6618','Siemens 66180 (phone)', 'sie\-a55','Siemens A55 (phone)', 'sie\-c60','Siemens C60 (phone)', 'sie\-c62','Siemens C62 (phone)', 'sie\-m55','Siemens M55 (phone)', 'sie\-mc60','Siemens MC60 (phone)', 'sie\-sl55','Siemens SL55 (phone)', 'sie\-slin','Siemens SLIN (phone)', 'sie\-a50','Siemens A50 (phone)', 'sie\-c3i','Siemens C35i (phone)', 'sie\-c45','Siemens C45 (phone)', 'sie\-c55','Siemens C55 (phone)', 'sie\-m50','Siemens M50 (phone)', 'sie\-me45','Siemens ME45 (phone)', 'sie\-mt50','Siemens MT50 (phone)', 'sie\-s35','Siemens S35 (phone)', 'sie\-s40','Siemens S40 (phone)', 'sie\-s45','Siemens S45 (phone)', 'sie\-s55','Siemens S55 (phone)', 'sie\-sl45','Siemens S145 (phone)', 'sie\-slik','Siemens ? (SLIK) (phone)', 'sie\-a57','Siemens A57 (phone)', 'sie\-a60','Siemens A60 (phone)', 'sie\-c56','Siemens C56 (phone)', 'sie\-c61','Siemens C61 (phone)', 'sie\-cf62','Siemens CF62 (phone)', 'sie\-m65','Siemens M65 (phone)', 'sie\-s56','Siemens S56 (phone)', 'sie\-s57c','Siemens S57C (phone)', 'sie\-s65','Siemens S65 (phone)', 'sie\-sl5e','Siemens SL5E (phone)', 'sie\-st60','Siemens ST60 (phone)', 'sie\-sx1','Siemens SX1 (phone)', 'sonyericssonp900','SonyEricsson P900 (phone)', 'sonyericssont230','SonyEricsson T230 (phone)', 'sonyericssont306','SonyEricsson T306 (phone)', 'sonyericssont316','SonyEricsson T316 (phone)', 'sonyericssont616','SonyEricsson T616 (phone)', 'sonyericssonz600','SonyEricsson Z600 (phone)', 'sonyericssonp800','SonyEricsson P800 (phone)', 'sonyericssont100','SonyEricsson T100 (phone)', 'sonyericssont200','SonyEricsson T200 (phone)', 'sonyericssont300','SonyEricsson T300 (phone)', 'sonyericssont310','SonyEricsson T310 (phone)', 'sonyericssont600','SonyEricsson T600 (phone)', 'sonyericssont610','SonyEricsson T610 (phone)', 'sonyericssont68/','SonyEricsson T68 (phone)', 'sonyericssont68i','SonyEricsson T68i (phone)', 'sonyericssont620','SonyEricsson T620 (phone)', 'sonyericssont630','SonyEricsson T630 (phone)', 'lg\-c1100','LG C1100 (phone)', 'lg\-c1200','LG C1200 (phone)', 'lg\-c2200','LG C2200 (phone)', 'lg\-g1500','LG G1500 (phone)', 'lg\-g3100','LG G3100 (phone)', 'lg\-g4015','LG G4015 (phone)', 'lg\-g5300','LG G5300 (phone)', 'lg\-g5400','LG G5400 (phone)', 'lg\-g7050','LG G7050 (phone)', 'lg\-g7100','LG G7100 (phone)', 'lg\-l1100','LG L1100 (phone)', 'lg\-l1200','LG L1200 (phone)', 'mot\-85','Motorola 85 (phone)', 'mot\-a\-0a','Motorola A0A (phone)', 'mot\-a\-2b','Motorola A2b (phone)', 'mot\-c357','Motorola C357 (phone)', 'mot\-c380','Motorola C380 (phone)', 'mot\-e398','Motorola E398 (phone)', 'mot\-v180','Motorola V180 (phone)', 'mot\-v220','Motorola V220 (phone)', 'mot\-v3','Motorola V3 (phone)', 'mot\-v980','Motorola V980 (phone)', 'nokia2650','Nokia 2650 (phone)', 'nokia3108','Nokia 3108 (phone)', 'nokia3120','Nokia 3120 (phone)', 'nokia3220','Nokia 3220 (phone)', 'nokia5140','Nokia 5140 (phone)', 'nokia6010','Nokia 6010 (phone)', 'nokia6170','Nokia 6170 (phone)', 'nokia6260','Nokia 6260 (phone)', 'nokia6630','Nokia 6630 (phone)', 'nokia6670','Nokia 6670 (phone)', 'nokia7260','Nokia 7260 (phone)', 'sie\-a65','Siemens A65 (phone)', 'sie\-c65','Siemens C65 (phone)', 'sie\-c6v','Siemens C6V (phone)', 'sie\-cx65','Siemens CX65 (phone)', 'sie\-cx70','Siemens CX70 (phone)', 'sie\-sl65','Siemens SL65 (phone)', 'sonyericssonk500i','SonyEricsson K500i (phone)', 'sonyericssonk700c','SonyEricsson K700c (phone)', 'sonyericssonk700i','SonyEricsson K700i (phone)', 'sonyericssonp910i','SonyEricsson P910i (phone)', 'sonyericssons700i','SonyEricsson S700i (phone)', 'sonyericssont226','SonyEricsson T226 (phone)', 'sonyericssont628','SonyEricsson T628 (phone)', 'sonyericssonz1010','SonyEricsson Z1010 (phone)', 'sonyericssonz200','SonyEricsson Z200 (phone)', 'alcatel\-be3','Alcatel BE3 (phone)', 'alcatel\-oh5','Alcatel OH5 (phone)', 'alcatel\-th3','Alcatel TH3 (phone)', 'alcatel\-th4','Alcatel TH4 (phone)', 'ericssona2628s','Ericsson A2628s (phone)', 'ericssonr320','Ericsson R320 (phone)', 'lg\-c1300','LG C1300 (phone)', 'lg\-c3100','LG C3100 (phone)', 'lg\-f2100','LG F2100 (phone)', 'lg\-g1600','LG G1600 (phone)', 'lg\-g210','LG G210 (phone)', 'lg\-g4010','LG G4010 (phone)', 'lg\-g510','LG G510 (phone)', 'lg\-g5310','LG G5300 (phone)', 'lg\-g5600','LG G5600 (phone)', 'lg\-g650','LG G650 (phone)', 'lg\-g7070','LG G7070 (phone)', 'lg\-l3100','LG L3100 (phone)', 'lg\-t5100','LG T5100 (phone)', 'mot\-2200','Motorola 2200 (phone)', 'mot\-32','Motorola 32 (phone)', 'mot\-74','Motorola 74 (phone)', 'mot\-76','Motorola 76 (phone)', 'mot\-87','Motorola 87 (phone)', 'mot\-8700','Motorola 8700 (phone)', 'mot\-a\-0e','Motorola a0e (phone)', 'mot\-a\-1c','Motorola a1c (phone)', 'mot\-a760','Motorola A760 (phone)', 'mot\-a835','Motorola A835 (phone)', 'mot\-c385','Motorola C385 (phone)', 'mot\-v26x','Motorola V26x (phone)', 'mot\-v290','Motorola V290 (phone)', 'mot\-v505','Motorola V505 (phone)', 'mot\-v547','Motorola V547 (phone)', 'mot\-v551','Motorola V551 (phone)', 'mot\-v620','Motorola V620 (phone)', 'mot\-v690','Motorola V690 (phone)', 'mot\-v878','Motorola V878 (phone)', 'sie\-3618','Siemens 3618 (phone)', 'sie\-a56','Siemens A56 (phone)', 'sie\-c6c','Siemens C6C (phone)', 'sie\-cx6c','Siemens CX6c (phone)', 'sie\-cx6v','Siemens CX6v (phone)', 'sie\-m6c','Siemens M6C (phone)', 'sie\-m6v','Siemens M6V (phone)', 'sie\-s46','Siemens S46 (phone)', 'sie\-sk65','Siemens SK65 (phone)', 'sie\-sl56','Siemens SL56 (phone)', 'sie\-st55','Siemens ST55 (phone)', 'sagem\-mo130','Sagem MO130 (phone)', 'sagem\-myc','Sagem myC (phone)', 'sagem\-myv','Sagem myV (phone)', 'sagem\-myx3','Sagem myX3 (phone)', 'sagem\-myx5','Sagem myX5 (phone)', 'sagem\-myx','Sagem myX (phone)', 'lg\-G610','LG G610 (phone)', 'mot\-v550','Motorola V550 (phone)', 'mot\-a\-1f','Motorola A-1F (phone)', 'mot\-c155','Motorola C155 (phone)', 'mot\-c975','Motorola C975 (phone)', 'mot\-c980','Motorola C980 (phone)', 'mot\-e380','Motorola E380 (phone)', 'mot\-e680','Motorola E680 (phone)', 'mot\-ed','Motorola ED (phone)', 'mot\-t725e','Motorola T725E (phone)', 'mot\-v150','Motorola V150 (phone)', 'mot\-v171','Motorola V171 (phone)', 'mot\-v535','Motorola V535 (phone)', 'mot\-v545','Motorola V545 (phone)', 'mot\-v635','Motorola V635 (phone)', 'mot\-v870','Motorola V870 (phone)', 'nokia2112','Nokia 2112 (phone)', 'nokia3620','Nokia 3620 (phone)', 'nokia6020','Nokia 6020 (phone)', 'nokia6200','Nokia 6200 (phone)', 'nokia6620','Nokia 6620 (phone)', 'nokia6680','Nokia 6680 (phone)', 'nokia7270','Nokia 7270 (phone)', 'nokia7280','Nokia 7280 (phone)', 'nokia9500','Nokia 9500 (phone)', 'panasonic\-a200','Panasonic A200 (phone)', 'panasonic\-g70','Panasonic G70 (phone)', 'panasonic\-x100','Panasonic X100 (phone)', 'panasonic\-x300','Panasonic X300 (phone)', 'panasonic\-x400','Panasonic X400 (phone)', 'panasonic\-x500','Panasonic X500 (phone)', 'panasonic\-x66','Panasonic X66 (phone)', 'panasonic\-x77','Panasonic X77 (phone)', 't66','Ericsson T66 (phone)', 'n21i','I-Mode Nec 21i (phone)', 'n22i','I-Mode Nec 22i (phone)', 'ts21i','I-Mode Toshiba 21i (phone)', 'portalmmm','I-Mode inconnu (phone)', 'ipcheck','Supervision IP Check (phone)', 'cnf2','Supervision I-Mode ByTel (phone)', # Others (TV) 'webtv','WebTV browser', # Other kind of browsers 'apt','Debian APT', 'svn', 'Subversion client', 'gnome\-vfs', 'Gnome FileSystem Abstraction library', 'neon', 'Neon HTTP and WebDAV client library', 'curl','Curl', 'csscheck','WDG CSS Validator', 'javaws','Java Web Start', 'wget','Wget', 'chilkat', 'Chilkat', 'webdownloader_for_x','Downloader for X', 'w3m','w3m', 'wdg_validator','WDG HTML Validator', 'webzip','WebZIP', 'staroffice','StarOffice', 'nikto', 'Nikto Web Scanner', 'microsoft\-webdav\-miniredir', 'Microsoft Data Access Component Internet Publishing Provider', 'gnus', 'Gnus Network User Services', 'liferea', 'LInux FEed REAder', 'mozilla','Mozilla', 'libwww','LibWWW', 'lwp','LibWWW-perl', ); # BrowsersHashAreGrabber # Put here an entry for each browser in BrowsersSearchIDOrder that are grabber # browsers. #--------------------------------------------------------------------------- %BrowsersHereAreGrabbers = ( 'teleport','1', 'webcapture','1', 'webcopier','1', 'curl','1', 'wget','1', 'webdownloader_for_x','1', 'webzip','1' ); # BrowsersHashIcon # Each Browsers Search ID is associated to a string that is the name of icon # file for this browser. #--------------------------------------------------------------------------- %BrowsersHashIcon = ( # Standard web browsers 'msie','msie', 'netscape','netscape', 'firefox','firefox', 'firebird','phoenix', 'go!zilla','gozilla', 'icab','icab', 'konqueror','konqueror', 'lynx','lynx', 'omniweb','omniweb', 'opera','opera', # Other standard web browsers 'amaya','amaya', 'amigavoyager','amigavoyager', 'avantbrowser','avant', 'aweb','aweb', 'bpftp','bpftp', 'camino','chimera', 'chimera','chimera', 'cyberdog','cyberdog', 'dillo','dillo', 'dreamcast','dreamcast', 'xbox', 'winxbox', 'ecatch','ecatch', 'encompass','encompass', 'epiphany','epiphany', 'fresco','fresco', 'galeon','galeon', 'getright','getright', 'hotjava','hotjava', 'ibrowse','ibrowse', 'k\-meleon','kmeleon', 'lotus\-notes','lotusnotes', 'macweb','macweb', 'multizilla','multizilla', 'msfrontpageexpress','fpexpress', 'ncsa_mosaic','ncsa_mosaic', 'netpositive','netpositive', 'phoenix','phoenix', 'safari','safari', # Site grabbers 'teleport','teleport', 'webcapture','adobe', 'webcopier','webcopier', # Media only browsers 'real','real', 'winamp','mediaplayer', # Works for winampmpeg and winamp3httprdr 'windows\-media\-player','mplayer', 'audion','mediaplayer', 'freeamp','mediaplayer', 'itunes','mediaplayer', 'jetaudio','mediaplayer', 'mint_audio','mediaplayer', 'mpg123','mediaplayer', 'mplayer','mediaplayer', 'nsplayer','netshow', 'qts','mediaplayer', 'sonique','mediaplayer', 'uplayer','mediaplayer', 'xaudio','mediaplayer', 'xine','mediaplayer', 'xmms','mediaplayer', # RSS Readers 'aggrevator', 'rss', 'feeddemon', 'rss', 'feedreader', 'rss', 'jetbrains_omea_reader', 'rss', 'netnewswire', 'rss', 'newsfire', 'rss', 'newsgator', 'rss', 'newzcrawler', 'rss', 'pluck', 'rss', 'pulpfiction', 'rss', 'rssbandit', 'rss', 'rssreader', 'rss', 'rssowl', 'rss', 'sage', 'rss', 'sharpreader', 'rss', 'shrook', 'rss', 'straw', 'rss', 'syndirella', 'rss', # PDA/Phonecell browsers 'alcatel\-bf4','alcatel', 'alcatel\-bf3','alcatel', 'alcatel\-be4','alcatel', 'alcatel\-be5','alcatel', 'alcatel\-bf5','alcatel', 'alcatel\-bg3','alcatel', 'alcatel\-bh4','alcatel', 'auditautomatic','bytel', 'ericssont68','sony', 'lg\-g7000','lg', 'mot\-c350m','motorola', 'mot\-c4','motorola', 'mot\-cb','motorola', 'mot\-d4','motorola', 'mot\-d8','motorola', 'mot\-e1','motorola', 'mot\-f6','motorola', 'mot\-pan4','motorola', 'mot\-phx4','motorola', 'mot\-sap4','motorola', 'mot\-t720','motorola', 'mot\-ta02','motorola', 'mot\-v66m','motorola', 'mot\-v708','motorola', 'mot\-8300','motorola', 'mot\-a\-86','motorola', 'mot\-af','motorola', 'mot\-c2','motorola', 'mot\-c350','motorola', 'mot\-c550','motorola', 'mot\-c650','motorola', 'mot\-cf','motorola', 'mot\-f5','motorola', 'mot\-fe','motorola', 'mot\-t280','motorola', 'mot\-v300','motorola', 'mot\-v400','motorola', 'mot\-v500','motorola', 'mot\-v525','motorola', 'mot\-v600','motorola', 'mot\-v60m','motorola', 'mot\-v80','motorola', 'mot\-v810','motorola', 'nokia3650','nokia', 'nokia6100','nokia', 'nokia6800','nokia', 'nokia7250','nokia', 'panasonic\-gad35','panasonic', 'panasonic\-gad6\*','panasonic', 'panasonic\-g50','panasonic', 'panasonic\-g60','panasonic', 'panasonic\-x60','panasonic', 'panasonic\-x70','panasonic', 'panasonic\-gad95','panasonic', 'panasonic\-gad76','panasonic', 'panasonic\-gad96','panasonic', 'panasonic\-gad75','panasonic', 'panasonic\-gad67','panasonic', 'panasonic\-gad68','panasonic', 'panasonic\-gad87','panasonic', 'panasonic\-gad88','panasonic', 'philips\-fisio_625','philips', 'philips\-fisio_820','philips', 'philips\-fisio_822','philips', 'philips\-fisio_825','philips', 'philips\-v21wap','philips', 'r380','ericsson', 'r600','ericsson', 'sagem\-3xxx','sagem', 'sagem\-9xx','sagem', 'sagem\-myx\-2','sagem', 'sagem\-myx\-6','sagem', 'samsung\-sgh\-e700','samsung', 'samsung\-sgh\-s500','samsung', 'samsung\-sgh\-t500','samsung', 'samsung\-sgh\-a300','samsung', 'samsung\-sgh\-a400','samsung', 'samsung\-sgh\-a800','samsung', 'samsung\-sgh\-n100','samsung', 'samsung\-sgh\-n400','samsung', 'samsung\-sgh\-n500','samsung', 'samsung\-sgh\-r200','samsung', 'samsung\-sgh\-t400','samsung', 'samsung\-sgh\-s100','samsung', 'samsung\-sgh\-t100','samsung', 'samsung\-sgh\-t400','samsung', 'samsung\-sgh\-v200','samsung', 'samsung\_sgh\-x100','samsung', 'samsung\-sgh\-e100','samsung', 'samsung\-sgh\-e708','samsung', 'samsung\-sgh\-e800','samsung', 'samsung\-sgh\-x100','samsung', 'samsung\-sgh\-x600','samsung', 'sec\-sghc100','samsung', 'sec\-sghp100','samsung', 'sec\-sghp400','samsung', 'sec\-sghq200','samsung', 'sec\-sghs200','samsung', 'sec\-spha460','samsung', 'sec\-sghs100','samsung', 'sec\-sghs300','samsung', 'sec\-sghv200','samsung', 'sec\-sghv205','samsung', 'sec\-sghe410','samsung', 'sec\-sghe400','samsung', 'sec\-sghe600','samsung', 'sec\-sghe710','samsung', 'sec\-sghe715','samsung', 'sec\-sghs105','samsung', 'sec\-sghx105','samsung', 'sec\-sghx426','samsung', 'sec\-sghx427','samsung', 'sec\-sghx430','samsung', 'sec\-sghx450','samsung', 'sharp\-tq\-gx12','sharp', 'sie\-c3i','siemens', 'sie\-s35','siemens', 'sie\-s40','siemens', 'sie\-s55','siemens', 'sie\-sl45','siemens', 'sie\-slik','siemens', 'sie\-a57','siemens', 'sie\-a60','siemens', 'sie\-c56','siemens', 'sie\-c61','siemens', 'sie\-cf62','siemens', 'sie\-m65','siemens', 'sie\-s56','siemens', 'sie\-s57c','siemens', 'sie\-s65','siemens', 'sie\-sl5e','siemens', 'sie\-st60','siemens', 'sie\-sx1','siemens', 'sonyericssont100','sony', 'sonyericssont310','sony', 'sonyericssont610','sony', 'sonyericssont620','sony', 'sonyericssont630','sony', 'sonyericssont68','sony', 't66','sony', 'mot\-f0','motorola', 'mot\-d5','motorola', 'nokia3100','nokia', 'nokia3200','nokia', 'nokia3560','nokia', 'nokia3595','nokia', 'nokia6220','nokia', 'nokia8265','nokia', 'nokia3300','nokia', 'nokia3530','nokia', 'nokia3590','nokia', 'nokia6108','nokia', 'nokia6211','nokia', 'nokia6600','nokia', 'nokia6650','nokia', 'nokia9210','nokia', 'nokian\-gage','nokia', 'nokia5510','nokia', 'nokia5210','nokia', 'nokia8310','nokia', 'nokia6500','nokia', 'nokia7650','nokia', 'nokia6510','nokia', 'nokia8855','nokia', 'nokia6310i','nokia', 'nokia3510','nokia', 'nokia3410','nokia', 'nokia3350','nokia', 'nokia8910','nokia', 'nokia9210i','nokia', 'nokia3210','nokia', 'nokia3310','nokia', 'nokia3330','nokia', 'nokia5110','nokia', 'nokia5130','nokia', 'nokia6110','nokia', 'nokia6130','nokia', 'nokia6150','nokia', 'nokia6210','nokia', 'nokia6250','nokia', 'nokia6310\/','nokia', 'nokia7110','nokia', 'nokia8110i','nokia', 'nokia8210','nokia', 'nokia8810','nokia', 'nokia8850','nokia', 'nokia8890','nokia', 'nokia9000','nokia', 'nokia9110','nokia', 'nokia7210','nokia', 'nokia5100','nokia', 'nokia6610','nokia', 'nokia3660','nokia', 'nokia6230','nokia', 'nokia6340i','nokia', 'nokia6810','nokia', 'nokia6820','nokia', 'nokia7200','nokia', 'nokia7600','nokia', 'nokia7610','nokia', 'philips\-az\@lis268','philips', 'philips\-az\@lis288','philips', 'philips\-fisio120','philips', 'philips\-fisio121','philips', 'philips\-fisio610','philips', 'philips\-fisio620','philips', 'philips\-fisio820','philips', 'philips\-fisio316','philips', 'philips\-az\@lis238','philips', 'philips\-fisio311','philips', 'philips\-fisio312','philips', 'philips\-xenium9\@9','philips', 'philips\-fisio625','philips', 'philips\-fisio825','philips', 'sagem\-myx\-5d','sagem', 'sagem\-myx\-5m','sagem', 'sagem\-myx\-3','sagem', 'sagem\-myx\-5/','sagem', 'samsung\-sgh\-n620','samsung', 'samsung\-sgh\-n600','samsung', 'samsung\-sgh\-t100','samsung', 'samsung\-sgh\-s100','samsung', 'samsung\-sgh\-r210','samsung', 'samsung\-sgh\-r200s','samsung', 'samsung\-sgh\-v200','samsung', 'mitsu','trium', 'sie\-2128','siemens', 'sie\-6618','siemens', 'sie\-a55','siemens', 'sie\-c60','siemens', 'sie\-c62','siemens', 'sie\-m55','siemens', 'sie\-mc60','siemens', 'sie\-sl55','siemens', 'sie\-slin','siemens', 'sie\-me45','siemens', 'sie\-c45','siemens', 'sie\-s45','siemens', 'sie\-m50','siemens', 'sie\-mt50','siemens', 'sie\-c55','siemens', 'sie\-a50','siemens', 'ericssonr520','sony', 'ericssont20','sony', 'ericssont39','sony', 'ericssont39','sony', 'ericssont65','sony', 'ericssont66','sony', 'sonyericssonp900','sony', 'sonyericssont230','sony', 'sonyericssont306','sony', 'sonyericssont316','sony', 'sonyericssont616','sony', 'sonyericssonz600','sony', 'sonyericssont68/','sony', 'sonyericssont68i','sony', 'sonyericssont200','sony', 'sonyericssont300','sony', 'sonyericssont600','sony', 'sonyericssonp800','sony', 'lg\-c1100','lg', 'lg\-c1200','lg', 'lg\-c2200','lg', 'lg\-g1500','lg', 'lg\-g3100','lg', 'lg\-g4015','lg', 'lg\-g5300','lg', 'lg\-g5400','lg', 'lg\-g7050','lg', 'lg\-g7100','lg', 'lg\-l1100','lg', 'lg\-l1200','lg', 'mot\-85','motorola', 'mot\-a\-0a','motorola', 'mot\-a\-2b','motorola', 'mot\-c357','motorola', 'mot\-c380','motorola', 'mot\-e398','motorola', 'mot\-v180','motorola', 'mot\-v220','motorola', 'mot\-v3','motorola', 'mot\-v980','motorola', 'nokia2650','nokia', 'nokia3108','nokia', 'nokia3120','nokia', 'nokia3220','nokia', 'nokia5140','nokia', 'nokia6010','nokia', 'nokia6170','nokia', 'nokia6260','nokia', 'nokia6630','nokia', 'nokia6670','nokia', 'nokia7260','nokia', 'sie\-a65','siemens', 'sie\-c65','siemens', 'sie\-c6v','siemens', 'sie\-cx65','siemens', 'sie\-cx70','siemens', 'sie\-sl65','siemens', 'sonyericssonk500i','sony', 'sonyericssonk700c','sony', 'sonyericssonk700i','sony', 'sonyericssonp910i','sony', 'sonyericssons700i','sony', 'sonyericssont226','sony', 'sonyericssont628','sony', 'sonyericssonz1010','sony', 'sonyericssonz200','sony', 'alcatel\-be3','alcatel', 'alcatel\-oh5','alcatel', 'alcatel\-th3','alcatel', 'alcatel\-th4','alcatel', 'ericssona2628s','sony', 'ericssonr320','sony', 'lg\-c1300','lg', 'lg\-c3100','lg', 'lg\-f2100','lg', 'lg\-g1600','lg', 'lg\-g210','lg', 'lg\-g4010','lg', 'lg\-g510','lg', 'lg\-g5310','lg', 'lg\-g5600','lg', 'lg\-g650','lg', 'lg\-g7070','lg', 'lg\-l3100','lg', 'lg\-t5100','lg', 'mot\-2200','motorola', 'mot\-32','motorola', 'mot\-74','motorola', 'mot\-76','motorola', 'mot\-87','motorola', 'mot\-8700','motorola', 'mot\-a\-0e','motorola', 'mot\-a\-1c','motorola', 'mot\-a760','motorola', 'mot\-a835','motorola', 'mot\-c385','motorola', 'mot\-v26x','motorola', 'mot\-v290','motorola', 'mot\-v505','motorola', 'mot\-v547','motorola', 'mot\-v551','motorola', 'mot\-v620','motorola', 'mot\-v690','motorola', 'mot\-v878','motorola', 'sie\-3618','siemens', 'sie\-a56','siemens', 'sie\-c6c','siemens', 'sie\-cx6c','siemens', 'sie\-cx6v','siemens', 'sie\-m6c','siemens', 'sie\-m6v','siemens', 'sie\-s46','siemens', 'sie\-sk65','siemens', 'sie\-sl56','siemens', 'sie\-st55','siemens', 'sagem\-mo130','sagem', 'sagem\-myc','sagem', 'sagem\-myv','sagem', 'sagem\-myx3','sagem', 'sagem\-myx5','sagem', 'sagem\-myx','sagem', 'lg\-G610','lg', 'mot\-v550','motorola', 'mot\-a\-1f','motorola', 'mot\-c155','motorola', 'mot\-c975','motorola', 'mot\-c980','motorola', 'mot\-e380','motorola', 'mot\-e680','motorola', 'mot\-ed','motorola', 'mot\-t725e','motorola', 'mot\-v150','motorola', 'mot\-v171','motorola', 'mot\-v535','motorola', 'mot\-v545','motorola', 'mot\-v635','motorola', 'mot\-v870','motorola', 'nokia2112','nokia', 'nokia3620','nokia', 'nokia6020','nokia', 'nokia6200','nokia', 'nokia6620','nokia', 'nokia6680','nokia', 'nokia7270','nokia', 'nokia7280','nokia', 'nokia9500','nokia', 'panasonic\-a200','panasonic', 'panasonic\-g70','panasonic', 'panasonic\-x100','panasonic', 'panasonic\-x300','panasonic', 'panasonic\-x400','panasonic', 'panasonic\-x500','panasonic', 'panasonic\-x66','panasonic', 'panasonic\-x77','panasonic', 'opwv\-sdk','wap générique', 'sharp\-tq\-gx10','sharp', # Others (TV) 'webtv','webtv', # Other kind of browsers 'apt','apt', 'svn','subversion', 'gnome\-vfs', 'gnome', 'neon','neon', 'javaws','java', 'webzip','webzip', 'staroffice','staroffice', 'gnus', 'gnus', 'mozilla','mozilla' ); # Source for this is http://developer.apple.com/internet/safari/uamatrix.html %BrowsersSafariBuildToVersionHash = ( '48' => '0.8', '51' => '0.8.1', '60' => '0.8.2', '73' => '0.9', '74' => '1.0b2', '85' => '1.0', '85.5' => '1.0', '85.7' => '1.0.2', '85.8' => '1.0.3', '85.8.1' => '1.0.3', '100' => '1.1', '100.1' => '1.1.1', '125.7' => '1.2.2', '125.8' => '1.2.2', '125.9' => '1.2.3', '125.11' => '1.2.4', '125.12' => '1.2.4', '312' => '1.3', '312.3' => '1.3.1', '312.3.1' => '1.3.1', '412' => '2.0', '412.2' => '2.0', '412.2.2' => '2.0', '412.5' => '2.0.1', '416.12' => '2.0.2' ); 1; # Browsers examples by engines # # -- Mosaic -- # MSIE 4.0 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo) # # -- Gecko Netscape -- # Netscape 4.05 Mozilla/4.05 [fr]C-SYMPA (Win95; I) # Netscape 4.7 Mozilla/4.7 [fr] (Win95; I) # Netscape 6.0 Mozilla/5.0 (Macintosh; N; PPC; fr-FR; m18) Gecko/20001108 Netscape6/6.0 # Netscape 7.02 Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.0.2) Gecko/20030208 Netscape/7.02 # # -- Gecko others -- # Mozilla 1.3 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3) Gecko/20030312 # Firefox 0.9 Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firefox/0.9.1 # Firebird,Phoenix,Galeon,AmiZilla,Dino # Autre Mozilla/3.01 (compatible;) # # -- Opera -- # Opera 6.03 Mozilla/3.0 (Windows 98; U) Opera 6.03 [en] # Opera 5.12 Mozilla/3.0 (Windows 98; U) Opera 5.12 [en] # Opera 3.21 Opera 3.21, Windows: # # -- KHTML -- # Safari # Konqueror # lib/browsers.pm000064400000044346152532065620007537 0ustar00# AWSTATS BROWSERS DATABASE #------------------------------------------------------- # If you want to add a Browser to extend AWStats database detection capabilities, # you must add an entry in BrowsersSearchIDOrder and in BrowsersHashIDLib. #------------------------------------------------------- # $Revision: 1.58 $ - $Author: eldy $ - $Date: 2007/10/16 17:13:13 $ # 2006-05-15 Sean Carlos http://www.antezeta.com/awstats.html # akregator (rss) # AppleSyndication (rss) # BlogBridge http://www.blogbridge.com/ (rss) # BonEcho (Firefox 2.0 alpha) # FeedTools http://sporkmonger.com/projects/feedtools/ (rss) # gnome\-vfs.*neon http://www.webdav.org/neon/ # GreatNews http://www.curiostudio.com/ (rss) # Gregarius devlog.gregarius.net/docs/ua (rss) # hatena rss http://r.hatena.ne.jp/ (rss) # Liferea http://liferea.sourceforge.net/ (rss) # PubSub-RSS-Reader http://www.pubsub.com/ (rss) # 2006-05-20 Sean Carlos http://www.antezeta.com/awstats.html # Potu Rss-Reader http://www.potu.com/ # OSSProxy http://www.marketscore.com/FAQ.Aspx # #package AWSUA; # BrowsersSearchIDOrder # This list is used to know in which order to search Browsers IDs (Most # frequent one are first in this list to increase detect speed). # It contains all matching criteria to search for in log fields. # Note: Regex IDs are in lower case and ' ' and '+' are changed into '_' #------------------------------------------------------- @BrowsersSearchIDOrder = ( # Most frequent standard web browsers are first in this list (except msie, netscape and firefox) 'firebird', 'go!zilla', 'icab', 'konqueror', 'links', 'lynx', 'omniweb', 'opera', # Other standard web browsers '22acidownload', 'aol\-iweng', 'amaya', 'amigavoyager', 'aweb', 'bonecho', 'bpftp', 'camino', 'chimera', 'cyberdog', 'dillo', 'doris', 'dreamcast', 'xbox', 'downloadagent', 'ecatch', 'emailsiphon', 'encompass', 'epiphany', 'friendlyspider', 'fresco', 'galeon', 'flashget', 'freshdownload', 'getright', 'leechget', 'netants', 'headdump', 'hotjava', 'ibrowse', 'intergo', 'k\-meleon', 'linemodebrowser', 'lotus\-notes', 'macweb', 'multizilla', 'ncsa_mosaic', 'netcaptor', 'netpositive', 'nutscrape', 'msfrontpageexpress', 'phoenix', 'shiira', # Must be before safari 'safari', 'tzgeturl', 'viking', 'webfetcher', 'webexplorer', 'webmirror', 'webvcr', # Site grabbers 'teleport', 'webcapture', 'webcopier', # Media only browsers 'real', 'winamp', # Works for winampmpeg and winamp3httprdr 'windows\-media\-player', 'audion', 'freeamp', 'itunes', 'jetaudio', 'mint_audio', 'mpg123', 'mplayer', 'nsplayer', 'qts', 'sonique', 'uplayer', 'xaudio', 'xine', 'xmms', # RSS Readers 'abilon', 'aggrevator', 'akregator', 'applesyndication', 'betanews_reader', 'blogbridge', 'cyndicate', 'feeddemon', 'feedreader', 'feedtools', 'greatnews', 'gregarius', 'hatena_rss', 'jetbrains_omea', 'liferea', 'netnewswire', 'newsfire', 'newsgator', 'newzcrawler', 'plagger', 'pluck', 'potu', 'pubsub\-rss\-reader', 'pulpfiction', 'rssbandit', 'rssreader', 'rssowl', 'rss\sxpress', 'rssxpress', 'sage', 'sharpreader', 'shrook', 'straw', 'syndirella', 'vienna', 'wizz\srss\snews\sreader', # PDA/Phonecell browsers 'alcatel', # Alcatel 'lg\-', # LG 'mot\-', # Motorola 'nokia', # Nokia 'panasonic', # Panasonic 'philips', # Philips 'sagem', # Sagem 'samsung', # Samsung 'sie\-', # SIE 'sec\-', # SonyEricsson 'sonyericsson', # SonyEricsson 'ericsson', # Ericsson (must be after sonyericsson) 'mmef', 'mspie', 'wapalizer', 'wapsilon', 'webcollage', 'up\.', # Works for UP.Browser and UP.Link # PDA/Phonecell I-Mode browsers 'docomo', 'portalmmm', # Others (TV) 'webtv', # Anonymous Proxy Browsers (can be used as grabbers as well...) 'cjb\.net', 'ossproxy', # Other kind of browsers 'apt', 'analogx_proxy', 'gnome\-vfs', 'neon', 'curl', 'csscheck', 'httrack', 'fdm', 'javaws', 'wget', 'chilkat', 'webdownloader\sfor\sx', 'w3m', 'wdg_validator', 'webreaper', 'webzip', 'staroffice', 'gnus', 'nikto', 'microsoft\-webdav\-miniredir', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sprotocol\sdiscovery', 'POE\-Component\-Client\-HTTP', 'mozilla', # Must be at end because a lot of browsers contains mozilla in string 'libwww', # Must be at end because some browser have both 'browser id' and 'libwww' 'lwp' ); # BrowsersHashIDLib # List of browser's name ('browser id in lower case', 'browser text') #--------------------------------------------------------------- %BrowsersHashIDLib = ( # Common web browsers text 'msie','MS Internet Explorer', 'netscape','Netscape', 'firefox','Firefox', 'svn', 'Subversion client', 'firebird','Firebird (Old Firefox)', 'go!zilla','Go!Zilla', 'icab','iCab', 'konqueror','Konqueror', 'links','Links', 'lynx','Lynx', 'omniweb','OmniWeb', 'opera','Opera', # Other standard web browsers '22acidownload','22AciDownload', 'aol\-iweng','AOL-Iweng', 'amaya','Amaya', 'amigavoyager','AmigaVoyager', 'aweb','AWeb', 'bonecho','BonEcho (Firefox 2.0 development)', 'bpftp','BPFTP', 'camino','Camino', 'chimera','Chimera (Old Camino)', 'cyberdog','Cyberdog', 'dillo','Dillo', 'doris','Doris (for Symbian)', 'dreamcast','Dreamcast', 'xbox', 'XBoX', 'downloadagent','DownloadAgent', 'ecatch', 'eCatch', 'emailsiphon','EmailSiphon', 'encompass','Encompass', 'epiphany','Epiphany', 'friendlyspider','FriendlySpider', 'fresco','ANT Fresco', 'galeon','Galeon', 'flashget','FlashGet', 'freshdownload','FreshDownload', 'getright','GetRight', 'leechget','LeechGet', 'netants','NetAnts', 'headdump','HeadDump', 'hotjava','Sun HotJava', 'ibrowse','iBrowse', 'intergo','InterGO', 'k\-meleon','K-Meleon', 'linemodebrowser','W3C Line Mode Browser', 'lotus\-notes','Lotus Notes web client', 'macweb','MacWeb', 'multizilla','MultiZilla', 'ncsa_mosaic','NCSA Mosaic', 'netcaptor','NetCaptor', 'netpositive','NetPositive', 'nutscrape', 'Nutscrape', 'msfrontpageexpress','MS FrontPage Express', 'phoenix','Phoenix', 'shiira','Shiira', 'safari','Safari', 'tzgeturl','TzGetURL', 'viking','Viking', 'webfetcher','WebFetcher', 'webexplorer','IBM-WebExplorer', 'webmirror','WebMirror', 'webvcr','WebVCR', # Site grabbers 'teleport','TelePort Pro', 'webcapture','Acrobat Webcapture', 'webcopier', 'WebCopier', # Media only browsers 'real','Real player or compatible (media player)', 'winamp','WinAmp (media player)', # Works for winampmpeg and winamp3httprdr 'windows\-media\-player','Windows Media Player (media player)', 'audion','Audion (media player)', 'freeamp','FreeAmp (media player)', 'itunes','Apple iTunes (media player)', 'jetaudio','JetAudio (media player)', 'mint_audio','Mint Audio (media player)', 'mpg123','mpg123 (media player)', 'mplayer','The Movie Player (media player)', 'nsplayer','NetShow Player (media player)', 'qts','Quicktime', 'sonique','Sonique (media player)', 'uplayer','Ultra Player (media player)', 'xaudio','Some XAudio Engine based MPEG player (media player)', 'xine','Xine, a free multimedia player (media player)', 'xmms','XMMS (media player)', # RSS Readers 'abilon','Abilon (RSS Reader)', 'aggrevator', 'Aggrevator (RSS Reader)', 'akregator','Akregator (RSS Reader)', 'applesyndication','AppleSyndication (RSS Reader)', 'betanews_reader','Betanews Reader (RSS Reader)', 'blogbridge','BlogBridge (RSS Reader)', 'cyndicate','Cyndicate (RSS Reader)', 'feeddemon', 'FeedDemon (RSS Reader)', 'feedreader', 'FeedReader (RSS Reader)', 'feedtools','FeedTools (RSS Reader)', 'greatnews','GreatNews (RSS Reader)', 'gregarius','Gregarius (RSS Reader)', 'hatena_rss','Hatena (RSS Reader)', 'jetbrains_omea', 'Omea (RSS Reader)', 'liferea','Liferea (RSS Reader)', 'netnewswire', 'NetNewsWire (RSS Reader)', 'newsfire', 'NewsFire (RSS Reader)', 'newsgator', 'NewsGator (RSS Reader)', 'newzcrawler', 'NewzCrawler (RSS Reader)', 'plagger', 'Plagger (RSS Reader)', 'pluck', 'Pluck (RSS Reader)', 'potu','Potu (RSS Reader)', 'pubsub\-rss\-reader','PubSub (RSS Reader)', 'pulpfiction', 'PulpFiction (RSS Reader)', 'rssbandit', 'RSS Bandit (RSS Reader)', 'rssreader', 'RssReader (RSS Reader)', 'rssowl', 'RSSOwl (RSS Reader)', 'rss\sxpress','RSS Xpress (RSS Reader)', 'rssxpress','RSSXpress (RSS Reader)', 'sage', 'Sage (RSS Reader)', 'sharpreader', 'SharpReader (RSS Reader)', 'shrook', 'Shrook (RSS Reader)', 'straw', 'Straw (RSS Reader)', 'syndirella', 'Syndirella (RSS Reader)', 'vienna', 'Vienna (RSS Reader)', 'wizz\srss\snews\sreader','Wizz RSS News Reader (RSS Reader)', # PDA/Phonecell browsers 'alcatel','Alcatel Browser (PDA/Phone browser)', 'lg\-','LG (PDA/Phone browser)', 'mot\-','Motorola Browser (PDA/Phone browser)', 'nokia','Nokia Browser (PDA/Phone browser)', 'panasonic','Panasonic Browser (PDA/Phone browser)', 'philips','Philips Browser (PDA/Phone browser)', 'sagem','Sagem (PDA/Phone browser)', 'samsung','Samsung (PDA/Phone browser)', 'sie\-','SIE (PDA/Phone browser)', 'sec\-','Sony/Ericsson (PDA/Phone browser)', 'sonyericsson','Sony/Ericsson Browser (PDA/Phone browser)', 'ericsson','Ericsson Browser (PDA/Phone browser)', # Must be after SonyEricsson 'mmef','Microsoft Mobile Explorer (PDA/Phone browser)', 'mspie','MS Pocket Internet Explorer (PDA/Phone browser)', 'wapalizer','WAPalizer (PDA/Phone browser)', 'wapsilon','WAPsilon (PDA/Phone browser)', 'webcollage','WebCollage (PDA/Phone browser)', 'up\.','UP.Browser (PDA/Phone browser)', # Works for UP.Browser and UP.Link # PDA/Phonecell I-Mode browsers 'docomo','I-Mode phone (PDA/Phone browser)', 'portalmmm','I-Mode phone (PDA/Phone browser)', # Others (TV) 'webtv','WebTV browser', # Anonymous Proxy Browsers (can be used as grabbers as well...) 'cjb\.net','CJB.NET Proxy', 'ossproxy','OSSProxy', # Other kind of browsers 'apt','Debian APT', 'analogx_proxy','AnalogX Proxy', 'gnome\-vfs', 'Gnome FileSystem Abstraction library', 'neon', 'Neon HTTP and WebDAV client library', 'curl','Curl', 'csscheck','WDG CSS Validator', 'httrack','HTTrack', 'fdm','FDM Free Download Manager', 'javaws','Java Web Start', 'wget','Wget', 'chilkat', 'Chilkat', 'webdownloader\sfor\sx','Downloader for X', 'w3m','w3m', 'wdg_validator','WDG HTML Validator', 'webreaper','WebReaper', 'webzip','WebZIP', 'staroffice','StarOffice', 'gnus', 'Gnus Network User Services', 'nikto', 'Nikto Web Scanner', 'microsoft\-webdav\-miniredir', 'Microsoft Data Access Component Internet Publishing Provider', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager', 'Microsoft Data Access Component Internet Publishing Provider Cache Manager', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav', 'Microsoft Data Access Component Internet Publishing Provider DAV', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sprotocol\sdiscovery', 'Microsoft Data Access Component Internet Publishing Provider Protocol Discovery', 'POE\-Component\-Client\-HTTP','HTTP user-agent for POE (portable networking framework for Perl)', 'mozilla','Mozilla', 'libwww','LibWWW', 'lwp','LibWWW-perl' ); # BrowsersHashAreGrabber # Put here an entry for each browser in BrowsersSearchIDOrder that are grabber # browsers. #--------------------------------------------------------------------------- %BrowsersHereAreGrabbers = ( 'teleport','1', 'webcapture','1', 'webcopier','1', 'curl','1', 'fdm','1', 'httrack','1', 'webreaper','1', 'wget','1', 'webdownloader\sfor\sx','1', 'webzip','1' ); # BrowsersHashIcon # Each Browsers Search ID is associated to a string that is the name of icon # file for this browser. #--------------------------------------------------------------------------- %BrowsersHashIcon = ( # Standard web browsers 'msie','msie', 'netscape','netscape', 'firefox','firefox', 'svn','subversion', 'firebird','phoenix', 'go!zilla','gozilla', 'icab','icab', 'konqueror','konqueror', 'lynx','lynx', 'omniweb','omniweb', 'opera','opera', # Other standard web browsers 'amaya','amaya', 'amigavoyager','amigavoyager', 'avantbrowser','avant', 'aweb','aweb', 'bonecho','firefox', 'bpftp','bpftp', 'camino','chimera', 'chimera','chimera', 'cyberdog','cyberdog', 'dillo','dillo', 'doris','doris', 'dreamcast','dreamcast', 'xbox', 'winxbox', 'ecatch','ecatch', 'encompass','encompass', 'epiphany','epiphany', 'fresco','fresco', 'galeon','galeon', 'flashget','flashget', 'freshdownload','freshdownload', 'getright','getright', 'leechget','leechget', 'hotjava','hotjava', 'ibrowse','ibrowse', 'k\-meleon','kmeleon', 'lotus\-notes','lotusnotes', 'macweb','macweb', 'multizilla','multizilla', 'msfrontpageexpress','fpexpress', 'ncsa_mosaic','ncsa_mosaic', 'netpositive','netpositive', 'phoenix','phoenix', 'safari','safari', # Site grabbers 'teleport','teleport', 'webcapture','adobe', 'webcopier','webcopier', # Media only browsers 'real','real', 'winamp','mediaplayer', # Works for winampmpeg and winamp3httprdr 'windows\-media\-player','mplayer', 'audion','mediaplayer', 'freeamp','mediaplayer', 'itunes','mediaplayer', 'jetaudio','mediaplayer', 'mint_audio','mediaplayer', 'mpg123','mediaplayer', 'mplayer','mediaplayer', 'nsplayer','netshow', 'qts','mediaplayer', 'sonique','mediaplayer', 'uplayer','mediaplayer', 'xaudio','mediaplayer', 'xine','mediaplayer', 'xmms','mediaplayer', # PDA/Phonecell browsers 'alcatel','pdaphone', # Alcatel 'lg\-','pdaphone', # LG 'ericsson','pdaphone', # Ericsson 'mot\-','pdaphone', # Motorola 'nokia','pdaphone', # Nokia 'panasonic','pdaphone', # Panasonic 'philips','pdaphone', # Philips 'sagem','pdaphone', # Sagem 'samsung','pdaphone', # Samsung 'sie\-','pdaphone', # SIE 'sec\-','pdaphone', # Sony/Ericsson 'sonyericsson','pdaphone', # Sony/Ericsson 'mmef','pdaphone', 'mspie','pdaphone', 'wapalizer','pdaphone', 'wapsilon','pdaphone', 'webcollage','pdaphone', 'up\.','pdaphone', # Works for UP.Browser and UP.Link # PDA/Phonecell I-Mode browsers 'docomo','pdaphone', 'portalmmm','pdaphone', # Others (TV) 'webtv','webtv', # Anonymous Proxy Browsers (can be used as grabbers as well...) 'cjb\.net','cjbnet', # RSS Readers 'abilon', 'abilon', 'aggrevator', 'rss', 'akregator', 'rss', 'applesyndication', 'rss', 'betanews_reader','rss', 'blogbridge','rss', 'feeddemon', 'rss', 'feedreader', 'rss', 'feedtools', 'rss', 'greatnews', 'rss', 'gregarius', 'rss', 'hatena_rss', 'rss', 'jetbrains_omea', 'rss', 'liferea', 'rss', 'netnewswire', 'rss', 'newsfire', 'rss', 'newsgator', 'rss', 'newzcrawler', 'rss', 'plagger', 'rss', 'pluck', 'rss', 'potu', 'rss', 'pubsub\-rss\-reader', 'rss', 'pulpfiction', 'rss', 'rssbandit', 'rss', 'rssreader', 'rss', 'rssowl', 'rss', 'rss\sxpress','rss', 'rssxpress','rss', 'sage', 'rss', 'sharpreader', 'rss', 'shrook', 'rss', 'straw', 'rss', 'syndirella', 'rss', 'vienna', 'rss', 'wizz\srss\snews\sreader','wizz', # Other kind of browsers 'apt','apt', 'analogx_proxy','analogx', 'microsoft\-webdav\-miniredir','frontpage', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager','frontpage', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav','frontpage', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sprotocol\sdiscovery','frontpage', 'gnome\-vfs', 'gnome', 'neon','neon', 'javaws','java', 'webzip','webzip', 'webreaper','webreaper', 'httrack','httrack', 'staroffice','staroffice', 'gnus', 'gnus', 'mozilla','mozilla' ); # Source for this is http://developer.apple.com/internet/safari/uamatrix.html %BrowsersSafariBuildToVersionHash = ( '48' => '0.8', '51' => '0.8.1', '60' => '0.8.2', '73' => '0.9', '74' => '1.0b2', '85' => '1.0', '85.5' => '1.0', '85.7' => '1.0.2', '85.8' => '1.0.3', '85.8.1' => '1.0.3', '100' => '1.1', '100.1' => '1.1.1', '125.7' => '1.2.2', '125.8' => '1.2.2', '125.9' => '1.2.3', '125.11' => '1.2.4', '125.12' => '1.2.4', '312' => '1.3', '312.3' => '1.3.1', '312.3.1' => '1.3.1', '412' => '2.0', '412.2' => '2.0', '412.2.2' => '2.0', '412.5' => '2.0.1', '416.12' => '2.0.2' ); 1; # Browsers examples by engines # # -- Mosaic -- # MSIE 4.0 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo) # # -- Gecko Netscape -- # Netscape 4.05 Mozilla/4.05 [fr]C-SYMPA (Win95; I) # Netscape 4.7 Mozilla/4.7 [fr] (Win95; I) # Netscape 6.0 Mozilla/5.0 (Macintosh; N; PPC; fr-FR; m18) Gecko/20001108 Netscape6/6.0 # Netscape 7.02 Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.0.2) Gecko/20030208 Netscape/7.02 # # -- Gecko others -- # Mozilla 1.3 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3) Gecko/20030312 # Firefox 0.9 Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firefox/0.9.1 # Firebird,Phoenix,Galeon,AmiZilla,Dino # Autre Mozilla/3.01 (compatible;) # # -- Opera -- # Opera 6.03 Mozilla/3.0 (Windows 98; U) Opera 6.03 [en] # Opera 5.12 Mozilla/3.0 (Windows 98; U) Opera 5.12 [en] # Opera 3.21 Opera 3.21, Windows: # # -- KHTML -- # Safari # Konqueror # lib/operating_systems.pm000064400000027021152532065620011437 0ustar00# AWSTATS OPERATING SYSTEMS DATABASE #------------------------------------------------------- # If you want to add an OS to extend AWStats database detection capabilities, # you must add an entry in OSSearchIDOrder, in OSHashID and in OSHashLib. #------------------------------------------------------- # $Revision: 1.23 $ - $Author: eldy $ - $Date: 2008/02/01 23:55:56 $ # 2005-08-19 Sean Carlos http://www.antezeta.com/awstats.html # - added specific Linux distributions in addition to # the generic Linux. # Included documentation link to Distribution home pages. # - added links for each operating systems. #package AWSOS; # OSSearchIDOrder # This list is used to know in which order to search Operating System IDs # (Most frequent one are first in this list to increase detect speed). # It contains all matching criteria to search for in log fields. # Note: OS IDs are in lower case and '_', ' ' and '+' are changed into '[_+ ]' #------------------------------------------------------------------------- @OSSearchIDOrder = ( # Windows OS family 'windows[_+ ]?2005', 'windows[_+ ]nt[_+ ]6\.0', 'windows[_+ ]?2003','windows[_+ ]nt[_+ ]5\.2', # Must be before windows_nt_5 'windows[_+ ]xp','windows[_+ ]nt[_+ ]5\.1', # Must be before windows_nt_5 'windows[_+ ]me','win[_+ ]9x', # Must be before windows_98 'windows[_+ ]?2000','windows[_+ ]nt[_+ ]5', 'winnt','windows[_+ \-]?nt','win32', 'win(.*)98', 'win(.*)95', 'win(.*)16','windows[_+ ]3', # This works for windows_31 and windows_3.1 'win(.*)ce', 'microsoft', 'msie[_+ ]', 'ms[_+ ]frontpage', # Macintosh OS family 'mac[_+ ]os[_+ ]x', 'mac[_+ ]?p', # This works for macppc and mac_ppc and mac_powerpc 'mac[_+ ]68', # This works for mac_6800 and mac_68k 'macweb', 'macintosh', # Linux family 'linux(.*)centos', 'linux(.*)debian', 'linux(.*)fedora', 'linux(.*)mandr', 'linux(.*)red[_+ ]hat', 'linux(.*)suse', 'linux(.*)ubuntu', 'linux', # Hurd family 'gnu.hurd', # BSDs family 'bsdi', 'gnu.kfreebsd', # Must be before freebsd 'freebsd', 'openbsd', 'netbsd', # Other Unix, Unix-like 'aix', 'sunos', 'irix', 'osf', 'hp\-ux', 'unix', 'x11', 'gnome\-vfs', # Other famous OS 'beos', 'os/2', 'amiga', 'atari', 'vms', 'commodore', # Miscellanous OS 'cp/m', 'crayos', 'dreamcast', 'risc[_+ ]?os', 'symbian', 'webtv', 'playstation[_+ ]portable', 'xbox', 'vienna', 'newsfire', 'applesyndication', 'akregator', 'plagger', 'syndirella' ); # OSHashID # Each OS Search ID is associated to a string that is the AWStats id and # also the name of icon file for this OS. #-------------------------------------------------------------------------- %OSHashID = ( # Windows OS family 'windows[_+ ]?2005','winlong','windows[_+ ]nt[_+ ]6\.0','winlong', 'windows[_+ ]?2003','win2003','windows[_+ ]nt[_+ ]5\.2','win2003', 'windows[_+ ]xp','winxp','windows[_+ ]nt[_+ ]5\.1','winxp', 'syndirella', 'winxp', 'windows[_+ ]me','winme','win[_+ ]9x','winme', 'windows[_+ ]?2000','win2000','windows[_+ ]nt[_+ ]5','win2000', 'winnt','winnt','windows[_+ \-]?nt','winnt','win32','winnt', 'win(.*)98','win98', 'win(.*)95','win95', 'win(.*)16','win16','windows[_+ ]3','win16', 'win(.*)ce','wince', 'microsoft','winunknown', 'msie[_+ ]','winunknown', 'ms[_+ ]frontpage','winunknown', # Macintosh OS family 'mac[_+ ]os[_+ ]x','macosx', 'vienna', 'macosx', 'newsfire', 'macosx', 'applesyndication', 'macosx', 'mac[_+ ]?p','macintosh','mac[_+ ]68','macintosh','macweb','macintosh','macintosh','macintosh', # Linux family (linuxyyy) 'linux(.*)centos','linuxcentos', 'linux(.*)debian','linuxdebian', 'linux(.*)fedora','linuxfedora', 'linux(.*)mandr','linuxmandr', 'linux(.*)red[_+ ]hat','linuxredhat', 'linux(.*)suse','linuxsuse', 'linux(.*)ubuntu','linuxubuntu', 'linux','linux', 'akregator', 'linux', # Hurd family 'gnu.hurd','gnu', # BSDs family (bsdyyy) 'bsdi','bsdi', 'gnu.kfreebsd','bsdkfreebsd', # Must be before freebsd 'freebsd','bsdfreebsd', 'openbsd','bsdopenbsd', 'netbsd','bsdnetbsd', # Other Unix, Unix-like 'aix','aix', 'sunos','sunos', 'irix','irix', 'osf','osf', 'hp\-ux','hp\-ux', 'unix','unix', 'x11','unix', 'gnome\-vfs','unix', 'plagger', 'unix', # Other famous OS 'beos','beos', 'os/2','os/2', 'amiga','amigaos', 'atari','atari', 'vms','vms', 'commodore','commodore', # Miscellanous OS 'cp/m','cp/m', 'crayos','crayos', 'dreamcast','dreamcast', 'risc[_+ ]?os','riscos', 'symbian','symbian', 'webtv','webtv', 'playstation[_+ ]portable', 'psp', 'xbox', 'winxbox', ); # OS name list ('os unique id in lower case','os clear text') # Each unique ID string is associated to a label #----------------------------------------------------------- %OSHashLib = ( # Windows family OS 'winlong','Windows Vista', 'win2003','Windows 2003', 'winxp','Windows XP', 'winme','Windows Me', 'win2000','Windows 2000', 'winnt','Windows NT', 'win98','Windows 98', 'win95','Windows 95', 'win16','Windows 3.xx', 'wince','Windows CE', 'winunknown','Windows (unknown version)', 'winxbox','Microsoft XBOX', # Macintosh OS 'macosx','Mac OS X', 'macintosh','Mac OS', # Linux 'linuxcentos','Centos', 'linuxdebian','Debian', 'linuxfedora','Fedora', 'linuxmandr','Mandriva (or Mandrake)', 'linuxredhat','Red Hat', 'linuxsuse','Suse', 'linuxubuntu','Ubuntu', 'linux','Linux (Unknown/unspecified)', 'linux','GNU Linux (Unknown or unspecified distribution)', # Hurd 'gnu','GNU Hurd', # BSDs 'bsdi','BSDi', 'bsdkfreebsd','GNU/kFreeBSD', 'freebsd','FreeBSD', # For backard compatibility 'bsdfreebsd','FreeBSD', 'openbsd','OpenBSD', # For backard compatibility 'bsdopenbsd','OpenBSD', 'netbsd','NetBSD', # For backard compatibility 'bsdnetbsd','NetBSD', # Other Unix, Unix-like 'aix','Aix', 'sunos','Sun Solaris', 'irix','Irix', 'osf','OSF Unix', 'hp\-ux','HP UX', 'unix','Unknown Unix system', # Other famous OS 'beos','BeOS', 'os/2','OS/2', 'amigaos','AmigaOS', 'atari','Atari', 'vms','VMS', 'commodore','Commodore 64', # Miscellanous OS 'cp/m','CPM', 'crayos','CrayOS', 'dreamcast','Dreamcast', 'riscos','RISC OS', 'symbian','Symbian OS', 'webtv','WebTV', 'psp', 'Sony PlayStation Portable', ); 1; # Informations from microsoft for detecting windows version # Windows 95 retail, OEM 4.00.950 7/11/95 # Windows 95 retail SP1 4.00.950A 7/11/95-12/31/95 # OEM Service Release 2 4.00.1111* (4.00.950B) 8/24/96 # OEM Service Release 2.1 4.03.1212-1214* (4.00.950B) 8/24/96-8/27/97 # OEM Service Release 2.5 4.03.1214* (4.00.950C) 8/24/96-11/18/97 # Windows 98 retail, OEM 4.10.1998 5/11/98 # Windows 98 Second Edition 4.10.2222A 4/23/99 # Windows Me 4.90.3000 lib/robots.pm000064400000237450152532065620007201 0ustar00# AWSTATS ROBOTS DATABASE #------------------------------------------------------- # If you want to add robots to extend AWStats database detection capabilities, # you must add an entry in RobotsSearchIDOrder_listx and RobotsHashIDLib. #------------------------------------------------------- # $Revision: 1.52 $ - $Author: eldy $ - $Date: 2008/03/12 21:13:24 $ # 2005-08-19 Sean Carlos http://www.antezeta.com/awstats.html # added dipsie (not tested with real data). # added DomainsDB.net http://domainsdb.net/ # added ia_archiver-web.archive.org (was inadvertently grouped with Alexa traffic) # added Nutch (used by looksmart (furl?)) # added rssImagesBot # added Sqworm # added t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e # added w3c css-validator # added documentation link to bot home pages for above and selected major bots. # In the case of international bots, choose .com page. # Included tool tip (html "title"). # To do: parameterize to match both AWStats language and tooltips settings. # To do: add html links for all bots based on current documentation in source # files referenced below. # changed '\wbot[\/\-]', to '\wbot[\/\-]' (removed comma) # made minor grammar corrections to notes below # 2005-08-24 added YahooSeeker-Testing # added w3c-checklink # updated url for ask.com # 2005-08-24 added Girafabot http://www.girafa.com/ # 2005-08-30 added PluckFeedCrawler http://www.pluck.com/ # added Gaisbot/3.0 (robot05@gais.cs.ccu.edu.tw; ) # dded geniebot (wgao@genieknows.com) # added BecomeBot link http://www.become.com/site_owners.html # added topicblogs http://www.topicblogs.com/ # added Powermarks; seen used by referrer spam # added YahooSeeker # added NG/2. http://www.exabot.com/ # 2005-09-15 added link for Walhello appie # added bender focused_crawler # updated YahooSeeker description (blog crawler) # 2005-09-16 added link for http://linkchecker.sourceforge.net # added ConveraCrawler/0.9d ( http://www.authoritativeweb.com/crawl) # added Blogslive info@blogslive.com intelliseek.com # added BlogPulse (ISSpider-3.0) intelliseek.com # 2005-09-26 added Feedfetcher-Google (http://www.google.com/feedfetcher.html) # added EverbeeCrawler # added Yahoo-Blogs http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html # added link for Bloglines http://www.bloglines.com # 2005-10-19 fixed Feedfetcher-Google (http://www.google.com/feedfetcher.html) # added Blogshares Spiders (Synchronized V1.5.1) # added yacy # 2005-11-21 added Argus www.simpy.com # added BlogsSay :: RSS Search Crawler (http://www.blogssay.com/) # added MJ12bot http://majestic12.co.uk/bot.php # added OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm) # added OutfoxBot/0.3 (For internet experiments; outfox.agent@gmail.com) # added RufusBot Rufus Web Miner http://64.124.122.252.webaroo.com/feedback.html # added Seekbot (http://www.seekbot.net/bot.html) # added Yahoo-MMCrawler/3.x (mms-mmcrawler-support@yahoo-inc.com) # added link for BaiDuSpider # added link for Blogshares Spider # added link for StackRambler http://www.rambler.ru/doc/faq.shtml # added link for WISENutbot # added link for ZyBorg/1.0 (wn-14.zyborg@looksmart.net; http://www.WISEnutbot.com. Moved location to above wisenut to avoid classification as wisenut # 2005-12-15 # added FAST Enteprise Crawler/6 (www dot fastsearch dot com). Note spelling Enteprise not Enterprise. # added findlinks http://wortschatz.uni-leipzig.de/findlinks/ # added IBM Almaden Research Center WebFountainâ„¢ http://www.almaden.ibm.com/cs/crawler [hc3] # added INFOMINE/8.0 VLCrawler (http://infomine.ucr.edu/useragents) # added lmspider (lmspider@scansoft.com) http://www.nuance.com/ # added noxtrumbot http://www.noxtrum.com/ # added SandCrawler (Microsoft) # added SBIder http://www.sitesell.com/sbider.html # added SeznamBot http://fulltext.seznam.cz/ # added sohu-search http://corp.sohu.com/ (looked for //robots.txt not /robots.txt) # added the ruffle SemanticWeb crawler v0.5 - http://www.unreach.net # added WebVulnCrawl/1.0 libwww-perl/5.803 (looked for //robots.txt not /robots.txt) # added Yahoo! Japan keyoshid http://www.yahoo.co.jp/ # added Y!J http://help.yahoo.co.jp/help/jp/search/indexing/indexing-15.html # added link for GigaBot # added link for MagpieRSS # added link for MSIECrawler # 2005-12-21 # added aipbot http://www.aipbot.com aipbot@aipbot.com [matthys70 users.sourceforge.net] # added Everest-Vulcan Inc./0.1 (R&D project; http://everest.vulcan.com/crawlerhelp) # added Fast-Search-Engine http://www.fast-search-engine.com/ [matthys70 users.sourceforge.net] # added g2Crawler (nobody@airmail.net) http://crawler.instantnetworks.net/ # added Jakarta commons-httpclient http://jakarta.apache.org/commons/httpclient/ (hit robots.txt). May be used as robot or browser - a site may want to remove this entry. # added OmniExplorer_Bot http://www.omni-explorer.com/ [matthys70 users.sourceforge.net] # added USTC-Semantic-Group ai.ustc.edu.cn/mas/en/research/index.php ? # 2005-12-22 # added EARTHCOM.info www.earthcom.info # added HTTrack off-line browser 'httrack','HTTrack', http://www.httrack.com/ [Moizes Gabor] # added KummHttp http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_g_l_301105_2\b [Moizes Gabor] # 2006-01-01 # added Dulance http://www.dulance.com/bot.jsp # added MojeekBot http://www.mojeek.com/bot.html # added nicebot http://www.egghelp.org/setup.htm ? # added Snappy http://www.urltrends.com/faq.php # added sohu agent # added VORTEX http://marty.anstey.ca/robots/vortex/ [matthys70 users.sourceforge.net] # added zspider http://feedback.redkolibri.com/ # 2006-01-13 # added boitho.com-dc http://www.boitho.com/dcbot.html # added IRLbot http://irl.cs.tamu.edu/crawler # added virus_detector virus_harvester@securecomputing.com # added Wavefire http://www.wavefire.com; info@wavefire.com # added WebFilter Robot # 2006-01-24 # added Shim-Crawler http://www.logos.ic.i.u-tokyo.ac.jp/crawler/; crawl@logos.ic.i.u-tokyo.ac.jp # added Exabot exabot.com # added LetsCrawl.com http://letscrawl.com # added ichiro http://help.goo.ne.jp/door/crawlerE.html # 2006-01-27 additional 22 robots from a list provided by Moizes Gabor # added ALeadSoftbot http://www.aleadsoft.com/bot.htm # added CipinetBot http://www.cipinet.com/bot.html # added Cuasarbot http://www.cuasar.com/ # added Dumbot http://www.dumbfind.com/ # added Extreme_Picture_Finder http://www.exisoftware.com/ # added Fooky.com/ScorpionBot/ScoutOut http://www.fooky.com/scorpionbots # added IlTrovatore-Setaccio http://www.iltrovatore.it/aiuto/motore_di_ricerca.html bot@iltrovatore.it # added InsurancoBot http://www.fastspywareremoval.com/ # added InternetArchive http://lucene.apache.org/nutch/bot.html nutch-agent@lucene.apache.org # added KazoomBot http://www.kazoom.ca/bot.html kazoombot@kazoom.ca # added Kurzor http://www.easymail.hu/ cursor@easymail.hu # added NutchCVS http://lucene.apache.org/nutch/bot.html nutch-agent@lucene.apache.org # added NutchOSU-VLIB http://lucene.apache.org/nutch/bot.html nutch-agent@lucene.apache.org # added Orbiter http://www.dailyorbit.com/bot.htm # added PHP_version_tracker http://www.nexen.net/phpversion/bot.php # added SuperBot http://www.sparkleware.com/superbot/ # added SynooBot http://www.synoo.de/bot.html webmaster@synoo.com # added TestBot http://www.agbrain.com/ # added TutorGigBot http://www.tutorgig.info/ # added WebIndexer mailto://webindexerv1@yahoo.com # added WebMiner http://64.124.122.252/feedback.html # 2006-02-01 # added heritrix https://sourceforge.net/forum/message.php?msg_id=3550202 # added Zeus Webster Pro https://sourceforge.net/forum/message.php?msg_id=3141164 # additional robots from a list provided by Moizes Gabor [ mojzi -a-t- free mail hu ] # added Candlelight_Favorites_Inspector # added DomainChecker # added EasyDL # added FavOrg # added Favorites_Sweeper # added Html_Link_Validator # added Internet_Ninja # added JRTwine_Software_Check_Favorites_Utility # fixed Microsoft_URL_Control # added miniRank # added Missigua_Locator # added NPBot # added Ocelli # added Onet.pl_SA # added proodleBot # added SearchGuild_DMOZ_Experiment # added Susie # added Website_Monitoring_Bot # added Xenu_Link_Sleuth # 2006-05-15 # added ASPseek http://www.aspseek.org/ # added AdamM Bot http://home.blic.net/adamm/ # added archive.org_bot http://crawls.archive.org/collections/bncf/crawl.html # added arianna.libero.it (Italian Portal/search engine) # added Biz360 spider http://www.biz360.com # added BlogBridge Service http://www.blogbridge.com/ # added BlogSearch http://www.icerocket.com/ # added libcrawl # added edgeio-relanshanbottriever http://www.edgeio.com # added FeedFlow http://feedflow.com/about # added Biblioteca Nazionale Centrale di Firenze (Italian National Archive) http://www.bncf.firenze.sbn.it/raccolta.txt # added Java catchall - used by many spam bots # added lanshanbot http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=%5Cbid_g_l_140406_1%5Cb # added msnbot-media http://search.msn.com/msnbot.htm # added MT::Telegraph::Agent # added Netluchs http://www.netluchs.de/ (German SE bot) # added oBot http://www.webmasterworld.com/forum11/1616.htm # added Onfolio http://www.onfolio.com/ (IE Toolbar plugin) - hit rss feeds. # added ping.blo.gs http://blo.gs/ping.php blog bot # added Sphere Scout http://www.sphere.com/ # added sproose crawler http://www.sproose.com/bot.html # added SyndicAPI http://syndicapi.com/bot.html # added Yahoo! Mindset http://mindset.research.yahoo.com/ # added msrabot # added Vagabondo & Vagabondo-WAP http://www.wise-guys.nl/Contact/index.php?botselected=webagents&lang=uk # fixed Missigua Locator detection (Missigua_Locator -> Missigua Locator) # changed echo to echo! to avoid conflict with the bonecho (Firefox 2.0) browser. # This requires you to reprocess historic logs if you want EchO! to be recognized for older reports. # 2006-05-17 # added Alpha Search Agent # 62.152.125.60 Eurologon Srl # added Krugle http://www.krugle.com/crawler/info.html the search engine for developers # added Octora Beta Bot http://www.octora.com/ # Blog and Rss Search Engine # added UbiCrawler http://law.dsi.unimi.it/ubicrawler/ # added Yahoo! Slurp China http://misc.yahoo.com.cn/help.html # You must reprocess old logs for the Yahoo! Slurp China bot to be detected in old reports # 2006-05-20 # added 1-More Scanner http://www.myzips.com/software/1-More-Scanner.phtml # added Accoona-AI-Agent http://www.accoona.com/ # added ActiveBookmark http://www.libmaster.com/active_bookmark.php # added BIGLOTRON http://www.biglotron.com/robot.html # added Bookmark-Manager http://bkm.sourceforge.net/ # added cbn00glebot # added Cerberian Drtrs http://www.pgts.com.au/cgi-bin/psql?robot_info=25240 # added CFNetwork http://www.cocoadev.com/index.pl?CFNetwork # added CheckWeb link validator http://p.duby.free.fr/chkweb.htm # added Computer and Automation Research Institute Crawler http://www.ilab.sztaki.hu/~stamas/publications/p184-benczur.html # added ConveraCrawler http://www.authoritativeweb.com/crawl/ # added ConveraMultiMediaCrawler http://www.authoritativeweb.com/crawl/ # added CSE HTML Validator Lite Online http://online.htmlvalidator.com/php/onlinevallite.php # added Cursor http://adcenter.hu/docs/en/bot.html # added Custo http://www.netwu.com/custo/ # added DataFountains/DMOZ Downloader http://infomine.ucr.edu/ # added Deepindex http://www.deepindex.net/faq.php # added DNSGroup http://www.dnsgroup.com/ # added DoCoMo http://www.nttdocomo.co.jp/ # added dumm.de-Bot http://www.dumm.de/ # added ETS v http://www.freetranslation.com/help/ # added eventax http://www.eventax.de/ # added FAST Enterprise Crawler * crawleradmin.t-info@telekom.de http://www.telekom.de/ # added FAST Enterprise Crawler http://www.fast.no/ # added FAST Enterprise Crawler * T-Info_BI_cluster crawleradmin.t-info@telekom.de http://www.telekom.de/ # added FeedValidator http://feedvalidator.org/ # added FilmkameraBot http://www.filmkamera.at/bot.html # added Findexa Crawler http://www.findexa.no/gulesider/article26548.ece # added Global Fetch http://www.wesonet.com/ # added GOFORITBOT http://www.goforit.com/about/ # added GoForIt.com http://www.goforit.com/about/ # added GPU p2p crawler http://gpu.sourceforge.net/search_engine.php # added HooWWWer http://cosco.hiit.fi/search/hoowwwer/ # added HPPrint # added HTMLParser http://htmlparser.sourceforge.net/ # added Hundesuche.com-Bot http://www.hundesuche.com/ # added InfoBot http://www.infobot.org/ # added InfociousBot http://corp.infocious.com/tech_crawler.php # added InternetSupervision http://internetsupervision.com/ # added isearch2006 http://www.yahoo.com.cn/ # added IUPUI_Research_Bot http://spamhuntress.com/2005/04/25/a-mail-harvester-visits/ # added KalamBot http://64.124.122.251/feedback.html # added kamano.de NewsFeedVerzeichnis http://www.kamano.de/ # added Kevin http://dznet.com/kevin/ # added KnowItAll http://www.cs.washington.edu/research/knowitall/ # added Knowledge.com http://www.knowledge.com/ # added Kouaa Krawler http://www.kouaa.com/ # added ksibot http://ego.ms.mff.cuni.cz/ # added Link Valet Online http://www.htmlhelp.com/tools/valet/ # added lwp-request http://search.cpan.org/~gaas/libwww-perl-5.69/bin/lwp-request # added lwp-trivial http://search.cpan.org/src/GAAS/libwww-perl-5.805/lib/LWP/Simple.pm # added MapoftheInternet.com http://MapoftheInternet.com/ # added Matrix S.p.A. - FAST Enterprise Crawler http://tin.virgilio.it/ # added Megite http://www.megite.com/ # added Metaspinner http://index.meta-spinner.de/ # added Mini-reptile # added Misterbot http://www.misterbot.fr/ # added Miva http://www.miva.com/ # added Mizzu Labs http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_m_141105_2\b # added MSRBOT http://research.microsoft.com/research/sv/msrbot/ # added MS SharePoint Portal Server - MS Search 4.0 Robot http://support.microsoft.com/default.aspx?scid=kb;en-us;284022 # added Mydoyouhike http://www.doyouhike.net/my # added NASA Search http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_140506_2\b # added NetSprint http://www.netsprint.pl/serwis/ # added NimbleCrawler http://www.healthline.com/ # added OpenWebSpider http://www.openwebspider.org/ # added Oracle Ultra Search http://www.oracle.com/technology/products/ultrasearch/index.html # added OSSProxy http://www.marketscore.com/FAQ.Aspx # added passwordmaker.org http://passwordmaker.org/ # added PEAR HTTP Request class http://pear.php.net/ # added PEERbot http://www.peerbot.com/ # added PHP version tracker http://www.nexen.net/phpversion/bot.php # added PictureOfInternet http://malfunction.org/poi/ # added plinki http://www.plinki.com/ # added Port Huron Labs http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_1133\b # added PostFavorites http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_1135\b # added ProjectWF-java-test-crawler # added PyQuery http://sourceforge.net/projects/pyquery/ # added Schizozilla http://spamhuntress.com/2005/03/18/gizmo/ # added Scumbot # added Sensis Web Crawler http://www.sensis.com.au/ # added snap.com beta crawler http://www.snap.com/ # added Steeler http://www.tkl.iis.u-tokyo.ac.jp/~crawler/ # added STEROID Download http://faqs.org.ru/progr/pascal/delphi_internet2.htm # added Suchfin-Bot http://www.suchfin.de/ # added Sunrise http://www.sunrisexp.com/ # added Tagyu Agent http://www.tagyu.com/ # added Tcl http client package http://www.tcl.tk/man/tcl8.4/TclCmd/http.htm # added TeragramCrawlerSURF http://www.teragram.com/ # added Test Crawler http://netp.ath.cx/ # added UnChaos Bot Hybrid Web Search Engine http://www.unchaos.com/ # added unido-bot http://www.unchina.org/unido/unido/our_projects/3_3.html # added UniversalFeedParser http://feedparser.org/ (seen from md301000.inktomisearch.com) # added updated http://www.updated.com/ # added Vermut http://vermut.aol.com # added versus crawler from eda.baykan@epfl.ch http://www.epfl.ch/Eindex.html # added Vespa Crawler (Yahoo Norway?) http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=%5Cbid_t_z_030406_1%5Cb # added VSE http://www.vivisimo.com/ # added webcrawl.net http://www.webcrawl.net/ # added Web Downloader http://www.krasu.ru/soft/chuchelo/ # added Webdup http://www.webdup.com/en/index.html # added Wells Search http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_t_z_1484\b # added WordPress http://wordpress.org/ # added wume crawler http://wume.cse.lehigh.edu/~xiq204/crawler/ # added Xenu's Link Sleuth (with ') # added xirq http://www.xirq.com/ # added yoogliFetchAgent http://www.yoogli.com/ # added Z-Add Link Checker http://w3.z-add.co.uk/linkcheck/ # -- fix - some robots were reported with _ where _ should have been a space. # changed Xenu Link Sleuth # changed microsoft[_+ ]url[_+ ]control -> microsoft_url_control # changed favorites_sweeper -> favorites_sweeper # -- updates # updated AskJeeves to Ask # to do MS Search 4.0 Robot #package AWSROB; # Robots list was found at http://www.robotstxt.org/wc/active/all.txt # Other robots can be found at http://www.jafsoft.com/searchengines/webbots.html # Rem: To avoid bad detection, some robot's ids were removed from this list: # - Robots with ID of 3 letters only # - Robots called 'webs' and 'tcl' # Rem: Some robots mostly used for downloading have also been removed, i.e. wget # Rem: directhit changed into direct_hit (its real id) # Rem: calif changed into calif[^r] to avoid confusion between Tiscalifreenet browser # Rem: fish changed into [^a]fish to avoid confusion between Madsafish browser # Rem: roadrunner changed into road_runner # Rem: lycos changed to lycos_ to avoid confusion with lycos-online browser # Rem: voyager changed into ^voyager\/ to avoid to exclude voyager and amigavoyager browser # RobotsSearchIDOrder # It contains all matching criteria to search for in log fields. This list is # used to know in which order to search Robot IDs. # Most frequent ones are in list1, used when LevelForRobotsDetection is 1 or more # Minor robots are in list2, used when LevelForRobotsDetection is 2 or more # Note: Robots IDs are in lower case, '_', ' ' and '+' are changed into '[_+ ]' and are quoted. #------------------------------------------------------- @RobotsSearchIDOrder_list1 = ( # Common robots (In robot file) 'appie', 'architext', 'jeeves', 'bjaaland', 'contentmatch', 'ferret', 'googlebot', 'google\-sitemaps', 'gulliver', 'virus[_+ ]detector', # Must be before harvest 'harvest', 'htdig', 'linkwalker', 'lilina', 'lycos[_+ ]', 'moget', 'muscatferret', 'myweb', 'nomad', 'scooter', 'slurp', '^voyager\/', 'weblayers', # Common robots (Not in robot file) 'antibot', 'bruinbot', 'digout4u', 'echo!', 'fast\-webcrawler', 'ia_archiver\-web\.archive\.org', # Must be before ia_archiver to avoid confusion with alexa 'ia_archiver', 'jennybot', 'mercator', 'netcraft', 'msnbot\-media', 'msnbot', 'petersnews', 'relevantnoise\.com', 'unlost_web_crawler', 'voila', 'webbase', 'webcollage', 'cfetch', 'zyborg', # Must be before wisenut 'wisenutbot' ); @RobotsSearchIDOrder_list2 = ( # Less common robots (In robot file) '[^a]fish', 'abcdatos', 'acme\.spider', 'ahoythehomepagefinder', 'alkaline', 'anthill', 'arachnophilia', 'arale', 'araneo', 'aretha', 'ariadne', 'powermarks', 'arks', 'aspider', 'atn\.txt', 'atomz', 'auresys', 'backrub', 'bbot', 'bigbrother', 'blackwidow', 'blindekuh', 'bloodhound', 'borg\-bot', 'brightnet', 'bspider', 'cactvschemistryspider', 'calif[^r]', 'cassandra', 'cgireader', 'checkbot', 'christcrawler', 'churl', 'cienciaficcion', 'collective', 'combine', 'conceptbot', 'coolbot', 'core', 'cosmos', 'cruiser', 'cusco', 'cyberspyder', 'desertrealm', 'deweb', 'dienstspider', 'digger', 'diibot', 'direct_hit', 'dnabot', 'download_express', 'dragonbot', 'dwcp', 'e\-collector', 'ebiness', 'elfinbot', 'emacs', 'emcspider', 'esther', 'evliyacelebi', 'fastcrawler', 'feedcrawl', 'fdse', 'felix', 'fetchrover', 'fido', 'finnish', 'fireball', 'fouineur', 'francoroute', 'freecrawl', 'funnelweb', 'gama', 'gazz', 'gcreep', 'getbot', 'geturl', 'golem', 'gougou', 'grapnel', 'griffon', 'gromit', 'gulperbot', 'hambot', 'havindex', 'hometown', 'htmlgobble', 'hyperdecontextualizer', 'iajabot', 'iaskspider', 'hl_ftien_spider', 'sogou', 'iconoclast', 'ilse', 'imagelock', 'incywincy', 'informant', 'infoseek', 'infoseeksidewinder', 'infospider', 'inspectorwww', 'intelliagent', 'irobot', 'iron33', 'israelisearch', 'javabee', 'jbot', 'jcrawler', 'jobo', 'jobot', 'joebot', 'jubii', 'jumpstation', 'kapsi', 'katipo', 'kilroy', 'ko[_+ ]yappo[_+ ]robot', 'kummhttp', 'labelgrabber\.txt', 'larbin', 'legs', 'linkidator', 'linkscan', 'lockon', 'logo_gif', 'macworm', 'magpie', 'marvin', 'mattie', 'mediafox', 'merzscope', 'meshexplorer', 'mindcrawler', 'mnogosearch', 'momspider', 'monster', 'motor', 'muncher', 'mwdsearch', 'ndspider', 'nederland\.zoek', 'netcarta', 'netmechanic', 'netscoop', 'newscan\-online', 'nhse', 'northstar', 'nzexplorer', 'objectssearch', 'occam', 'octopus', 'openfind', 'orb_search', 'packrat', 'pageboy', 'parasite', 'patric', 'pegasus', 'perignator', 'perlcrawler', 'phantom', 'phpdig', 'piltdownman', 'pimptrain', 'pioneer', 'pitkow', 'pjspider', 'plumtreewebaccessor', 'poppi', 'portalb', 'psbot', 'python', 'raven', 'rbse', 'resumerobot', 'rhcs', 'road_runner', 'robbie', 'robi', 'robocrawl', 'robofox', 'robozilla', 'roverbot', 'rules', 'safetynetrobot', 'search\-info', 'search_au', 'searchprocess', 'senrigan', 'sgscout', 'shaggy', 'shaihulud', 'sift', 'simbot', 'site\-valet', 'sitetech', 'skymob', 'slcrawler', 'smartspider', 'snooper', 'solbot', 'speedy', 'spider[_+ ]monkey', 'spiderbot', 'spiderline', 'spiderman', 'spiderview', 'spry', 'sqworm', 'ssearcher', 'suke', 'sunrise', 'suntek', 'sven', 'tach_bw', 'tagyu_agent', 'tailrank', 'tarantula', 'tarspider', 'techbot', 'templeton', 'titan', 'titin', 'tkwww', 'tlspider', 'ucsd', 'udmsearch', 'universalfeedparser', 'urlck', 'valkyrie', 'verticrawl', 'victoria', 'visionsearch', 'voidbot', 'vwbot', 'w3index', 'w3m2', 'wallpaper', 'wanderer', 'wapspIRLider', 'webbandit', 'webcatcher', 'webcopy', 'webfetcher', 'webfoot', 'webinator', 'weblinker', 'webmirror', 'webmoose', 'webquest', 'webreader', 'webreaper', 'websnarf', 'webspider', 'webvac', 'webwalk', 'webwalker', 'webwatch', 'whatuseek', 'whowhere', 'wired\-digital', 'wmir', 'wolp', 'wombat', 'wordpress', 'worm', 'wwwc', 'wz101', 'xget', # Other robots reported by users '1\-more_scanner', 'accoona\-ai\-agent', 'activebookmark', 'adamm_bot', 'almaden', 'aipbot', 'aleadsoftbot', 'alpha_search_agent', 'aport', 'archive\.org_bot', 'argus', # Must be before nutch 'arianna\.libero\.it', 'aspseek', 'asterias', 'awbot', 'baiduspider', 'becomebot', 'bender', 'biglotron', 'bittorrent_bot', 'biz360[_+ ]spider', 'blogbridge[_+ ]service', 'bloglines', 'blogpulse', 'blogsearch', 'blogshares', 'blogslive', 'blogssay', 'bncf\.firenze\.sbn\.it\/raccolta\.txt', 'bobby', 'boitho\.com\-dc', 'bookmark\-manager', 'boris', 'bumblebee', 'candlelight[_+ ]favorites[_+ ]inspector', 'cbn00glebot', 'cerberian_drtrs', 'cfnetwork', 'cipinetbot', 'checkweb_link_validator', 'commons\-httpclient', 'computer_and_automation_research_institute_crawler', 'converamultimediacrawler', 'converacrawler', 'cscrawler', 'cse_html_validator_lite_online', 'cuasarbot', 'cursor', 'custo', 'datafountains\/dmoz_downloader', 'daviesbot', 'daypopbot', 'deepindex', 'dipsie\.bot', 'dnsgroup', 'docomo', 'domainchecker', 'domainsdb\.net', 'dulance', 'dumbot', 'dumm\.de\-bot', 'earthcom\.info', 'easydl', 'edgeio\-retriever', 'ets_v', 'exactseek', 'extreme[_+ ]picture[_+ ]finder', 'eventax', 'everbeecrawler', 'everest\-vulcan', 'ezresult', 'enteprise', 'fast_enterprise_crawler.*crawleradmin\.t\-info@telekom\.de', 'fast_enterprise_crawler.*t\-info_bi_cluster_crawleradmin\.t\-info@telekom\.de', 'matrix_s\.p\.a\._\-_fast_enterprise_crawler', # must come before fast enterprise crawler 'fast_enterprise_crawler', 'fast\-search\-engine', 'favorg', 'favorites_sweeper', 'feedburner', 'feedfetcher\-google', 'feedflow', 'feedster', 'feedsky', 'feedvalidator', 'filmkamerabot', 'findlinks', 'findexa_crawler', 'fooky\.com\/ScorpionBot', 'g2crawler', 'gaisbot', 'geniebot', 'gigabot', 'girafabot', 'global_fetch', 'gnodspider', 'goforit\.com', 'goforitbot', 'grub', 'gpu_p2p_crawler', 'henrythemiragorobot', 'heritrix', 'holmes', 'hoowwwer', 'hpprint', 'htmlparser', 'html[_+ ]link[_+ ]validator', 'httrack', 'hundesuche\.com\-bot', 'ichiro', 'iltrovatore\-setaccio', 'infobot', 'infociousbot', 'infomine', 'insurancobot', 'internet[_+ ]ninja', 'internetarchive', 'internetseer', 'internetsupervision', 'irlbot', 'isearch2006', 'iupui_research_bot', 'jrtwine[_+ ]software[_+ ]check[_+ ]favorites[_+ ]utility', 'justview', 'kalambot', 'kamano\.de_newsfeedverzeichnis', 'kazoombot', 'kevin', 'keyoshid', # Must come before Y!J 'kinjabot', 'kinja\-imagebot', 'knowitall', 'knowledge\.com', 'kouaa_krawler', 'krugle', 'ksibot', 'kurzor', 'lanshanbot', 'letscrawl\.com', 'libcrawl', 'linkbot', 'link_valet_online', 'metager\-linkchecker', # Must be before linkchecker 'linkchecker', 'livejournal\.com', 'lmspider', 'lwp\-request', 'lwp\-trivial', 'magpierss', 'mapoftheinternet\.com', 'mediapartners\-google', 'megite', 'metaspinner', 'microsoft[_+ ]url[_+ ]control', 'mini\-reptile', 'minirank', 'missigua_locator', 'misterbot', 'miva', 'mizzu_labs', 'mj12bot', 'mojeekbot', 'msiecrawler', 'ms_search_4\.0_robot', 'msrabot', 'msrbot', 'mt::telegraph::agent', 'nagios', 'nasa_search', 'mydoyouhike', 'netluchs', 'netsprint', 'newsgatoronline', 'nicebot', 'nimblecrawler', 'noxtrumbot', 'npbot', 'nutchcvs', 'nutchosu\-vlib', 'nutch', # Must come after other nutch versions 'ocelli', 'octora_beta_bot', 'omniexplorer[_+ ]bot', 'onet\.pl[_+ ]sa', 'onfolio', 'opentaggerbot', 'openwebspider', 'oracle_ultra_search', 'orbiter', 'yodaobot', 'qihoobot', 'passwordmaker\.org', 'pear_http_request_class', 'peerbot', 'perman', 'php[_+ ]version[_+ ]tracker', 'pictureofinternet', 'ping\.blo\.gs', 'plinki', 'pluckfeedcrawler', 'pompos', 'popdexter', 'port_huron_labs', 'postfavorites', 'projectwf\-java\-test\-crawler', 'proodlebot', 'pyquery', 'rambler', 'redalert', 'rojo', 'rssimagesbot', 'ruffle', 'rufusbot', 'sandcrawler', 'sbider', 'schizozilla', 'scumbot', 'searchguild[_+ ]dmoz[_+ ]experiment', 'seekbot', 'sensis_web_crawler', 'seznambot', 'shim\-crawler', 'shoutcast', 'slysearch', 'snap\.com_beta_crawler', 'sohu\-search', 'sohu', # "sohu agent" 'snappy', 'sphere_scout', 'sproose_crawler', 'steeler', 'steroid__download', 'suchfin\-bot', 'superbot', 'surveybot', 'susie', 'syndic8', 'syndicapi', 'synoobot', 'tcl_http_client_package', 'technoratibot', 'teragramcrawlersurf', 'test_crawler', 'testbot', 't\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e', 'topicblogs', 'turnitinbot', 'turtlescanner', # Must be before turtle 'turtle', 'tutorgigbot', 'twiceler', 'ubicrawler', 'ultraseek', 'unchaos_bot_hybrid_web_search_engine', 'unido\-bot', 'updated', 'ustc\-semantic\-group', 'vagabondo\-wap', 'vagabondo', 'vermut', 'versus_crawler_from_eda\.baykan@epfl\.ch', 'vespa_crawler', 'vortex', 'vse', 'w3c\-checklink', 'w3c[_+ ]css[_+ ]validator[_+ ]jfouffa', 'w3c_validator', 'wavefire', 'webclipping\.com', 'webcompass', 'webcrawl\.net', 'web_downloader', 'webdup', 'webfilter', 'webindexer', 'webminer', 'website[_+ ]monitoring[_+ ]bot', 'webvulncrawl', 'wells_search', 'wonderer', 'wume_crawler', 'wwweasel', 'xenu\'s_link_sleuth', 'xenu_link_sleuth', 'xirq', 'y!j', # Must come after keyoshid Y!J 'yacy', 'yahoo\-blogs', 'yahoo\-verticalcrawler', 'yahoofeedseeker', 'yahooseeker\-testing', 'yahooseeker', 'yahoo\-mmcrawler', 'yahoo!_mindset', 'yandex', 'yooglifetchagent', 'z\-add_link_checker', 'zealbot', 'zhuaxia', 'zspider', 'zeus', 'ng\/1\.', # put at end to avoid false positive 'ng\/2\.', # put at end to avoid false positive 'exabot', # put at end to avoid false positive 'java' # put at end to avoid false positive ); @RobotsSearchIDOrder_listgen = ( # Generic robot 'robot', 'crawl', 'spider', 'bot[+:,\.\;\/\\\-]', '[+:,\.\;\/\\\-]bot', 'no_user_agent' ); # RobotsHashIDLib # List of robots names ('robot id','robot clear text') #------------------------------------------------------- %RobotsHashIDLib = ( # Common robots (In robot file) 'appie','Walhello appie', 'architext','ArchitextSpider', 'jeeves','Ask', 'bjaaland','Bjaaland', 'ferret','Wild Ferret Web Hopper #1, #2, #3', 'contentmatch','Yahoo!China ContentMatch Crawler', 'googlebot','Googlebot', 'google\-sitemaps', 'Google Sitemaps', 'gulliver','Northern Light Gulliver', 'virus[_+ ]detector','virus_detector', 'harvest','Harvest', 'htdig','ht://Dig', 'linkwalker','LinkWalker', 'lilina','Lilina', 'lycos[_+ ]','Lycos', 'moget','moget', 'muscatferret','Muscat Ferret', 'myweb','Internet Shinchakubin', 'nomad','Nomad', 'scooter','Scooter', 'slurp','Yahoo Slurp', '^voyager\/','Voyager', 'weblayers','Weblayers', # Common robots (Not in robot file) 'antibot','Antibot', 'bruinbot','The web archive', 'digout4u','Digout4u', 'echo!','EchO!', 'fast\-webcrawler','Fast-Webcrawler', 'ia_archiver\-web\.archive\.org','The web archive (IA Archiver)', 'ia_archiver','Alexa (IA Archiver)', 'jennybot','JennyBot', 'mercator','Mercator', 'msnbot\-media','MSNBot-media', 'msnbot','MSNBot', 'netcraft','Netcraft', 'petersnews','Petersnews', 'unlost_web_crawler','Unlost Web Crawler', 'voila','Voila', 'webbase', 'WebBase', 'zyborg','ZyBorg', 'wisenutbot','WISENutbot', 'webcollage','WebCollage', 'cfetch','Cfetch', # Less common robots (In robot file) '[^a]fish','Fish search', 'abcdatos','ABCdatos BotLink', 'acme\.spider','Acme.Spider', 'ahoythehomepagefinder','Ahoy! The Homepage Finder', 'alkaline','Alkaline', 'anthill','Anthill', 'arachnophilia','Arachnophilia', 'arale','Arale', 'araneo','Araneo', 'aretha','Aretha', 'ariadne','ARIADNE', 'powermarks','Powermarks', # must come before Arks; seen used by referrer spam 'arks','arks', 'aspider','ASpider (Associative Spider)', 'atn\.txt','ATN Worldwide', 'atomz','Atomz.com Search Robot', 'auresys','AURESYS', 'backrub','BackRub', 'bbot','BBot', 'bigbrother','Big Brother', 'blackwidow','BlackWidow', 'blindekuh','Die Blinde Kuh', 'bloodhound','Bloodhound', 'borg\-bot','Borg-Bot', 'brightnet','bright.net caching robot', 'bspider','BSpider', 'cactvschemistryspider','CACTVS Chemistry Spider', 'calif[^r]','Calif', 'cassandra','Cassandra', 'cgireader','Digimarc Marcspider/CGI', 'checkbot','Checkbot', 'christcrawler','ChristCrawler.com', 'churl','churl', 'cienciaficcion','cIeNcIaFiCcIoN.nEt', 'collective','Collective', 'combine','Combine System', 'conceptbot','Conceptbot', 'coolbot','CoolBot', 'core','Web Core / Roots', 'cosmos','XYLEME Robot', 'cruiser','Internet Cruiser Robot', 'cusco','Cusco', 'cyberspyder','CyberSpyder Link Test', 'desertrealm','Desert Realm Spider', 'deweb','DeWeb(c) Katalog/Index', 'dienstspider','DienstSpider', 'digger','Digger', 'diibot','Digital Integrity Robot', 'direct_hit','Direct Hit Grabber', 'dnabot','DNAbot', 'download_express','DownLoad Express', 'dragonbot','DragonBot', 'dwcp','DWCP (Dridus\' Web Cataloging Project)', 'e\-collector','e-collector', 'ebiness','EbiNess', 'elfinbot','ELFINBOT', 'emacs','Emacs-w3 Search Engine', 'emcspider','ananzi', 'esther','Esther', 'evliyacelebi','Evliya Celebi', 'fastcrawler','FastCrawler', 'feedcrawl','FeedCrawl by feed@aobo.com', 'fdse','Fluid Dynamics Search Engine robot', 'felix','Felix IDE', 'fetchrover','FetchRover', 'fido','fido', 'finnish','H���ki', 'fireball','KIT-Fireball', 'fouineur','Fouineur', 'francoroute','Robot Francoroute', 'freecrawl','Freecrawl', 'funnelweb','FunnelWeb', 'gama','gammaSpider, FocusedCrawler', 'gazz','gazz', 'gcreep','GCreep', 'getbot','GetBot', 'geturl','GetURL', 'golem','Golem', 'gougou','GouGou', 'grapnel','Grapnel/0.01 Experiment', 'griffon','Griffon', 'gromit','Gromit', 'gulperbot','Gulper Bot', 'hambot','HamBot', 'havindex','havIndex', 'hometown','Hometown Spider Pro', 'htmlgobble','HTMLgobble', 'hyperdecontextualizer','Hyper-Decontextualizer', 'iajabot','iajaBot', 'iaskspider','Sina Iask Spider', 'hl_ftien_spider','Hylanda', 'sogou','Sogou Spider', 'iconoclast','Popular Iconoclast', 'ilse','Ingrid', 'imagelock','Imagelock', 'incywincy','IncyWincy', 'informant','Informant', 'infoseek','InfoSeek Robot 1.0', 'infoseeksidewinder','Infoseek Sidewinder', 'infospider','InfoSpiders', 'inspectorwww','Inspector Web', 'intelliagent','IntelliAgent', 'irobot','I, Robot', 'iron33','Iron33', 'israelisearch','Israeli-search', 'javabee','JavaBee', 'jbot','JBot Java Web Robot', 'jcrawler','JCrawler', 'jobo','JoBo Java Web Robot', 'jobot','Jobot', 'joebot','JoeBot', 'jubii','The Jubii Indexing Robot', 'jumpstation','JumpStation', 'kapsi','image.kapsi.net', 'katipo','Katipo', 'kilroy','Kilroy', 'ko[_+ ]yappo[_+ ]robot','KO_Yappo_Robot', 'kummhttp','KummHttp', 'labelgrabber\.txt','LabelGrabber', 'larbin','larbin', 'legs','legs', 'linkidator','Link Validator', 'linkscan','LinkScan', 'lockon','Lockon', 'logo_gif','logo.gif Crawler', 'macworm','Mac WWWWorm', 'lmspider','lmspider', 'lwp\-request','lwp-request', 'lwp\-trivial','lwp-trivial', 'magpie','MagpieRSS', 'marvin','marvin/infoseek', 'mattie','Mattie', 'mediafox','MediaFox', 'merzscope','MerzScope', 'meshexplorer','NEC-MeshExplorer', 'mindcrawler','MindCrawler', 'mnogosearch','mnoGoSearch search engine software', 'momspider','MOMspider', 'monster','Monster', 'motor','Motor', 'muncher','Muncher', 'mwdsearch','Mwd.Search', 'ndspider','NDSpider', 'nederland\.zoek','Nederland.zoek', 'netcarta','NetCarta WebMap Engine', 'netmechanic','NetMechanic', 'netscoop','NetScoop', 'newscan\-online','newscan-online', 'nhse','NHSE Web Forager', 'northstar','The NorthStar Robot', 'nzexplorer','nzexplorer', 'objectssearch','ObjectsSearch', 'occam','Occam', 'octopus','HKU WWW Octopus', 'openfind','Openfind data gatherer', 'orb_search','Orb Search', 'packrat','Pack Rat', 'pageboy','PageBoy', 'parasite','ParaSite', 'patric','Patric', 'pegasus','pegasus', 'perignator','The Peregrinator', 'perlcrawler','PerlCrawler 1.0', 'phantom','Phantom', 'phpdig','PhpDig', 'piltdownman','PiltdownMan', 'pimptrain','Pimptrain.com\'s robot', 'pioneer','Pioneer', 'pitkow','html_analyzer', 'pjspider','Portal Juice Spider', 'plumtreewebaccessor','PlumtreeWebAccessor', 'poppi','Poppi', 'portalb','PortalB Spider', 'psbot','psbot', 'python','Python-urllib', 'raven','Raven Search', 'rbse','RBSE Spider', 'resumerobot','Resume Robot', 'rhcs','RoadHouse Crawling System', 'road_runner','Road Runner: The ImageScape Robot', 'robbie','Robbie the Robot', 'robi','ComputingSite Robi/1.0', 'robocrawl','RoboCrawl Spider', 'robofox','RoboFox', 'robozilla','Robozilla', 'roverbot','Roverbot', 'rules','RuLeS', 'safetynetrobot','SafetyNet Robot', 'search\-info','Sleek', 'search_au','Search.Aus-AU.COM', 'searchprocess','SearchProcess', 'senrigan','Senrigan', 'sgscout','SG-Scout', 'shaggy','ShagSeeker', 'shaihulud','Shai\'Hulud', 'sift','Sift', 'simbot','Simmany Robot Ver1.0', 'site\-valet','Site Valet', 'sitetech','SiteTech-Rover', 'skymob','Skymob.com', 'slcrawler','SLCrawler', 'smartspider','Smart Spider', 'snooper','Snooper', 'solbot','Solbot', 'speedy','Speedy Spider', 'spider[_+ ]monkey','Spider monkey', 'spiderbot','SpiderBot', 'spiderline','Spiderline Crawler', 'spiderman','Spiderman', 'spiderview','SpiderView(tm)', 'spry','Spry Wizard Robot', 'ssearcher','Site Searcher', 'sqworm','Sqworm', 'suke','Suke', 'sunrise','Sunrise', 'suntek','suntek search engine', 'sven','Sven', 'tach_bw','TACH Black Widow', 'tagyu_agent','Tagyu Agent', 'tarantula','Tarantula', 'tarspider','tarspider', 'tailrank','TailRank', 'techbot','TechBOT', 'templeton','Templeton', 'titan','TITAN', 'titin','TitIn', 'tkwww','The TkWWW Robot', 'tlspider','TLSpider', 'ucsd','UCSD Crawl', 'udmsearch','UdmSearch', 'universalfeedparser','UniversalFeedParser', 'urlck','URL Check', 'valkyrie','Valkyrie', 'verticrawl','Verticrawl', 'victoria','Victoria', 'visionsearch','vision-search', 'voidbot','void-bot', 'vwbot','VWbot', 'w3index','The NWI Robot', 'w3m2','W3M2', 'wallpaper','WallPaper (alias crawlpaper)', 'wanderer','the World Wide Web Wanderer', 'wapspider','w@pSpider by wap4.com', 'webbandit','WebBandit Web Spider', 'webcatcher','WebCatcher', 'webcopy','WebCopy', 'webfetcher','webfetcher', 'webfoot','The Webfoot Robot', 'webinator','Webinator', 'weblinker','WebLinker', 'webmirror','WebMirror', 'webmoose','The Web Moose', 'webquest','WebQuest', 'webreader','Digimarc MarcSpider', 'webreaper','WebReaper', 'websnarf','Websnarf', 'webspider','WebSpider', 'webvac','WebVac', 'webwalk','webwalk', 'webwalker','WebWalker', 'webwatch','WebWatch', 'whatuseek','whatUseek Winona', 'whowhere','WhoWhere Robot', 'wired\-digital','Wired Digital', 'wmir','w3mir', 'wolp','WebStolperer', 'wombat','The Web Wombat', 'wordpress','WordPress', 'worm','The World Wide Web Worm', 'wwwc','WWWC Ver 0.2.5', 'wz101','WebZinger', 'xget','XGET', # Other robots reported by users '1\-more_scanner','1-More Scanner', 'accoona\-ai\-agent','Accoona-AI-Agent', 'activebookmark','ActiveBookmark', 'adamm_bot','AdamM Bot', 'almaden','IBM Almaden Research Center WebFountain™', 'aipbot','aipbot', 'aleadsoftbot','ALeadSoftbot', 'alpha_search_agent','Alpha Search Agent', 'aport', 'Aport', 'archive\.org_bot','archive.org bot', 'argus','Argus', 'arianna\.libero\.it','arianna.libero.it', 'aspseek','ASPseek', 'asterias', 'Asterias', 'awbot', 'AWBot', 'baiduspider','BaiDuSpider', 'becomebot', 'BecomeBot', 'bender','bender focused_crawler', 'biglotron','Biglotron', 'bittorrent_bot','BitTorrent Bot', 'biz360[_+ ]spider','Biz360 spider', 'blogbridge[_+ ]service','BlogBridge Service', 'bloglines','Bloglines', 'blogpulse','BlogPulse ISSpider intelliseek.com', 'blogsearch','BlogSearch', 'blogshares','Blogshares Spiders', 'blogslive','Blogslive', 'blogssay','BlogsSay :: RSS Search Crawler', 'bncf\.firenze\.sbn\.it\/raccolta\.txt','Biblioteca Nazionale Centrale di Firenze', 'bobby', 'Bobby', 'boitho\.com\-dc','boitho.com-dc', 'bookmark\-manager','Bookmark-Manager', 'boris', 'Boris', 'bumblebee', 'Bumblebee (relevare.com)', 'candlelight[_+ ]favorites[_+ ]inspector','Candlelight_Favorites_Inspector', 'cbn00glebot','cbn00glebot', 'cerberian_drtrs','Cerberian Drtrs', 'cfnetwork','CFNetwork', 'cipinetbot','CipinetBot', 'checkweb_link_validator','CheckWeb link validator', 'commons\-httpclient','Jakarta commons-httpclient', 'computer_and_automation_research_institute_crawler','Computer and Automation Research Institute Crawler', 'converamultimediacrawler','ConveraMultiMediaCrawler', 'converacrawler','ConveraCrawler', 'cscrawler','CsCrawler', 'cse_html_validator_lite_online','CSE HTML Validator Lite Online','cuasarbot','Cuasarbot', 'cursor','Cursor', 'custo','Custo', 'datafountains\/dmoz_downloader','DataFountains/DMOZ Downloader', 'daviesbot', 'DaviesBot', 'daypopbot', 'DayPop', 'deepindex','Deepindex', 'dipsie\.bot','Dipsie', 'dnsgroup','DNSGroup', 'docomo','DoCoMo', 'domainchecker','DomainChecker', 'domainsdb\.net','DomainsDB.net', 'dulance','Dulance', 'dumbot','Dumbot', 'dumm\.de\-bot','dumm.de-Bot', 'earthcom\.info','EARTHCOM.info', 'easydl','EasyDL', 'edgeio\-retriever','edgeio-retriever', 'ets_v','ETS Enterprise Translation Server', 'exactseek','ExactSeek Crawler', 'extreme[_+ ]picture[_+ ]finder','Extreme_Picture_Finder', 'eventax','eventax', 'everbeecrawler','EverbeeCrawler', 'everest\-vulcan','Everest-Vulcan', 'ezresult', 'Ezresult', 'enteprise','Fast Enteprise Crawler', 'fast\-search\-engine','Fast-Search-Engine (not fastsearch.com)', 'fast_enterprise_crawler','FAST Enterprise Crawler', 'fast_enterprise_crawler.*scrawleradmin\.t\-info@telekom\.de','FAST Enterprise Crawler * crawleradmin.t-info@telekom.de', 'matrix_s\.p\.a\._\-_fast_enterprise_crawler','Matrix S.p.A. - FAST Enterprise Crawler', 'fast_enterprise_crawler.*t\-info_bi_cluster_crawleradmin\.t\-info@telekom\.de','FAST Enterprise Crawler * T-Info_BI_cluster crawleradmin.t-info@telekom.de', 'favorg','FavOrg', 'favorites_sweeper','Favorites Sweeper', 'feedburner', 'Feedburner', 'feedfetcher\-google','Feedfetcher-Google', 'feedflow','FeedFlow', 'feedster','Feedster', 'feedsky','FeedSky', 'feedvalidator','FeedValidator', 'filmkamerabot','FilmkameraBot', 'findexa_crawler','Findexa Crawler', 'geniebot','Geniebot', 'findlinks','Findlinks', 'fooky\.com\/ScorpionBot','Fooky.com/ScorpionBot/ScoutOut', 'g2crawler','G2Crawler', 'gaisbot','Gaisbot', 'gigabot','GigaBot', 'girafabot','Girafabot', 'global_fetch','Global Fetch', 'gnodspider','GNOD Spider', 'goforit\.com','GoForIt.com', 'goforitbot','GOFORITBOT', 'gpu_p2p_crawler','GPU p2p crawler', 'grub','Grub.org', 'henrythemiragorobot', 'Mirago', 'heritrix','Heritrix', 'holmes', 'Holmes', 'hoowwwer','HooWWWer', 'hpprint','HPPrint', 'htmlparser','HTMLParser', 'html[_+ ]link[_+ ]validator','Html_Link_Validator', 'httrack','HTTrack off-line browser', 'hundesuche\.com\-bot','Hundesuche.com-Bot', 'ichiro','ichiro', 'iltrovatore\-setaccio','IlTrovatore-Setaccio', 'infobot','InfoBot', 'infociousbot','InfociousBot', 'infomine','INFOMINE VLCrawler', 'insurancobot','InsurancoBot', 'internet[_+ ]ninja','Internet_Ninja ', 'internetarchive','InternetArchive', 'internetseer', 'InternetSeer', 'internetsupervision','InternetSupervision', 'irlbot','IRLbot', 'isearch2006','isearch2006', 'iupui_research_bot','IUPUI_Research_Bot', 'jrtwine[_+ ]software[_+ ]check[_+ ]favorites[_+ ]utility','JRTwine_Software_Check_Favorites_Utility', 'justview', 'JustView', 'kalambot','KalamBot', 'kamano\.de_newsfeedverzeichnis','kamano.de NewsFeedVerzeichnis', 'kazoombot','KazoomBot', 'kevin','Kevin', 'keyoshid','Yahoo! Japan keyoshid robot study', 'kinjabot', 'Kinjabot', 'kinja\-imagebot', 'Kinja Imagebot', 'knowitall','KnowItAll', 'knowledge\.com','Knowledge.com', 'kouaa_krawler','Kouaa Krawler', 'krugle','Krugle', 'ksibot','ksibot', 'kurzor','Kurzor', 'lanshanbot','lanshanbot', 'letscrawl\.com','LetsCrawl.com', 'libcrawl','Crawl libcrawl', 'link_valet_online','Link Valet Online', 'linkbot','LinkBot', 'linkchecker','LinkChecker', 'livejournal\.com', 'LiveJournal.com', 'magpierss', 'MagpieRSS', 'mapoftheinternet\.com','MapoftheInternet.com', 'mediapartners\-google','Google AdSense', 'megite','Megite', 'metager\-linkchecker','MetaGer LinkChecker', 'metaspinner','Metaspinner', 'microsoft[_+ ]url[_+ ]control','Microsoft URL Control', 'minirank','miniRank', 'mini\-reptile','Mini-reptile', 'missigua_locator','Missigua_Locator', 'misterbot','Misterbot', 'miva','Miva', 'mizzu_labs','Mizzu Labs', 'mj12bot','MJ12bot', 'mojeekbot','MojeekBot', 'msiecrawler','MSIECrawler', 'ms_search_4\.0_robot','MS SharePoint Portal Server - MS Search 4.0 Robot', 'msrabot','msrabot', 'msrbot','MSRBOT', 'mt::telegraph::agent','MT::Telegraph::Agent', 'mydoyouhike','Mydoyouhike', 'nagios','Nagios', 'nasa_search','NASA Search', 'netluchs','Netluchs', 'netsprint','NetSprint', 'newsgatoronline', 'NewsGator Online', 'nicebot','nicebot', 'nimblecrawler','NimbleCrawler', 'noxtrumbot','noxtrumbot', 'npbot','NPBot', 'nutchcvs','NutchCVS', 'nutchosu\-vlib','NutchOSU-VLIB', 'nutch','Nutch', 'ocelli','Ocelli', 'octora_beta_bot','Octora Beta Bot', 'omniexplorer[_+ ]bot','OmniExplorer Bot', 'onet\.pl[_+ ]sa','Onet.pl_SA', 'onfolio','Onfolio', 'opentaggerbot','OpenTaggerBot', 'openwebspider','OpenWebSpider', 'oracle_ultra_search','Oracle Ultra Search', 'orbiter','Orbiter', 'yodaobot','OutfoxBot/YodaoBot', 'qihoobot','QihooBot', 'passwordmaker\.org','passwordmaker.org', 'pear_http_request_class','PEAR HTTP Request class', 'peerbot','PEERbot', 'perman', 'Perman surfer', 'php[_+ ]version[_+ ]tracker','PHP version tracker', 'pictureofinternet','PictureOfInternet', 'ping\.blo\.gs','ping.blo.gs', 'plinki','plinki', 'pluckfeedcrawler','PluckFeedCrawler', 'pompos','Pompos', 'popdexter','Popdexter', 'port_huron_labs','Port Huron Labs', 'postfavorites','PostFavorites', 'projectwf\-java\-test\-crawler','ProjectWF-java-test-crawler', 'proodlebot','proodleBot', 'pyquery','PyQuery', 'rambler','StackRambler', 'redalert','Red Alert', 'relevantnoise\.com', 'Relevant Noise', 'rojo','RoJo aggregator', 'rssimagesbot','rssImagesBot', 'ruffle','ruffle SemanticWeb crawler', 'rufusbot','RufusBot Rufus Web Miner', 'sandcrawler','SandCrawler (Microsoft)', 'sbider','SBIder', 'schizozilla','Schizozilla', 'scumbot','Scumbot', 'searchguild[_+ ]dmoz[_+ ]experiment','SearchGuild_DMOZ_Experiment', 'seekbot','Seekbot', 'sensis_web_crawler','Sensis Web Crawler', 'seznambot','SeznamBot', 'shim\-crawler','Shim-Crawler', 'shoutcast','Shoutcast Directory Service', 'slysearch','SlySearch', 'snap\.com_beta_crawler','snap.com beta crawler', 'sohu\-search','sohu-search', 'sohu','sohu agent', 'snappy','Snappy', 'sphere_scout','Sphere Scout', 'sproose_crawler','sproose crawler', 'steroid__download','STEROID Download', 'steeler','Steeler', 'suchfin\-bot','Suchfin-Bot', 'superbot','SuperBot', 'surveybot','SurveyBot', 'susie','Susie', 'syndic8','Syndic8', 'syndicapi','SyndicAPI', 'synoobot','SynooBot', 'tcl_http_client_package','Tcl http client package', 'technoratibot', 'Technoratibot', 'teragramcrawlersurf','TeragramCrawlerSURF', 'test_crawler','Test Crawler', 'testbot','TestBot', 't\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e','T-H-U-N-D-E-R-S-T-O-N-E', 'topicblogs', 'topicblogs', 'turnitinbot','Turn It In', 'turtle', 'Turtle', 'turtlescanner', 'Turtle', 'tutorgigbot','TutorGigBot', 'twiceler','twiceler', 'ubicrawler','UbiCrawler', 'ultraseek', 'Ultraseek', 'unchaos_bot_hybrid_web_search_engine','UnChaos Bot Hybrid Web Search Engine', 'unido\-bot','unido-bot', 'updated','updated', 'ustc\-semantic\-group','USTC-Semantic-Group', 'vagabondo\-wap','Vagabondo-WAP', 'vagabondo','Vagabondo', 'vermut','Vermut', 'versus_crawler_from_eda\.baykan@epfl\.ch','versus crawler from eda.baykan@epfl.ch', 'vespa_crawler','Vespa Crawler', 'vortex','VORTEX', 'vse','VSE', 'w3c\-checklink','W3C Link Checker', 'w3c[_+ ]css[_+ ]validator[_+ ]jfouffa', 'W3C jigsaw CSS Validator', 'w3c_validator','W3C Validator', 'wavefire','Wavefire', 'webclipping\.com', 'WebClipping.com', 'webcompass', 'webcompass', 'webcrawl\.net','webcrawl.net', 'web_downloader','Web Downloader', 'webdup','Webdup', 'webfilter','WebFilter', 'webindexer','WebIndexer', 'webminer','WebMiner', 'website[_+ ]monitoring[_+ ]bot','Website_Monitoring_Bot', 'webvulncrawl', 'WebVulnCrawl', 'wells_search','Wells Search', 'wonderer', 'Web Wombat Redback Spider', 'wume_crawler','wume crawler', 'wwweasel',,'WWWeasel', 'xenu\'s_link_sleuth','Xenu Link Sleuth', 'xenu_link_sleuth','Xenu Link Sleuth', 'xirq','xirq', 'y!j', 'Y!J Yahoo Japan', 'yacy','yacy', 'yahoo\-blogs','Yahoo-Blogs', 'yahoo\-verticalcrawler', 'Yahoo Vertical Crawler', 'yahoofeedseeker', 'Yahoo Feed Seeker', 'yahooseeker\-testing', 'YahooSeeker-Testing', 'yahooseeker', 'YahooSeeker Yahoo! Blog crawler', 'yahoo\-mmcrawler', 'Yahoo-MMCrawler', 'yahoo!_mindset','Yahoo! Mindset', 'yandex', 'Yandex bot', 'yooglifetchagent','yoogliFetchAgent', 'z\-add_link_checker','Z-Add Link Checker', 'zealbot','ZealBot', 'zhuaxia','ZhuaXia', 'zspider','zspider', 'zeus','Zeus Webster Pro', 'ng\/1\.','NG 1.x (Exalead)', # put at end to avoid false positive 'ng\/2\.','NG 2.x (Exalead)', # put at end to avoid false positive 'exabot','Exabot', # put at end to avoid false positive 'java','Java (Often spam bot)', # put at end to avoid false positive # Generic root ID 'robot', 'Unknown robot (identified by \'robot\')', 'crawl', 'Unknown robot (identified by \'crawl\')', 'spider', 'Unknown robot (identified by \'spider\')', 'bot[+:,\.\;\/\\\-]','Unknown robot (identified by \'bot*\')', '[+:,\.\;\/\\\-]bot','Unknown robot (identified by \'*bot\')', 'no_user_agent','Unknown robot (identified by empty user agent string)', # Unknown robots identified by hit on robots.txt 'unknown', 'Unknown robot (identified by hit on \'robots.txt\')' ); # RobotsAffiliateLib # This list try to tell by which Search Engine a robot is used #------------------------------------------------------------- %RobotsAffiliateLib = ( 'fast\-webcrawler'=>'AllTheWeb', 'googlebot'=>'Google', 'google\-sitemap'=>'Google', 'msnbot'=>'MSN', 'nutch'=>'Looksmart', 'scooter'=>'AltaVista', 'wisenutbot'=>'Looksmart', 'yahoo\-blogs'=>'Yahoo', 'yahoo\-verticalcrawler'=>'Yahoo', 'yahoofeedseeker'=>'Yahoo', 'yahooseeker\-testing'=>'Yahoo', 'yahooseeker'=>'Yahoo', 'yahoo\-mmcrawler'=>'Yahoo', 'yahoo!_mindset'=>'Yahoo', 'zyborg'=>'Looksmart', 'cfetch'=>'Kosmix', '^voyager\/'=>'Kosmix' ); 1; lib/blacklist.txt000064400000162541152532065620010042 0ustar00# # MT-Blacklist Master Copy # # Last update: 2005/08/26 10:18:13 # Number of entries: 3117 # # This is the master copy of the MT-Blacklist plugin # spammer blacklist. You can import this file through # the Add screen in the plugin web interface. # # You can find out more about this file at: # http://www.jayallen.org/comment_spam/ # # You can find out more about MT-Blacklist at # http://www.jayallen.org/projects/mt-blacklist # ([\w\-_.]+\.)?(l(so|os)tr)\.[a-z]{2,} # Catchall regex for lsotr.xxx and lostr.xxx with or without a subdomain (blow)[\w\-_.]*job[\w\-_.]*\.[a-z]{2,} # This stops a whole slew of domain name variations relating to -- well -- you know... (buy)[\w\-_.]*online[\w\-_.]*\.[a-z]{2,} # Catchall regexp for many spam sites (diet|penis)[\w\-_.]*(pills|enlargement)[\w\-_.]*\.[a-z]{2,} # Catchall regexp for many spam sites (i|la)-sonneries?[\w\-_.]*\.[a-z]{2,} (levitra|lolita|phentermine|viagra|vig-?rx|zyban|valtex|xenical|adipex|meridia\b)[\w\-_.]*\.[a-z]{2,} # Super regexp for domains containing levitra, lolita, phentermine, viagra, vigrx, vig-rx, zyban, valtex, xenical, adipex and meridia (magazine)[\w\-_.]*(finder|netfirms)[\w\-_.]*\.[a-z]{2,} (mike)[\w\-_.]*apartment[\w\-_.]*\.[a-z]{2,} # Catchall regexp for Mike's Apartment variations (milf)[\w\-_.]*(hunter|moms|fucking)[\w\-_.]*\.[a-z]{2,} (online)[\w\-_.]*casino[\w\-_.]*\.[a-z]{2,} # Catchall regexp for a hundred online casino sites (prozac|zoloft|xanax|valium|hydrocodone|vicodin|paxil|vioxx)[\w\-_.]*\.[a-z]{2,} # Super regexp for domains containing prozac, zoloft, xanax, valium, hydrocodone, vicodin, paxil, vioxx (ragazze)-?\w+\.[a-z]{2,} # Catchall regexp for many spam sites (ultram\b|\btenuate|tramadol|pheromones|phendimetrazine|ionamin|ortho.?tricyclen|retin.?a\b)[\w\-_.]*\.[a-z]{2,} # Third drug super regexp (valtrex|zyrtec|\bhgh\b|ambien\b|flonase|allegra|didrex|renova\b|bontril|nexium)[\w\-_.]*\.[a-z]{2,} # Fourth drug super regexp -4-you.info -4u.info -mobile-phones.org -site.info .gb.com .lycos.de .static.net 01-beltonen.com 01-klingeltoene.at 01-klingeltoene.de 01-loghi.com 01-logo.com 01-logot.com 01-logotyper.com 01-melodia.com 01-melodias.com 01-ringetone.com 01-ringsignaler.com 01-ringtone.com 01-ringtones.us 01-soittoaanet.com 01-suonerie.com 01-toque.com 01ringtones.co.uk 0adult-cartoon.com 0adult-manga.com 0cartoon-porn.com 0cartoon-sex.com 0cartoon.com 0casino-online.com 0casinoonline.com 0catch.com 0free-hentai.com 0freehentai.com 0hentai-anime.com 0hentai-manga.com 0hentaimanga.com 0internet-casino.com 0livesex.com 0manga-porno.com 0manga-sesso.com 0manga.com 0sesso-amatoriale.com 0sesso-orale.biz 0sesso.biz 0sesso.us 0sessoanale.com 0sessogratis.us 0sex-toons.com 0sfondi-desktop.com 0sfondi.com 0suonerie.com 0tatuaggi.com 0toons.com 0video-porno.com 0virtual-casino.com 0xxx-cartoon.com 1-bignaturals.com 1-cumfiesta.com 1-klingeltone.com 1-online-poker.us 1-poker-games.biz 1-welivetogether.com 1-wholesale-distributor.com 100-sex.com 100free.com 100hgh.com 101pills.com 108bikes.com 123-home-improvement-equity-loans.com 123-sign-making-equipment-and-supplies.com 123onlinepoker.com 123sessogratis.com 125mb.com 15668.com 16pp.com 1a1merchantaccounts.com 1asphost.com 1concerttickets.com 1footballtickets.com 1freespot.com 1on8.co.uk 1on8.com 1st-advantage-credit-repair.com 1st-auto-insurance-4u.com 1st-host.org 1st-payday-loans.net 1st-phonecard.com 1st-poker-online.com 1st-printer-ink-cartridge.com 1st-shemale-sex.com 1stincomeracing.co.uk 1stindustrialdirectory.com 1stlookcd.com 1xp6z.com 20fr.com 216.130.167.230 24-hour-fitness-online.com 247-rx.net 2ndmortgageinterestrates.com 2teens.net 2twinks.com 2y.net 2zj.cn 3-day-diet-plan.com 321cigarettes.com 333-casino.com 333-poker.com 3333.ws 365jp.com 38ha.com 3host.com 3sixtyfour.com 3yaoi.com 404host.com 404servers.com 41b.net 42tower.ws 444-casino.com 444-poker.com 4hs8.com 4mg.com 4result.net 4u-topshelfpussy.com 4womenoftheworld.com 51.net 51asa.com 555-poker.com 5amateurs.com 65.217.108.182 666-casino.com 666-gambling.com 69.61.11.163 6p.org.uk 6x.to 7host.com 7p.org.uk 7yardsweb.com 888-online-poker.com 888cas.com 888jack.com 88aabb.com 8bit.co.uk 8gold.com 8k.com 8th\S*street\S*latina\S*\.[a-z]{2,} 8yardsweb.com 911easymoney.com 911pills.info 989888.com 9p.org.uk \bby\.ru\b \bda\.ru\b \bde\.gg\b \bde\.nr\b \bde\.tc\b \bde\.tp\b \bgo\.ro\b a--e.com a-1-versicherungsvergleich.de a-pics.net a-purfectdream-expression.com a-stories.com a1-mortgage-finder.com a1cellphoneaccessories.info a1digitalcameras.info a1metalbuildings.info a1steelbuildings.info a1timemanagement.info abc3x.com abnehmen-ganz-sicher.com abocams.de aboutgrouphomes.com abymetro.org.uk academyofmusic.us acceptcreditcardsonlineinternetmerchantaccountservices.com acceptcreditcardsrealtime.com accompagnatrici.cc achtung.hopto.org acornfm.com acornwebdesign.co.uk acrs.us activerx.com acyclovir.net addictinggames.com aducasher.spb.ru adult-dvd-dot.com adult-dvds-dot.com adult-free-webcams.com adult-friend.info adult-games.name adult-manga.org adult-porno.us adultfreehosting.com adultfriendfinder.com adultfriendfindernow.com adultfriendfindersite.com adultfriendsite.com adulthostpro.com adultlingerieuk.com adultnonstop.com adultporncentral.net adultserviceproviders.com adultshare.com advantage-quotes.com aektschen.de aesthetics.co.il affilino.net afreeserver.com ahbabe.com aimite.com airfare-links.net airshow-china.com.cn alawna.blogspot.com all-calmortgage.com all-debt-consolidation.org all-fioricet.com all-gay-porn.us all-poker-online all-we-live-together.com allago.de allfind.us allinsurancetype.com allmagic.ru alloha.info allohaweb.com allthediets.com allthroating.com almacenpc.com alphacarolinas.org alright.com.ru alumnicards.com amateur-lesbian.us amateur-movie.us amateur-naked.us amateur-porn-gallery.com amateur-porno.us amateur-site.us amateur-thumbnail.com amateur-thumbs.net amateurjerkoff.org amateurs-xxx.us amateurs.r00m.com amateursuite.com amazing-satellite-tv-deals.info americacashfast.com american-single-dating.com americancdduplication.com americanpaydayloans.net americastgp.com amoxicillin-online.net anal-sex-pictures.us analloverz.com andyedf.de angenehmen-aufenthalt.de animal-fuck.org animal-porn.ws animalsex-movies-archive.com animalsex-pics-gallery.com anime-adult.us anime-hentai-porn.com anime-manga.us anime-porn-sex-xxx.com anime-porn.name anime-sex-cartoon-porn.com annunci-coppie.net annunci-erotici.net annunci-erotici.org annunci-personali.org annunci-sesso.org annunci-sesso.us annuncisesso.us anonsi.com anonymous-blogger.com ansar-u-deen.org anti-exploit.com anticlick.com.ru anuntisinmobiliaria.com anxietydisorders.biz anylight4u.com anything4health.com anzwers.org aol-com.us ap8.com apecceosummit2003.com apollopatch.com apornhost.com apply-to-green-card.org appollo.org approval-loan.com aquari.ru aquatyca.net arcsecurity.co.uk area-code-npa-nxx.com argendrom.com armor2net.com aromacc.com artsculpture.org aseman.weblogs.us asian-girls-porn-sex.com asian-girls.name asian-nude.blogspot.com asian-sex-woman.com asianbum.com ass-picture.us assserver.com at-capstone.com atkins-diet-center.com atkinsexpert.com atkpremium.net atkpremium.org atlanta2000.org atlas-pharmacy.com auctionmoneymakers.com auktions-uebersicht.de australia-online-travel.com austria-travels.info auto-insurance-links.net auto-loans-usa.biz autodetailproducts.com autodirektversicherung.com autofinanzierung-autokredit.de autofinanzierung-zum-festzins.de autohandelsmarktplatz.de autokredit-autofinanzierung.de autokredit-tipp.de automotive.com autumn-jade.com avon-one.com azian.org b-witchedcentral.co.uk ba2000.com babes-d.com babes-plus.com baby-perfekt.de babymarktplatz-aktiv.de back-room-facials.angelcities.com background-check.info backroom-facials.150m.com backseatbangers bad-movies.net bad-passion.com bahraichfun.com bali-dewadewi-tours.com bali-hotels.co.uk balidiscovery.org balivillas.net balltaas.com banialoba3w.150m.com banned-pics.com bannedhome.com barcodes.cn bare.org barely-legal-teenb.com barely-legald.com barelylegalgirlsex.com bargainfindsonebay.com bargeld-tipp.de basi-musicali.com basketball--betting.net bast3.ru batukaru\.[a-z]{2,} bbwclips.com bccinet.org bdsm-story.blogspot.com beastiality-animal-sex-stories.com beastiality-stories.net beastsex-movies.com beauty-farm.net bedding-etc.com belinking.com belle-donne.biz belle-ragazze.net belle-ragazze.org belleragazze.biz belleragazze.org bellissime-donne.com bellissime-donne.net bellissimedonne.com bellissimedonne.org beltonen-logos-spel.com benessere.us berwickfoundation.org best-buy-cialis.com best-cell-phone-batteries.info best-cialis-source.com best-deals-blackjack.info best-deals-casino.info best-deals-cheap-airline-tickets.info best-deals-diet.info best-deals-flowers.info best-deals-hotels.info best-deals-online-gambling.info best-deals-online-poker.info best-deals-poker.info best-deals-roulette.info best-deals-weight-loss.info best-e-site.com best-gambling.biz best-high-speed-internet.com best-internet-bingo.com best-pharmacy.us best-result-fast.com bestasianteens.com bestdims.com bestdvdclubs.com bestgamblinghouseonline.com besthandever.com bestiality-pics.org bestialitylinks.org bestits.net bestlowmortgagerates bestonline-medication.com bestonline-medication.net bestonline-shopping.com bestpornhost.com bet-on-horseracing.com beverlyhillspimpandhos.com beverlyhillspimpsandhos.com biexperience.org big-black-butts.net big-breast-success.com big-hooters.net big-natural-boobs.us big-naturals-4u.com big-rant.com bigbras-club.com bigmag.com.ua bigmoms.com bigtitchaz.com bigyonet.com bildmitteilung.us billigfluege-billige-fluege.de bingo-net.com bio-snoop.com birth-control-links.com bizhat.com bj-cas.cn bj-fyhj.com bj-hchy.com bjerwai.com bjgift.com bjkhp.com bjxhjy.com bla5.com black-amateur-cock.net black-dick-white-slut.com black-girls.blowsearch.ws black-jack-4u.net black-jack-trx.com blackbusty.com blackjack-123.com blackjack-21.ws blackjack-4u.net blackjack-777.net blackjack-8.com blackjack-dot.com blackjack-homepage.com blackjack-p.com blackjack-play-blackjack.com blackjack-winner.net blackjack.fm blackjack777.net blackjacksite.net blahblah.tk blk-web.de bllogspot.com blog-tips.com bloglabs.biz blogman.biz blogmen.net blogspam.org blonde-pussy.us blonde-video.us blonde-xxx.us blondes2fuck.com blumengruss-onlineshop.de blumenshop-versand.de bnetsol.com body-jewelry.reestr.net body-piercing.softinterop.com bodyjock.com bon-referencement.com bondage-story.blogspot.com boobmorning.com boobspost.com booktextone.com boom.ru borindonaragara.com boysgonebad.net brazilbang.biz breast-augmentation.top-big-tits.com briana-banks-dot.com british-hardcore.net bszz.com bueroversand-xxl.de bugaboo-stroller.com build-penis.com bulkemailsoft.com burningcar.net burundonamagara.com business-grants.org business-web-site.net businessgrants.biz busty-models.us bustyangelique.com bustydustystash.com bustykerrymarie.com butalbital.org buy-2005-top.com buy-2005.com buy-adult-sex-toys.com buy-adult-toys.biz buy-car-insurance-4-us.com buy-ceramics.com buy-cheapest-lexapro-side-effects-noprescription.biz buy-cialis.ws buy-computer-memory.net buy-computer.us buy-discount-airline-tickets.com buy-laptop.biz buy-rx-usa.com buy-sex-toys.net buycheapcialis buycheappills.net buyhgh buylipitor buyprilosec buystuffpayless.com buyzocor byronbayinternet.com c-start.net ca-america.com ca-s-ino.com calendari-donne.com calendari-donne.net calendaridonne.com calendaridonne.net california-real-estate-sale.com callingcardchoice.com cambridgetherapynotebook.co.uk camemberts.org canadianlabels.net cantwell2000.com canzoni-italiane.com canzoni-italiane.net canzoni-italiane.org canzoni-karaoke.com canzoni-mp3.com canzoni-mp3.us canzoni-musica.com canzoni.cc canzonisanremo.com canzonistraniere.com capital-credit-cards.com capquella.com captain-stabbin-4u.com captain-stabbin.blogspot.com car-financing-low-rates.biz car-fuck.net car-rental-links.com car-rental-search.com car-rentals-2go.com card-games-tfx.com cardsloansmortgages.com caribbean-poker-web.com carnalhost.com carnumbers.ru cars-links.com cartoni-animati.com cartoni-hentai.com cartoni-hentai.net cartoni-hentai.org cartoni-porno.com cartonierotici.com cartonigiapponesi.com cartonihentai.net cartopia.com cas7.net cash-advance-quick.com cashadvanceclub.com casino-bet-casino.com casino-cash.net casino-en-ligne.fr.vu casino-game-trx.com casino-games-4-us.com casino-games-i.com casino-gaming-trx.com casino-in-linea.it.st casino-jp.com casino-on-net.com casino-online-i.com casino-online-on-line.com casino-onnet-bonus.com casino-slot.ws casino-wins.net casino.150m.com casino.menegum.co.uk casino747.net casinochique.com casinoequipmentsalesandrental.com casinolasvegas-online.com casinoplaces.net casinos-8.com casinos-jp.com casinos-plus.com castingagentur2004.de catchathief.org cbitech.com ccie-ccnie.com ccie130.com ccna-ccna.com ccna130.com ccnp-ccnp.com ccnp130.com cds-xxl.de cdshop-guenstig.de celebrexonline.us celebritylust.blog-city.com celebritypics.ws celebskin.com celebtastic.com cell-phone-accessories-dot.com ceramics-store.com certificationking.net certified-new-autos.com certified-new-cars.com certified-new-suvs.com certified-used-cars.com certified-used-suvs.com cesew.org charisma.dyndns.dk chat-l.de chatten.bilder-j.de chauffeurtours.co.uk cheap-adult-sex-toys.com cheap-airfare-airline-ticket.com cheap-celebrex-prescriptions.com cheap-christmas-gifts.co.uk cheap-cigarettes.com cheap-laptop-notebook.netdims.com cheap-online-pharmacy.org cheap-pills-online.com cheap-web-hosting-companies.com cheapacyclovir.com cheapcodeine.biz cheapdrugpharmacy.com cheaper-digital-cameras.uk.com cheaper-loans.eu.com cheapest-pills-online.com cheapgenericsoma.info cheapsomaonline.biz cheaptabs.envy.nu checkmeds.com cherrybrady.com chickz.com chillout.bpa.nu chinaaircatering.com chinagoldcoininc.com chineseapesattack chloesworld.com choose-online-university.com chrislaker.co.uk christmas-casino.spb.ru cialis-buy.com cialis-dot.com cialis-express.com cialis-weekend-pills.com cialis.homeip.net cialisapcalis.com cialisnetwork.com cialisusa.bravehost.com ciscochina.com clamber.de clanbov.com classifiche-italiane.org classifiche-musicali.com classifiche-musicali.net classifiche-musicali.org classifichemusicali.com claudiachristian.co.uk claypokerchips-claypokerchips.com cleanadulthost.com cleannbright.co.uk click-or-not.de click-poker.com clophillac.org.uk closed-network.com club-online-poker club69.net clubatlantiscasino.com cmeontv.de cnbjflower.com cngangqiu.com cntoplead.com coed-girls.com coffee-delivered.com college-girl-pic.com college-links.net college-scholarships-grants.biz combaltec.com comeback.com cometojapan.com cometomalaysia.com cometosingapore.com cometothailand.com completelycars.com completelyherbal.com comptershops-online.de computer-onlinebestellung.de computer-und-erotische-spiele-download.com computerversand-xxl.de condodream.com condosee.com conjuratia.com consolidate-debt-usa.net consolidation-loans.com container-partner.de cool-extreme.com cool-mix.com cool-poker.com coolp.biz coolp.net coolp.org coresleep.com cosmeticsurgery.us cosmeticsurgery.us.com couponmountain.com cover-your-feet.com crazyfrog.wtf.la creamfilledholes.biz credit-cards-credit-cards-credit-cards.net credit-factor.com credit-links.net credit-loans-2005.com credit-report-links.net creditcardpost.com creditrepairsoft.com creditsharpie.com crepesuzette.com crescentarian.net crpublish.com cum-facials.us cumfiesta-4u.com cumfietavideos.com cumlogin.com customer-reviews.org cutpricepills.com cyberfreehost.com cycatki.com cyclo-cross.co.uk cykanax.com dad-daughter-incest.com daiiuvwx.com dailyliving.info dallmayr.de damianer.top-100.pl danni.com darest.de darkangelclan.com darzgx.com datestop.net dating-choice.com dating-harmony.com dating-online-dating.org dating-service-dating.com dating-services-dating-service.com dating999 dating999.com davidtaylor.topcities.com day4sex.com de.hm de\.sr debt-consolidation-i debt-consolidation-i.biz debt-consolidation-kick-a.com debt-consolidation-low-rates.biz debt-consolidation-now-online.com debt-disappear.com debt-help-bill-consolidation-elimination.com debt-solution-tips.com debtconsolidationfirm.net debtconsolidationloans debtconsolidationusa.org debtmanagementcompanyonline.com dedichepersonali.com deep-ice.com deikmann.de dental-insurance-plan.freeservers.com dental-plan-source dentalinsurancehealth.com department-storez.com design4u.ws desiraesworld.com deutschlandweite-immobilienangebote.de devilofnights.net devilofnights.org devon-daniels.com devonanal.com dia-host.com dianepoppos.com diarypeople.com dick-deputy.com diecastdot.com diet-doctor.net diet-pills-now dieta-dimagrante.net dieta-mediterranea.net dieta-zona.com dieta.cc diete-dimagranti.com diete.bz diethost.net dieting-review.com dietpage.net dietpatchformula.com dietrest.com diets-health.com diets-plan.net dietway.net digital-projector.net digitale-teile.de digitaltwist.co.uk direct-contact.com direct-deals-for-you.info direct-tv-for-free.com direct-tv-online.com directcarrental.com directcti.com directrape.com directringtones.com dirty-story.blogspot.com discount-airfares-guide.com discount-cheap-dental-insurance.com discount-life-insurance.us discountprinterrefill.com discoveryofusa.com dish-network-w.com dish-network.org disigncn.com disney-hentai.org divorce-links.com dlctc.com dnpose.com dns110.com dns2008.cn dogfartmovieclips.com dogfartmovieclips.com dogolz.de domkino.com.ua donne-belle.net donne-famose.biz donne-muscolose.net donne-muscolose.org donne-nere.net donne-nere.org donne-nude.biz donne-porche.com donne-vogliose.com donne.bz donnebelle.net donnefamose.biz donnegrasse.org donnemature.biz donnemuscolose.com donnenere.com donnenere.net donnenude.biz donneporche.org donnesexy.org donnevogliose.net donnevogliose.org doo.pl doobu.com doorway-page-software dostweb.com dotcomup.com downloadzipcode.com dr\.ag dragonball-porno.com dragonball-x.biz dragonball-xxx.biz dragonballporno.net dragonballx.cc dragonballxxx.biz dressagehorseinternational.co.uk drive-backup.com drochka.com drugsexperts.com drugstore-online.us drugstore.st drunk-girls-flashing.com drunk-girls-party.us dunecliffesaunton.co.uk dvd-copier.info dvd-home-theatre.com dvd-top-shop.info dvd2.us dwoq.com dzwonki-polifoniczne-motorola.webpark.pl e--pics.com e-best-poker.com e-bookszone.com e-casino-bonus.com e-cialis.net e-credit-card-debt.com e-debt-consolidation-loans.com e-dental-insurance-plans e-dental-plans.com e-discus.com e-fioricet.com e-free-credit-reports.com e-hoodia-gordonii.com e-lemonlaw.com e-news.host.sk e-online-bingo.com e-order-propecia.com e-personalinjurylawyers e-personalinjurylawyers.com e-pills-buy.com e-play-bingo.com e-poker-games.info e-southbeachdiet.com e-top-pharmacy.com e-tutor.com e-virtual-casino.com e40.nl easy-application-credit-cards.com easygo.hn.org easyrecorder.com easyseek.us ebanking.info ebaybusiness.net ebloggy.com ebony-girls.angelcities.com ebony-xxx.us ebookers.co.uk ecblast.com eccentrix.com/members/casinotips echofourdesign.com eclexion.net ecologix.co.uk eddiereva.com edietplans.net edmontgomeryministries.org edpowerspasswords.com edrugstore.md education-line.com edwardbaskett.com effexor-web.com effexor.cc eggesfordhotel.co.uk egygift.com einfach-wunschgewicht.com elcenter-s.ru eldorado.com.ua electricscooterland.com electromark-uk.co.uk electronics-info.com elegant-candles.com elektronikshop-xxl.de elite-change.com elitecities.com emmasarah.com emmss.com enacre.net enjoy-blackjack.com enlargement-for-penis.com envoyer-des-fleurs.com eonsystems.com epaycash.com erbium12.com erosway.com erotic-free.com erotic-lesbian-story.blogspot.com erotic-video.us erotic4free.net erotische-geschichten-portal.com escort-links.net escorts-links.com esesso-gratis.com esmartdesign.com ethixsouthwest.com evananderson.topcities.com evanstonpl.org event-kalendarium.de everyvoice.net evromaster.ru exclaim4creditcardprocessingmerchantaccount.com exdrawings.com exoticdvds.co.uk exoticmoms.com expoze.com extrasms.de extreme-rape.org extreme-sex.org f-z-a.com f2g.net f2s.be fabida.net fabulos.de fabuloussextoys.com facial-skin-care-center.com family-incest-stories.com family-incest.us familydiet.org famousppl.me.uk fantasyfootballsportsbook.com farm-beastiality.com farmsx.com fast-cash-quick-money-easy-loan.com fast-fioricet.com fast-mortgage-4-u.com fasthost.tv fat-cash.com fat-lesbians.net fat-pussy-sex.net fateback.com fatty-liver.cn fatwarfare.com favilon.net fda.com.cn fearcrow.com federalgovernmentgrants.net feidenfurniture.com female-orgasms.org fidelityfunding.net fielit.de figa.nu film-porno.us film456.com filthserver.com final-fantasy-hentai.org finance-world.net finanzen-marktplatz.de find-cheap-dental-plans.com find-lesbian-porn.com find-u-that-mortgage.com findbestpills findbestpills.com findbookmakers.com finddatingsites.com findsexxx.us findyouruni.com finger-bobs.com fioricet-dot.com fioricet-online-here.com fioricet-web.com fioricet.batcave.net fioricet.bravehost.com fioricet.st fioricet4u first-poker.com first-time-story.blogspot.com firstchoicebanksandpremiercredit.com firsttimeaddition.com fishoilmiracle.com fitness-links.net fitnessx.net flafeber.com flatbedshipping.com fleshlight.org fleshlight.ro flexeril-web.com flirt08.de flowertobj.com fly-sky.com football--betting.net football-betting-nfl.com forceful.de foreskin-restoration.net forex-online-now.com forex.inc.ru forexintroducer.com forlovedones.com fortisenterprises.co.uk foto-gay.us foto-porno.us foto-porno.ws frangelicasplace.org frankpictures.com freak-view.com freakycheats.com free--online--poker free--online-poker.com free--online-poker.us free-adult-chat-room.com free-adult-check.com free-blackjack-game.us free-britney-spears-nude.biz free-casino-games free-casino-games-000 free-debt-consolidation-online.us free-fast.net free-games-links.com free-gay-video-clip.com free-hilton-paris-sex-video.com free-horoscopes.biz free-incest-stories-site.com free-net-sex.com free-online-poker free-paris-nikki-hilton.blogspot.com free-poker-download-i.com free-poker-great-value.com free-poker-rooms.us free-satellite-tv-directv-nocable.com free-satellite-tv-now.com free-teens-galleries.com free-texashold-em.us free-texasholdem.us free-traffic-generation.com freeadult.de freedvdplayer.cjb.net freeeads.co.uk freegovmoney.net freegovmoney.us freehostingpeople.com freehustlersex.com freeminimacs.com freenetshopper.com freenudegallery.org freepicsdaily.com freepornday.com freeteenpicsandmovies.com freeweb-hosting.com freewebpage.org freewebs.com freewhileshopping.com freshsexhosting.com friko.pl fsearch.dtdns.net fuck-animals.com full-access.net fumetti-porno.org fumettiporno.org furrios.de furry-kinks-looking.com furry-kinks-looking.net future-2000.net g4h5.com gaggingwhores.net gaggingwhores.org gagnerargent.com gainmoresize.com gals4all.com galsonbed.com gamble-on-football-online.com gambleguru.net gambling-a.us gambling-card.ws gambling-casinos-trx.com gambling-homepage.com gambling\Sgames.cc gamblingguidance.co.uk gamefinder.de games-advanced.de gang-rape.org gangbangbusgallery.com gargzdai.net garment-china.com gartenshopper.de garthfans.co.uk gay-asian-porn.com gay-b.com gay-boy.us gay-male-story.blogspot.com gay-nude.us gay-sex-videos.com gay-twinks-sex.com gay1ncest.com gayfamilyincest.net gayfunplaces.com gays-porno-men-twinks-boys-sex.biz gays-sex-gay-sex-gays.us gayx.us gb.com gdgc.org gelago.de gem2.de gemtienda.co.uk generic-propecia.net genimat.220v.org genimat.cjb.net geocities.com/alexgolddphumanrbriar geocities.com/avbmaxtirodpaulmatt geocities.com/brandtdleffmatthias7 geocities.com/cclibrannar_rover geocities.com/constpolonskaalniko7 geocities.com/forestavmiagdust geocities.com/free_satellite_tv_dish_system geocities.com/gehentaiqrst geocities.com/gematureqrst geocities.com/gerapeqrst geocities.com/ofconvbdemikqfolium geocities.com/pashkabandtvcom geocities.com/pautovalexasha_kagal geocities.com/reutovoalexeypetrovseverin5 geocities.com/timryancompassmedius gesundheit-total.com gesundheitsshop-kosmetik.de get-cell-phone-accessories.com get-free-catalogs.com get-freetrial.us get-hardcore-sex.com get-insurance-quotes.com get-satellite-tv-dish.com get-your-dish-tv.info get-zoo.com getaprescription.net getdomainsandhosting.com gethelp24x7.net getmoregiveless.com getrxscripts.biz getstarted24x7.net getyourlyrics.com gfind.de ghettoinc.com giantipps.de gifs-clipart-smiley.de giochi-hentai.com giochi-online.us giochix.com girls-get-crazy.org girlshost.net give-u-the-perfect-mortgage.com giveramp.com glendajackson.co.uk global-verreisen.de globalwebbrain.com glory-vision.com gloryhole-girls.angelcities.com glucophagepharmacy.com goapplyonline.com godere.org godwebdesign.com gogito.com gogof-ck.com gojerk.com goldpills.net gomvents.com gongi.pl goodlife2000-geheimtipp.com goodsexy.com goodtv.cn google163.net google8.net gorilka.atspace.com gotooa.com gotsw.net gourmondo.de govermentgrants.net government--grant.com government-federal-grants.com government-grants.org government-grants.ws governmentalgrants.com governmentfederalgrants.com governmentgrants.tv governmentgrants.ws governmentgrantsresources.com grannypictgp.com grannysexthumbs.com grants.biz grantseekerpro great-cialis.com great-dish-tv-deals.info greatnow.com greecehotels-discount.com green-tx.com greenwood.ddns.ms group-eurosex.com growtech.cn guardami.org guenstige-krankenversicherung.com guenstige-onlineshops.de guenstige-sportartikel.de guenstige-versicherungstarife.de gunit.gotdns.com guttermag.com hair-loss-cure-x.com hair-loss-cure.net hairy-pussy-sex.net hallo-tierfreund.de hand-job.us handjoblessons.org handmade2000.co.uk handsm.servehttp.com handwerksartikel-xxl.de handy-klingeltoene.eu.tp handysprueche.de handytone.us hangchen.cn hangchen.com happy-shopping-online.com happyagency.com hard-sex-teen.com hardcore-jpg.com hardcore-junky.us hardcore-pictures.us hardcore-porn-links.com hardcore-pussy.us hardcore-sex.bz hardcore-video.us hardcorecash.net hasslerenterprises.net hasslerenterprises.org hautesavoieimmobilier.com hchcinc.com hdic.net hdic.org headachetreatment.net health-pills-online.com health-pills.net healthmore.net healthrules.org heartbeatofhealing.org helpful-forum.com helpful-pills-blog.com hentai-anime.us hentai-gratis.us hentai-hard.com hentai-porno.us hentai-xxx.us hentaigratis.net hentaimanga.us hentaiplayground.com hentaix.net hentaixxx.us hentay.us herbal-source.net hermosa.us herpies.net heydo.com hghadvisor.com hghplanet.com hgxweb.de hi-finder.com high-risk-merchant-account.org highprofitclub.com hilton-nicky-paris.blogspot.com hion.cn hit-logo-klingelton.com hit-logo-ringetone.com hit-logo-ringtone.com hit-logo-suoneria.com hit-melodias.com hit-sonnerie.net hit-sonneries.com hits-logos-games.com hits-logos-klingeltone.com hitslogosgames.com hlopci.w5.pl hobbs-farm.com hold-em-big.com hold-pok.com holdem-texaspoker.com holding.errorworld.org home-design.ws home-equity-loans-mortgage-refinancing.com home-loans-inc.com home-style.ws home-videos.net home.pages.at home\.ro\b homelivecams.com homenetworkingsolutions.co.uk hometeaminspection.net hometeaminspection.org hoodia--gardonii.com hoodia.belleity.com horny-honey.com horny-world.com hornymoms.net hornypages.com horoskop-auswertung.de horse-racebetting.com horse-racing--betting.net horse-sex.ws hostingplus.com hostultra.com hot-cialis.com hot-escort-services.com hot-mates.info hot-naked-guys.net hotel-bordeaux.cjb.net hotelbookingserver.com hotelsaficionado.com hotelsplustours.com hotfunsingles.com hotsexys.com hotusa.org houseofsevengables.com how-quit-smoking.com how-to-play-poker-quick.com hq-pictures.org hs168.com hswin.com htmldiff.com huazhangmba.com humangrowthhormone.org hunksandbabes.com hustler.bz hustlerbarelylegalteen.com hustlerw.com hxlll.net hyper-sex.com hypnobabies.co.uk i--cialis.net i-black-jack.com i-butalbital-fioricet.com i-buy-mortgage.com i-directv.net i-dish-network.org i-flexeril.com i-free-poker.com i-horny.com i-ink-cartridges.com i-mortgage-online.com i-online-bingo.com i-online-poker.com i-play-bingo.com i-play-blackjack.com i-play-casino.com i-play-poker-online.biz i-play-poker-online.com i-play-poker-online.us i-play-poker.com i-skelaxin.com i-soma.net i-university-guide.com i-wellbutrin.com i-will-find-the-best-mortgage-lead.com i-win-bingo.com idebtconsolidation.org idp4u.com ifreepages.com iipgoulkdfghj.com illegalhome.com illegalspace.com im-naked.com imagenes-tops.com.mx imess.net imitrex-web.com immagini-hentai.org immobilien-auswaehlen.de immobilienangebote-auswahl.de immobilienmakler-angebote.de immobilienmakler-l.de immobilienmarkt-grundstuecke.de immobilierdessavoie.com imobissimo.com impotence-rx.biz in-the-vip.org inc-magazine.com incest-movies-download.com incest-photo.com incest-photos-archive.com incest-pics--incest.com incest-pics-gallery.com incest-reality.com incest-relations.com incest-stories-library.com incest-stories.biz incest-taboo.net incest-videos-collection.com inceststories.ws incredishop.com incsx.com indian-sex-porno-movies-stories.com indiasilk.biz indiasilktradition.com industrial-testing-equipment.com industrialresource.biz inescudna.com inexpensiverx.net infocenter-crm.com inforceable.com inforceables.com ingyensms.net ingyensms.org innfg.de insatiablepussy.com inside.afraid.org instant-quick-money-cash-advance-personal-loans-until-pay-day.com instantsatellite.com insurance-quotes-fast.com insurancecompanies4you.com insurancehere.net int-fed-aromatherapy.co.uk inter-ross.ru international-candle-shop.com international-cheese-shop.com internet-meds.biz internet-merchant-account-pro.com internet-poker-online-4-u.com internette-anbieter.de interracial-sex.ws inthevip-4u.com inthevip-sex.com intimplace.com intymnie.com inviare-mms.net invio-mms.us ipaddressworld.com ipharmacy.com # Catchall for many spam sites ipmotor.com ipsnihongo.org ipupdater.com irianjaya.co.uk irs-us.net isacommie.com iservice.eu.com isparkl.com itgo.com iul-online.de iwebbroker.com jack-x.com jade.bilder-i.de japan-partner.com jenniferconnor.com jewelry4navel.com jfcadvocacy.net jinlong.co.uk jmsimonr.com job-interview-questions-tips.com jobsearchlegal.com johnhowesatty.com johnhuron.com jokeria.de jordanand.topcities.com josephlied.com judahskateboards.com juega-al-casino.com juliamiles.co.uk jungfrauen-sex.com junyuan.com.cn justasex.com jytouch.com kantorg.h10.ru kapsociety.org kardtoons.co.uk karibubaskets.com karmicdebtconsolidation.com kcufrecnac.com keikoasura.com keithandrew.co.uk kewl-links.com kewler.net kinggimp.org kinky-teen-videos.com kinkyhosting.com kiranthakrar.co.uk kleinkinder-shop.de klik-search.com klingeltoene-handylogos.de.be klingeltone-logo.com klitoris.ca kmsenergy.com kohost.us koihoo.com kontaktanzeigen-bild.de.ms kontaktlinsen-partner.de kostenlose-sexkontakte.org krantas.org kraskidliavas.ru kredit-ratenkredit-sofortkredit.de kredite-online.de.ms kredite-portal.de kredite-sofortzusage.de kreditkarten-sofort.de.ms kupibuket.ru kyed.com kyfarmhouse.org lablog.biz lacetongue.com lach-ab.de lakesideartonline.com lambethcouncil.com landscape-painting.as.ro langsrestaurant.com lanreport.com laptopy.biz.pl las-vegas-real-estate-1.com lastminute-blitz.de lasvegas-real-estate.net lasvegasrealtor.com lasvegastourfinder.com latina-hot-girls.com latina-sex.ws lavalifedating.com leadbanx.com learnhowtoplay.com lebonpost.com lechery-family.com legalblonde.com lesbian-girl.us lesbian-sex-porn-pics-stories.com lesbichex.com lesbo-rama.com leseratten-wunderland.de letemgo.de leveltendesign.com lexapro-web.com lexfinance.com lgt-clan.ru life-insurance-advisor.com lifeinsurancefinders.com likesmature.com lingerie-land.com link-dir.com linkliste-geschenke.de linseysworld.com linuxwaves.net lipitordiscount.biz lipitordiscount.com lir.dk lisaber.com list1st.com listbanx.com live-casino.com livetexasholdem.com livetexasholdem.com livetexasholdem.com livetexasholdem.com livetreff.tv livevents.de lizardofoz.com lizzie.dyndsl.com lizziemills.com loan-king.com loan-superstore.com loaninfotoday.com loans-4all.com loans-no-fax.com loans.de.vu locationcorse.free.fr logo-beltonen.com logo-free.com logo-klingeltone.com logo-max.com logo-melodias.com logo-mobiel.com logo-mobile-repondeur.com logo-moviles.com logo-phones.com logo-repondeur-mobile.com logo-sonneries-sonnerie.com logo-spiele.com logo-tones.com logod-helinad-mangud.com logoer-mobil.com logos-downloads.com logos-free.com logos-logos.be logos-melodijas-speles.com logos-mobile-repondeurs.com logos-phones.com logos-repondeurs-mobile.com logos-sonneries-jeux.com logos-sonneries-jeuxmobiles.com logos-sonneries-sonnerie.com logos-tone.com logosik.pl logotyper-mobil.com lolika.net longslabofjoy.com lookforukhotels.com loraxe.com low-low-rates.com lowclass.de lowcost.us.com lowest-rates-mortgages.com lowinterestratecreditcards.net luffassociates.co.uk luxus-gourmetartikel.de lvcpa.net lvcpa.org lvrealty.net lynskey-admiration.org.uk lyriclovers.com macinstruct.net mail333.com mainentrypoint.com mainjob.ru majorapplewhite.info male-enlargement.com mallorycoatings.co.uk maloylawn.com mandysdiary.biz mandysdiary.ws manga-free.net manga-free.org manga-porn.us manga-x.biz manga-xxx.org manufacturers-blog.com march--madness.biz march--madness.info march--madness.org marcomdeal.com marshallsupersoft.com marshallyachts.org marteq-on.com match-me-up.com mature-big-tits.net mature-old-mature.com mature-sex-moms-porn.com matureacts.com maturefolk.com maturetours.com maxigenweb.com mbgeezers.com mcdortaklar.com mcfimortgage.com medcenterstore.com mediaaustralia.com.au mediavisor.com medical4order.com medications-4all.com medicine-supply.com medicinecheaper.com medicinetrail.org meds-pill.com medweightloss medyep.com mega-spass.com megapornstation.com melincs.org melodias-logos-juegos.com members.fortunecity.com/kennetharmstrong men-porn.us men-sex.us menexis.com mengfuxiang.com menguma.co.uk menguma.com mens-health-pills.com menservers.com menzyme.com merditer.com merseine.nu mesothelioma-asbestos-help.com mesothelioma-health.com mesothelioma.net metroshopperguide.com mettle.com.cn michigan-attorney.lbgo.com micrasci.com microsoft-com.us middlecay.net middlecay.org midget-porn-sex.com mietangebote-domain.de migraine-relief.com mikebunton.com milesscaffolding.co.uk milf-hardcore.net milf-rider.us milfporn.org mingholee.com misterwolf.net mmorpg-headlines.com mmsanimati.com mneuron.com mobile-repondeur-logo.com mobile-repondeurs-logos.com mobilefamilydental.com mobilequicksale.com mobilesandringtones.com mode-domain.de mode-einkaufsbummel.de moltobene.ru monavaletoys.com money-cash-loans.com money-room.com moneybg.com montaguefineart.com mookyong.com mor-lite.net mor-lite.org moris-dada.com mortage-4all.com mortgage-info-center.com mortgage-rates-guide.net mortgagemarketinginc.com mortgagequestaz.com mortgagerates4all.com mortgages-links.net mortloan.com mostika.us mother-son-incest-sex.net motonet.pl movies6.com mp-forum.com mp3download.bz mp3x.biz mpeg2pci.com mrgoicoechea.com mrn.vip.sina.com mrpiercing.com multipurpose-plants.net multiservers.com music-downloads-links.com musica-da-scaricare.net musica-gratis.biz musica-gratis.org musica-karaoke.net musica-mp3.biz musicamp3.us musicbox1.com musiccheap.us musicenergy.com muxa.ru mxbearings.com my-age.net my-dating-agency.com my-discount-cigarettes.com my-sex-toys-store.com myasiahotels.com mybestcasinos.net mybestclick.com mycasinohome.com mycheapcigstore.com mycialispharmacy.com mydatingagency.com mydietdoctor.com myeuropehotels.com myfavlinks.de mygenericrx.com myrice.com myrtlejones.com myslimpatch.com mystify2001.com naar.be nabm(il|li)or.com # Home to spammed drug subdomains nabpak.org naked-gay.us naked-pussy.us naked-womens-wrestling-league-dvds.com naked-womens-wrestling-league-videos.com nakedboysfirsttime.com nancyflowerswilson.com narod.ru nasty-pages.com natel-mobiles.com natural-barleygreen.com natural-breasts-enhancement.net naturalknockers.net nehrucollege.org neiladams.org.uk net-mature.com net-von-dir.de netdims.com netizen.org netleih.de netlogo.us netsx.org neurogenics.co.uk new-cialis.com neweighweb.net neweighweb.org newfurnishing.com newgallery.co.uk newmail.ru newsnewsmedia.com newtruths.com newxwave.com nfl-football-tickets.biz nice-pussy.us nicepages.biz nicepages.net nicepages.org niceshemales.net nichehit.com nicolepeters.com nieruchomosci.biz.pl nifty-erotic-story-archive.blogspot.com niibacca.afraid.org nikkiwilliams.info njhma.com njunite.net no-cavities.com no-title.de no1pics.com nohassle-loans.com noni-jungbrunnen.com noni-top-chance.com noni-vitalgetraenk.com noniexpert.com nonstop-casino.com nonstopsex.org noslip-picks.com notsure.de novacspacetravel.com now-hiringsluts.com nr-challenges.org nude-black.us nude-celebrity-dvd.com nude-movies.us nude-teens.name nude-video.us nudevol.us nutritional-supplements.ws nutritionalsupplementstoday.com nutzu.com nwwl-dvds.com nwwl-videos.com nylonex.com nz.com.ua odrducmibedfghj.com officexl.de officezl.com officialdarajoy.com/wwwboard officialdentalplan.com officialsatellitetv.com offseasonelves.com ohamerica.org okuk.org old-sexy-sluts.com olderr.4t.com oldgrannyfucking.com oliviagadamer.com omega-fatty-acid.com on-line-casino-deutsch.com on-line-casinos-online.com on-line-casinos-online.net on-line-degree.org on-line-kasino-de.com on-pok.com one-blackjack.com one-cialis.com one-debt-consolidation.com one-poker-online.com one-propecia.com one-soma.com onepiecex.net oneseo.com onexone.org online-----poker online--blackjack.info online--pharmacy.us online--sports-betting.com online-auction-tricks.com online-background-check.biz online-black-jack-download.com online-blackjack-online.com online-buy-plavix.com online-credit-report-online.com online-dating-com.com online-dating-singles-service.com online-deals99.com online-dot.com online-escort-service.com online-flexeril.com online-gambling-123.biz online-gambling-123.us online-gambling-online.org online-games-links.net online-games24x7.com online-games24x7.net online-generics-store online-job-source.com online-medications24x7.com online-pharmacy-24x7.net online-pharmacy-online-pharmacies.com online-pharmacy-order.com online-photo-print.com online-poker--tips.com online-poker-200 online-poker-333.com online-poker-555.com online-poker-888 online-poker-a.com online-poker-big.com online-poker-bonus.us online-poker-free.com online-poker-guide.info online-poker-kick-butt.com online-poker-net.com online-poker-online-poker online-poker-special.com online-poker-top-rated.com online-prescription-pharmacy.com online-prescription.st online-prescriptions-internet-pharmacy.com online-propecia-buyer.com online-sports--betting online-sports-betting-source onlinedegreehq.com onlinegamingassociation.com onlinegamingassociation.com onlinehgh.com onlinepharmacy2004.net onlinepoker-dot.com onlinepoker-i.com onlineshop.us.com onlineslotsarcade.com onlinesmoker.com opensorcerer.org operazione-trionfo.net optimumpenis.com oral-sex-cum.com order-claritin.net order-effexor.net ordernaturals.com orlandodominguez.com orospu.us otito.com ottawavalleyag.org our-planet.org ourhealthylife.net ourtownhelps.org outoff.de overseaspharmacy.com ovulation-kit.com owns1.com ownsthis.com p-reise.de p5.org.uk p6.org.uk p7.org.uk p8.org.uk p9.org.uk pacific-poker-top-place.com pages4people.com pagetwo.org pai-gow-keno.com painkillersonline.biz paisleydevelopmentassociation.org pamperedchef-online.com paololinks.porkyhost.com paperscn.com paramountseedfarms.net paramountseedfarms.org paris-and-nicky-hilton-pictures.blogspot.com paris-hilton-video-blog.com paris-hilton-videos.biz paris-movie-hilton.blogspot.com paris-naked-hilton.blogspot.com paris-nicky-hilton.blogspot.com paris-nikki-hilton.blogspot.com parkviewsoccer.net parkviewsoccer.org partnersmanager.com partnersuche-partnervermittlung.com party-poker-e.com party-poker-leading-site.com party-poker-ltd.com party-poker-player.com party-poker-x partybingo.com partypoker-i partypoker-i.us partypoker.com partypokeronline.org passende-klamotten.de passwordspussynudity.com pastramisandwich.us pasuquinio.com payday-cash-loans payday-loan payday-loan-payday.com paydayl0an.com paylesspaydayloans.com payment-processing.com paysites.info pc-choices.com pcdweb.com pedronetwork.com pedronetwork.com peepissing.com penelopeschenk.com penilestretch.com penis-enlargment.net penisimprovement.com penisresearch.com perfect-dedicated-server.com perfect-mortgage-lead-4-u.com perkyoneplace.com personal-finance-tips.com personal-injuries-law.com personal-injury-lawyer.us.com personalads.us.com personales.com personals-online-personals.com personalserotic.com petlesbians.com petroglyphx.com phantadu.de pharmaceicall.com pharmacy-links.net pharmacy2003.com pharmacyprices.net philippestarckwatches.co.uk phone-cards-globe.pushline.com phono.co.il photobloggy.buzznet.com php5.sk phrensy.org picnic-basket.more.at pics--movies.com pics-db.com pics-porn.org pics-stories.com pics-videos.net picsfreesex.com picsteens.com pictures-and-videos.com pictures-archive.com pictures-movies.net pictures-movies.org pictures6.com piercing-auswaehlen.de piercing-magic.com piercingx.com piggi.descom.es pill-buy.com pillblue.com pillchart.com pillexchange.net pillfever.com pillgrowth.com pillhub.com pillhunt.com pillinc.com pillmarket.net pills-for-penis.com pillsbestbuy.com pillsdomain.com pillsking.com pillslim.com pillsupplier.com pilltip.com pimpcasino.com pimphos.com pimpspace.com pinkzoo.com piranho.com pisangrebus.com pj-city.com planetluck.com plasticmachinery.net.cn play-7-card-stud-poker.com play-7-card-stud-poker.us play-cash-bingo-online.com play-online-poker-z.com play-partypoker.us play-poker-i.com play-poker-onlie-kick-ass.com play-poker-online-z.com play.eu.com playandwin777.com playandwinit777.net player-tech.com playgay.biz playmydvd.com playnowpoker.com playweb.blogspot.com plygms.de pocketsound.org pok7.com pokemon-hentai.com pokemon-hentai.org pokemonhentai.net pokemonx.biz poker-8.com poker-888-e.com poker-e-win.com poker-e-wins.com poker-games-bonus.com poker-games-top-ranked.com poker-games.cjb.net poker-hands-secrets.com poker-homepage.com poker-magic.org poker-me-up.com poker-on-web.com poker-online-anytime.com poker-rooms-777 poker-rooms-777.com poker-rules-easy-4u.com poker-tables-best-deals.com poker-w.com poker-wsop-2005.com poker777game poker79.com pokerorg.net pokerpage.biz pokerpartnership.com pokerqu.com pokerweb.be polifoniczne.org polyphone.us pompini.nu popwow.com porevo.lookin.at porn-4u.net porn-dvds-dot.com porn-house.us porn-sites-list.com porn-stars.org porn-stud-search.org pornevalution.com porngrub.com pornlane.com porno-v.com pornogratis.bz pornosexbest.com pornostars.cc pornovideos-versand.com pornstar4all.com pornwww.com poster-shop.us postersshop.us power-rico.de pregnant-sex-free.us prepaylegalinsurance.com prescription-drugs.st prescriptions.md preteen-models.biz preteen-sex.info preteen-young.net prettypiste.com princeofprussia.org printerinkseller.com prism-lupus.org privacy-online.biz private-krankenversicherung-uebersicht.com private-network.net privatediet.com pro-collegefootballbetting.com pro-rolex-replica-watches pro-rolex-replica-watches.com product-paradise.com projector-me.com prom-prepared.com promindandbody.com propecia-depot.com propecia-for-hair-loss.com propecia-for-hair-loss.net propecia-info.net propecia-store.com propecia.bravehost.com propeciaonline.biz propeciapower.com prosearchs.com pryporn.com pseudobreccia60.tripod.com.ve psites.biz psites.net psites.org psites.us psxtreme.com psychexams.net psychexams.org punksongslyrics.com puppyduk.com pureteenz.com pushline.com pussy-cum.us pussy-d.com pussy-movies.us qinsi.com qqba.com quangoweb.com quick-drugs.biz quick-drugs.com quickdomainnameregistration.com quickie-quotes.com r-300.com r-3100.com r-400.com r-4100.com r00m.com racconti-gay.org radsport-artikel.de raf-ranking.com ragazze.bz rampantrabbitvibrator.co.uk randyblue.info randysrealtyreview.com rape--stories rape-fantasy-pics.com rape-stories.biz rapestoriespics rapid-merchant-account.com rapid.myserver.org ratenkredit-center.de ratenkredit-shop.de raw-pussy.us rbfanz.com real-online-poker real-sex.us realestateslaws.com realisticforeignpolicy.org reality-xxx.biz reallyhot.org realmilfgangbang.biz realtickling.com rebjorn.co.uk redcentre.org redi.tk refinance-mortgage-home-equity-loan.com reggaeboyzfanz.com registerxonline.com registrarprice.com reglament-np.ru reisen-domain.de relievepain.org rent-games-movies.com rental-2004.com rentalcarsplus.com repair-restore-bad-credit-report-identity-theft.com repaircreditonline.net repondeurs-logos-mobile.com republika.pl reservedining.net reservedining.org restaurant-l.de rethyassociates.net rethyassociates.org reviewonlinedating.com rhinoslinks.com rhinosthumbs.com ricettegolose.com richshemales.com rifp.org rightdebt.com ringsignaler-ikon-spel.com ringtone-logo-game.com ringtoner-logoer-spill.com ringtonespy.com rittenhouse.ca rmg.com.cn robinson-entertainment.com robosapiensource robosapiensource.com roboticmilking.com romane-buecher.de romeo-ent.com ronnieazza.com rossmann.de roulette---online.com roulette-w.com royaladult.com royalfreehost.com/teen/amymiller royalmailhotel.com ru21.to ruitai88.com rulo.biz rx-central.net rx-lexapro.biz rx-pills-r.us rx-store.com # Catchall for many spam sites rxpainrelief.net rxpills.biz rxweightloss.org rydoncycles.co.uk s-fuck.com s-sites.net safecreditonline.com sailor-moon-hentai.org sailor-moon-hentai.us salcia.co.uk salute-bellezza.net salute-bellezza.org salute-benessere.org salute-e-benessere.net salute-igiene.com salute-malattie.com salute-malattie.net samiuls.com sandhillaudio.com sandrabre.de sapphicerotica.biz sarennasworld.com sat-direct.net satellite-direct-for-you.com satellite-network-tv.com satellite-tv.cjb.net satellite.bravehost.com satellitetv-reviewed.tripod.com satellitetvboutique.com saveondentalplans.com saveonpills.net sbdforum.com sbt-scooter.com sc10.net scarica-mp3.biz scarica-mp3.com scarica-musica-mp3.org scarica-musica.com scarica-musica.org scaricamp3.us scaricare-canzoni.com scaricare-canzoni.net scaricare-canzoni.org scaricare-mp3.org scatporn.info scent-shopper.com schanee.de schmuck-domain.de scottneiss.net se-traf.com se24h.com search-1.info search-engine-optimization-4-us.com search-milf.com search722.com searchinsurance.net searchtypo.com secureroot.org security-result.com sedonaretreat.org seekartist.com seeker-milf.com seitensprung-gratis.com selectedsex.com selena-u.ru selten-angeklickt.de semax14.info semax15.info semax16.info sempo-tahoe.com senior.mine.nu seoy.com servepics.com servicesdating.net sesso-gratis.cc sesso-online.net sessoanalex.com sessox.biz seven-card-stud.biz seven-card-stud.us sewilla.de sex-4you.org sex-bondagenet.org sex-friend.info sex-livecam-erotik.net sex-lover.org sex-manga.us sex-mates.info sex-photos.org sex-pic-sex.com sex-pussy.us sex-toys-next-day.com sex4dollar.com sexadultdating.com sexbrides.com sexchat.ccx sexcia.com sexe.vc sexglory.com sexiestserver.com sexingitup.com sexmuch.com sexo9.com sexplanets.com sexschlucht.de sexshop-sexeshop.com sexshop.tk sextoysportal.com sextoyssexvideos.com sexual-shemales.com sexual-story.blogspot.com sexushost.com sexvoyager.com sexwebclub.com sexwebsites.com sexy-ass.us sexy-babes.us sexy-celebrity-photos.com sexy-girls.org sexy-lesbian.us sexy-pussy.us sexynudea.com sfondi--gratis.com sfondi-desktop-gratis.com shadowbaneguides.net shannon-e.co.uk shareint-store.com shemale-cum-tgp.com shemale-girls.com shemalesex.biz shemalesland.com shemalezhost.com shemalki.com shfx-bj.com shhilight.com shirts-t-shirts.com shop-opyt.com shop.tc shop24x7.net shopping-liste.de shoppingideen-xxl.de shoppyix.com showsontv.com sicarrow.co.uk silky-smooth-pussy.com simon-scans.com simple-pharmacy.com simplemeds.com simpsonowen.co.uk sindyhalliday.com sinfree.net site-mortgage.com sitesarchive.com siti-porno.us ski-resorts-guide.com skidman.com slatersdvds.co.uk slng.de slot-machines-slots.com slotmachinesguide.net slots-8.com slots-w.com slotsjockey.com slowdownrelax.com slut-wife-story.blogspot.com slutcities.com small-business-grants.biz smallbusinessgrants.biz smart-debt-consolidation-and-credit-services.com smartdot.com smartonlineshop.com smerfy.pl sms-sms-sms.org sms-sprueche-4fun.de sms-sprueche.com sms.pl smutwebsites.com sneakysleuth.com socoplan.org sofort-mitgewinnen.de sofortkredit-tipps.de soft-industry.com soft.center.prv.pl software-einkaufsmarkt.de software-linkliste.de software-review-center.org software.thedir.net softwaredevelopmentindia.com soittoaanet-logot-peli.com sol-web.de soma-cheap-soma.com soma-solution.com soma-web.com soma.st somacheap somaspot.com sommerreisen-2004.de sonderpreis.de.com sonnerie-compositeur.com sonnerie-hifi-sms.com sonnerie-logo-jeu.com sonnerie-logo-sonneries.com sonnerie-logos-sonneries.com sonnerie-logos.be sonnerie-max.com sonnerie-portable-composer.com sonnerie-portable.be sonnerie-sonneries-logo.com sonnerie-sonneries-logos.com sonnerie-sonneries.net sonnerie.net sonneries-gsm-sms.com sonneries-sonnerie-logo.com sonneries-sonnerie-logos.com sonneries.fr sorglos-kredit.de soulfulstencils.com southbeachdiet.us.com southbeachdietrecipe.biz spacige-domains.de spannende-spiele.de spassmaker.de speedsurf.to speedy-insurance-quotes.com spermincreasingpills.com spiele-kostenlose.com spiele-planet.com spoodles.com sportartikel-auswahl.de sportecdigital.com sportingcolors.org sportlich-chic.de sports---betting.com sports-betting- sports-betting-a.com sports-inter-action.com sportsbettingexpert.com sportsorg.biz sportsparent.com spp-net.de spy-patrol.com spyshots.bpa.nu spyware-links.com staffordshires.net staplethis.de starpills.com statusforsale.de steelstockholder.co.uk stellenangebote-checken.de stellenangebote-l.de stevespoliceequipment.com stfc-isc.org sting.cc stmaryonline.org stock-power.com stolb.net stop-depression.com stop-snoring.crpublish.com stopp-hier.de stopthatfilthyhabit.com stories--archive.com stories-adult.net stories-inc.com stories-on-cd.net stories-on-cd.org storiespics storiespics.game-host.org storiespics.game-server.cc storiespics.gotdns.com storiespics.gotdns.org storiespics.ham-radio-op.net storiespics.homedns.org storiespics.homeftp.net storiespics.homeftp.org storiespics.homeip.net storiespics.homelinux.com storiespics.homelinux.net storiespics.homelinux.org storiespics.homeunix.com storiespics.homeunix.net storiespics.homeunix.org striemline.de stripclubexposed.info strivectinsd.com stunningsextoys.com styrax-benzoin.com success-biz-replica.com suma-eintragen.de sumaeintrag-xxl.de sunbandits.com sunnyby.com suonerie-center.com suonerie-download.com suonerie-loghi-gratis.com suonerieloghix.com suoneriex.net suoyan.com super-bowl-bet.biz super-celebs.com super-cialis.com superbowl--betting.com superdolphins.org superpornlist.com surfe-und-staune.de susiewildin.com sutra-sex.com suttonjames.net suttonjames.org svitonline.com swedenet.com swedenetwork.com sweet-horny.com sweetbuyz.com sweethotgirls.com sweetteenbodies.com swinger-story.blogspot.com swingersadult.net swingersunidos.com sydney-harbour.info sylphiel.org sylviapanda.com sysaud.com t35.com t3n.org tabsinc.com take-credit-cards.com taliesinfellows.org talktobabes.com tanganyikan-cichlids.co.uk tapbuster.co.uk taremociecall.com targetindustries.net targetingpain.net tattoo-entwuerfe.de tatuaggi-gratis.com tatuaggi-piercing.org tatuaggi-tribali.com tatuaggi.cc tatuaggi.us tatuaggitribali.com tclighting.net tclighting.org tdk-n.com teambeck.org teamregules.com tecrep-inc.net tecrep-inc.org teddbot.com teddnetwork.com teen-babes.us teen-boys-fuck-paysite.com teen-d.com teen-hentai.us teen-movie.us teen-porn-movie.net teen-sex-porn-models.com teen-video.us teen-xxx.us teenagerzone.com teenbrazil.info teenbrazil.ws teens.wox.org teensluts.org teentopanga.name teenxxxpix.net telechargement-logiciel.com terminator-sales.com terra.es/personal2/dee7boquo terra.es/personal2/markus69 testi-canzoni.com testi-canzoni.net testi-musicali.com testi-musicali.net testi.cc tests-shop.com tette.bz tettone.cc texas--hold--em texas--hold-em texas--holdem texas-hold-em texas-holdem texas-poker texasproptax.com tgplist.us thatwhichis.com the-boys-first-time.net the-boysfirsttime.com the-date.com the-first-time-auditions the-hun-site.com the-hun-yellow-page-tgp.com the-pill-bottle.com the-proxy.com the1930shome.co.uk thebans.com theblackfoxes.com theceleb.com thecraftersgallery.com thefreecellphone.com thehadhams.net themadpiper.net thepornhost.com thepurplepitch.com therosygarden.com thesoftwaregarage.co.uk thespecialweb.com thewebbrains.com thorcarlson.com thumbscape.com ticket-marktplatz.de tickets4events.de tiere-futter.de tiffany-towers.com tigerspice.com tikattack.com timescooter.com tina4re.com tips-1a.de tits-center.com tits-cumshots.net tm258.com tmsathai.org tofik.pl tokyojoes.info tonos-celulares.com.mx tonos-nokia.com.mx top-blackjack-game top-blackjack.net top-casinos-net.com top-cialis.com top-deals-online-pharmacy top-deals-pills top-deals-pills.info top-deals-viagra top-dedicated-servers.com top-des-rencontres.com top-fioricet.com top-internet-blackjack.com top-milf.com top-of-best.de top-online-poker-bonuses top-online-slots.com top-pharmacy.net top-poker-21.com top-sex-base.com top-skelaxin.com top-soma.com top-the-best.de top-video-poker.info top-wins-2005.com topaktuelle-tattos.de topcialis.com topmeds.net toques-logos-jogos.com toshain.com total-verspielt.de totallyfreecreditreport.org touchwoodmagazine.org.uk tournamentpoker.biz training-one.co.uk trannies.angelcities.com tranny-pic-free.com tranny-sex-clips.com tranny.150m.com trannys.blowsearch.ws trannysexmovie.com transbestporn.com transestore.com transpire.de traum-pcs.de treocat.com triadindustries.co.uk trixieteen.org troggen.de troie.bz trolliges.de trucchi-giochi.us trueuninstall.com trumpetmission.org tt33tt.com tt7.org tubegator.com tuff-enuff.fnpsites.com turist.com.pl tvforum.org twinky.org tygef.org u-w-m.ru uaeecommerce.com ufosearch.net uk-virtual-office-solutions.com uk.net ukrainewife.net ultra-shop.info ultracet-web.com ultrampharmacy.com unbeatablecellphones.com unbeatablemobiles.co.uk unbeatablerx.com unccd.ch underage-pussy.net undonet.com uni-card.ru united-cash.com unitedarchive.com unrisd.com unscramble.de unterm-rock.us upsms.de urlaubssonne-tanken.de us-cash.com us-meds.com usa-birthday-flowers.com usa-car-insurance.com usa-car-loans.com usa-cash-advance.com usa-escorts-123.com usbitches.com uscashloan.com usedcarsforsale v27.net v29.net v3.be vacation-rentals-guide.com valeofglamorganconservatives.org vcialis.com venera-agency.com veranstaltungs-tickets.de vergleich-versicherungsangebote.de versicherungsangebote-vergleichen.de versicherungsvergleiche-xxl.de versteigerungs-festival.de verybrowse.com verycd.com verycheapdentalinsurance.com viaggix.com viapaxton.com video-n.com video-poker video-poker-dot.com video-poker-world.net video-porno.nu videohentai.org videoportfolios.com vilentium.de villagesx.com vimax.lx.ro vimax.topcities.com vip-condom.com vip-online-pharmacy.com vitamins-for-each.com vivalatinmag.com vivlart.com vixensisland.com vladgorlum.gotdns.com vladstepanov.brunst.dk vod-solutions.com voiphone.cn vonormytexas.us vpmt.com vpshs.com vrajitor.com vtsae.org w-ebony.com w5.pl wake.rlights.com waldner-msa.co.uk wancheng.cn warblog.net washere.de watches-sales.com waterbeds-dot.com wayshell.co.uk wblogs.com wcgaaa.org we-live-together-4u.com weareconfused.org.uk wearethechampions.com web-aks.com web-cam-101.com web-cam-porn.net web-cialis.com web-revenue.com webanfragen.de webblogs.biz webcam-erotiche.com webcenter.pl webcindario.com webcopywizard.net webhgh.com webpark.pl webrank.cn websitedesigningpromotion.com weddings-info.com weddings-links.com weekend-cialis weighlessrx.com weight-loss-central.org weight-loss-links.net weightlossplace.net weitere-stellenangebote.de wellness-getraenk.de wet-4all.com wet-pantie.net wet-pussy.us wethorny.com whackingpud.com white-shadow-nasty-story.blogspot.com whitehouse.com whizzkidsuk.co.uk wholesalepocketbike.com wild-porno-girls.com willcommen.de win-in-poker.com wincmd.ru wincrestal.com windcomesdown.com wirenorth.com wiset-online.com wisskie.cx witch-watch.com witz-net.de wizardsoul.com woodyracing.co.uk workfromhome-homebasedbusiness.com world-candle.com world-cheese.com world-series-of-poker-1996.com worldmusic.com worldsexi.com worldwide-deals.net worldwide-games.net worldwide-holdem.com worldwide-online-pharmacy.net worldwide-sources.com worldwidecasinosearch.com wotcher.de www-sesso # Catchall for many spam sites www-webspace.de x-baccarat.com x-baccarat.us x-beat.com x-bingo.com x-craps.com x-craps.us x-fioricet.com x-free-casino-games.com x-internet-casino.com x-jack.us x-pictures.net x-pictures.org x-ring-tones.com x-ringtones.com x-roulette.com x-roulette.us x-roullete.com x-slots.com x-slots.us x-stories.org x-video-poker.com x-video-poker.us xadulthosting.com xadultpersonals.com xaper.com xdolar.com xfreehosting.com xgsm.org xgsmhlhc.com xin-web.de xingzhiye.com xlboobs.net xmilf.us xmix.net xnxxx.com xpictx.com xprescription.com xprv.com xrated-midgets.com xratedcities.com xsesso.biz xxshopadult.com xxuz.com xxx-alt-sex-story.blogspot.com xxx-database.com xxx-dvd.biz xxx-erotic-sex-story.blogspot.com xxx-first-time-sex-story.blogspot.com xxx-free-erotic-sex-story.blogspot.com xxx-gay-sex-story.blogspot.com xxx-girls-sex.com xxx-password-web.com xxx-pussy.us xxx-sex-movies.org xxx-sex-story-post.blogspot.com xxx-spanking-story.blogspot.com xxx-stories.net xxx-story.blogspot.com xxxchan.com xxxseeker.com xxxwashington.com xz9.com yaboo.dk yaninediaz.com ybuano.org yellowmonkey.com yellowmonkey2.com yellowmonkey55.com yelucie.com yisosky.vip.sina.com ymf.name yoga-mats.freeservers.com yoll.net you-date.com young-ass.us your-tattoo.de yourcialis.info yourdentalinsuranceonline.com yourowncolours.co.uk yourserver.com ypoker.net yubatech.com yukka.inc.ru zalaszentgrot.com zaotao.com zazlibrary.com zenno.info zfgfz.net zipcodedownload.com zipcodesmap.com zithromax-online.net zj.com zone-b51.com zoo-sex-pics.com zoo-sex.biz zoo-sex.info zoo-zone.com zooeurope.com zoofil.com zoofilia-fotos.com zoomaniz.flnet.org zoosex-motion-videos.com zoosex-pictures.com zoosx.net zpics.net zt148.com zum-bestpreis.de zweree.com zxyzxy.comlib/search_engines.pm000064400000147356152532065620010653 0ustar00# AWSTATS SEARCH ENGINES DATABASE #------------------------------------------------------------------------------ # If you want to add a Search Engine to extend AWStats database detection capabilities, # you must add an entry in SearchEnginesSearchIDOrder, SearchEnginesHashID and in # SearchEnginesHashLib. # An entry if known in SearchEnginesKnownUrl is also welcome. #------------------------------------------------------------------------------ # $Revision: 1.45 $ - $Author: eldy $ - $Date: 2007/09/11 18:51:20 $ # 2005-08-19 Sean Carlos http://www.antezeta.com/awstats.html # added minor italian search engines # arianna http://arianna.libero.it/ # supereva http://search.supereva.com/ # kataweb http://kataweb.it/ # corrected uk looksmart # 'askuk','ask=', 'bbc','q=', 'freeserve','q=', 'looksmart','key=', # to # 'askuk','ask=', 'bbc','q=', 'freeserve','q=', 'looksmartuk','key=', # corrected spelling # internationnal -> international # added 'google\.'=>'mail\.google\.', to NotSearchEnginesKeys in order to # avoid counting gmail referrals as search engine traffic # 2005-08-21 Sean Carlos http://www.antezeta.com/awstats.html # avoid counting babelfish.altavista referrals as search engine traffic # avoid counting translate.google referrals as search engine traffic # 2005-11-20 Sean Carlos # added missing 'tiscali','key=', entry. Check order # 2005-11-22 Sean Carlos # added Google Base & Froogle. Froogle not tested. # 2006-04-18 Sean Carlos http://www.antezeta.com/awstats.html # added biglotron.com (France) # added blingo http://www.blingo.com/ # added Clusty & Vivisimo # added eniro.no (Norway) [https://sourceforge.net/forum/message.php?msg_id=3134783] # added GPU p2p search http://search.centraldatabase.org/ # added mail.tiscali to "not search engines list" [https://sourceforge.net/forum/message.php?msg_id=3166688] # added Ask group's "mysearch" # added sify.com (India) # added sogou.com (Cina) [https://sourceforge.net/forum/message.php?msg_id=3501603] # Ask changes: # - added Ask Japan (ask.jp) # - break out Ask new country level variants (DE, ES, FR, IT, NL) # - updated Ask name from Ask Jevees # - added Ask q= parameter - many recent searches probably not recognized; [https://sourceforge.net/forum/message.php?msg_id=3465444] # - updated Ask uk (new uk.ask.com added to older ask.co.uk) # updated voila kw|rdata parameter [https://sourceforge.net/forum/message.php?msg_id=3373912] # for each new engine, added link to Search Engine. This serves to document engine. Done for major & Italian engines as well. Requires patch # to AWStats to allow untranslated html. Otherwise html will appear instead of link. # reviewed mnoGoSearch (http://www.mnogosearch.org/); the search engined mentioned no longer # exists https://sourceforge.net/forum/message.php?msg_id=3025426 # 2006-05-13 Sean Carlos http://www.antezeta.com/awstats.html # added 10 Chello European broadband portals (Austria, Belgium, Czech Republic, France, Hungary, The Netherlands, Norway, Poland, Slovakia, Sweden) # added Alice Internal Search (blends data with Google?) search.alice.it.master:10005 # added detection of google cache views from IPs 66.249.93.104 72.14.203.104 72.14.207.104 # To do: add more extensive IP list; keywords not yet detected. # added icerocket.com blog search http://www.icerocket.com/ # added live.com (msn) http://www.live.com/ # added Meta motor kartoo. Note: Kartoo does not provide search words in referrers, thus the engine will appear in the # search engine list but the actual search words are not available. # added netluchs.de http://www.netluchs.de/ # added sphere.com blog search http://www.sphere.com/ # added wwweasel.de http://wwweasel.de # added Yahoo Mindset! http://mindset.research.yahoo.com/ # updated Mirago query parameter recognition (qry=); added breakout for each country (France, Germany, Spain, Italy, Norway, Sweden, Denmark, Netherlands, Belgium, Switzerland) # 2006-05-13 Sean Carlos http://www.antezeta.com/awstats.html # added Google cache IPs 64.233.183.104 & 66.102.7.104 # 2006-05-20 Sean Carlos http://www.antezeta.com/awstats.html # anzwers.com.au # schoenerbrausen.de http://www.schoenerbrausen.de/ # added Google cache IP 216.239.59.104 # answerbus http://www.answerbus.com/ (does not provide keywords) # 2006-05-23 Sean Carlos http://www.antezeta.com/awstats.html # added Google cache IP 66.102.9.104, 64.233.161.104 # 2006-06-23 Sean Carlos http://www.antezeta.com/awstats.html # added Alice Search search.alice.it # added GoodSearch http://www.goodsearch.com/ (does not provide keywords) "a Yahoo-powered search engine that donates money to your favorite charity or school each time you search the web" # added googlee.com, variant of Google # added gotuneed http://www.gotuneed.com/ Italian search engine, in beta # added icq.com # added logic to parse Google Cache search keywords. Seems to work for alpha but not numeric cache IDs, i.e. search?q=cache:lWVLmnuGJswJ: is recognized but q=cache:Yv5qxeJNuhgJ: is not recognized. The URL triggering the keywords will also appear. The URLs are probably too varied to parse out? # added Nusearch http://www.nusearch.com/ # added Polymeta www.polymeta.hu (does not provide keywords) # added scroogle http://www.scroogle.org/ (does not always provide keywords) # added Tango http://tango.hu/search.php?st=0&q=jeles+napok # Changed Google Cache notation 64\.233\.(161|167|179|183|187)\.104 to 64\.233\.1[0-9]{2}\.104 # 72\.14\.(203|205|207|209|221)\.104 to 72\.14\.2[0-9]{2}\.104 # 216\.239\.(51|59)\.104 to 216\.239\.5[0-9]\.104 # 66\.102\.(7|9)\.104 to 66\.102\.[1-9]\.104 # 2006-06-27 Sean Carlos http://www.antezeta.com/awstats.html # added Onet.pl http://szukaj.onet.pl/ # corrected name "Wirtualna Polska" from "Szukaj" (search); added link http://szukaj.wp.pl/ # 2006-06-30 Sean Carlos http://www.antezeta.com/awstats.html # Additional Polish Search Engines: # added Dodaj.pl http://www.dodaj.pl/ # added Gazeta.pl http://szukaj.gazeta.pl/ # added Gery.pl http://szukaj.gery.pl/ # added Hoga.pl http://www.hoga.pl/ # added Interia.pl http://www.google.interia.pl/ # added Katalog.Onet.pl http://katalog.onet.pl/ # added NetSprint.pl http://www.netsprint.pl/ # added o2.pl http://szukaj2.o2.pl/ # added Polska http://szukaj.polska.pl/ # added Szukacz http://www.szukacz.pl/ # added Wow.pl http://szukaj.wow.pl/ # added Sagool http://sagool.jp/ # 2006-08-25 Social Bookmarks # International # added del.icio.us/search - for now, just search referrer. To do: consider /tag/(tagname) referrer? # added stumbleupon.com - No keywords supplied. # added swik.net # added digg. Keywords sometimes supplied. # Italy # added segnalo.alice.it - No keywords supplied. # added ineffabile.it - No keywords supplied. # added filter for google groups. Attempt to parse group name as keyword. # 2006-09-14 # added Eniro Sverige http://www.eniro.se/ # added MyWebSearch http://search.mywebsearch.com/ # added Teecno http://www.teecno.it/ Italian Open Source Search Engine #package AWSSE; # 2006-09-25 (Gabor Moizes) # added 4-counter (Google alternative) http://4-counter.com/ # added Googlecom (Google alternative) http://googlecom.com/ # added Goggle (Google alternative) http://goggle.co.hu/ # added Comet toolbar http://as.starware.com # added new IP for Yahoo: 216.109.125.130 # added Ledix http://ledix.net/ # added AT&T search (powered by Google) http://www.att.net/ # added Keresolap (Hungarian search engine) http://www.keresolap.hu/ # added Mozbot (French search engine) http://www.mozbot.fr/ # added Zoznam (Slovak search engine) http://www.zoznam.sk/ # added sapo.pt (Portuguese search engine) http://www.sapo.pt/ # added shaw.ca (powered by Google) http://start.shaw.ca/ # added Searchalot http://www.searchalot.com/ # added Copernic http://www.copernic.com/ # added 216.109.125.130 to Yahoo # added 66.218.69.11 to Yahoo # added Avantfind http://www.avantfind.com/ # added Steadysearch http://www.steadysearch.com/ # added Steadysearch http://www.steady-search.com/ # modified 216\.239\.5[0-9]\.104/search to 216\.239\.5[0-9]\.104 # SearchEnginesSearchIDOrder # It contains all matching criteria to search for in log fields. This list is # used to know in which order to search Search Engines IDs. # Most frequent one are in list1, used when LevelForSearchEnginesDetection is 1 or more # Minor robots are in list2, used when LevelForSearchEnginesDetection is 2 or more # Note: Regex IDs are in lower case and ' ' and '+' are changed into '_' #------------------------------------------------------------------------------ @SearchEnginesSearchIDOrder_list1=( # Major international search engines 'base\.google\.', 'froogle\.google\.', 'groups\.google\.', 'images\.google\.', 'google\.', 'googlee\.', 'googlecom\.com', 'goggle\.co\.hu', '216\.239\.(35|37|39|51)\.100', '216\.239\.(35|37|39|51)\.101', '216\.239\.5[0-9]\.104', '64\.233\.1[0-9]{2}\.104', '66\.102\.[1-9]\.104', '66\.249\.93\.104', '72\.14\.2[0-9]{2}\.104', 'msn\.', 'live\.com', 'voila\.', 'mindset\.research\.yahoo', 'yahoo\.','(66\.218\.71\.225|216\.109\.117\.135|216\.109\.125\.130|66\.218\.69\.11)', 'search\.aol\.co', 'tiscali\.', 'lycos\.', 'alexa\.com', 'alltheweb\.com', 'altavista\.', 'a9\.com', 'dmoz\.org', 'netscape\.', 'search\.terra\.', 'www\.search\.com', 'search\.sli\.sympatico\.ca', 'excite\.' ); @SearchEnginesSearchIDOrder_list2=( # Minor international search engines '4\-counter\.com', 'att\.net', 'bungeebonesdotcom', 'northernlight\.', 'hotbot\.', 'kvasir\.', 'webcrawler\.', 'metacrawler\.', 'go2net\.com', '(^|\.)go\.com', 'euroseek\.', 'looksmart\.', 'spray\.', 'nbci\.com\/search', 'de\.ask.\com', # break out Ask country specific engines. (.jp is in Japan section) 'es\.ask.\com', 'fr\.ask.\com', 'it\.ask.\com', 'nl\.ask.\com', 'uk\.ask.\com', '(^|\.)ask\.com', 'atomz\.', 'overture\.com', # Replace 'goto\.com','Goto.com', 'teoma\.', 'findarticles\.com', 'infospace\.com', 'mamma\.', 'dejanews\.', 'dogpile\.com', 'wisenut\.com', 'ixquick\.com', 'search\.earthlink\.net', 'i-une\.com', 'blingo\.com', 'centraldatabase\.org', 'clusty\.com', 'mysearch\.', 'vivisimo\.com', 'kartoo\.com', 'icerocket\.com', 'sphere\.com', 'ledix\.net', 'start\.shaw\.ca', 'searchalot\.com', 'copernic\.com', 'avantfind\.com', 'steadysearch\.com', 'steady-search\.com', # Chello Portals 'chello\.at', 'chello\.be', 'chello\.cz', 'chello\.fr', 'chello\.hu', 'chello\.nl', 'chello\.no', 'chello\.pl', 'chello\.se', 'chello\.sk', 'chello', # required as catchall for new countries not yet known # Mirago 'mirago\.be', 'mirago\.ch', 'mirago\.de', 'mirago\.dk', 'es\.mirago\.com', 'mirago\.fr', 'mirago\.it', 'mirago\.nl', 'no\.mirago\.com', 'mirago\.se', 'mirago\.co\.uk', 'mirago', # required as catchall for new countries not yet known 'answerbus\.com', 'icq\.com\/search', 'nusearch\.com', 'goodsearch\.com', 'scroogle\.org', 'questionanswering\.com', 'mywebsearch\.com', 'as\.starware\.com', # Social Bookmarking Services 'del\.icio\.us', 'digg\.com', 'stumbleupon\.com', 'swik\.net', 'segnalo\.alice\.it', 'ineffabile\.it', # Minor Australian search engines 'anzwers\.com\.au', # Minor brazilian search engines 'engine\.exe', 'miner\.bol\.com\.br', # Minor chinese search engines '\.baidu\.com', # baidu search portal '\.vnet\.cn', # powered by MSN '\.soso\.com', # powered by Google '\.sogou\.com', # powered by Sohu '\.3721\.com', # powered by Yahoo! 'iask\.com', # powered by Sina '\.accoona\.com', # Accoona '\.163\.com', # powered by Google '\.zhongsou\.com', # zhongsou search portal # Minor czech search engines 'atlas\.cz','seznam\.cz','quick\.cz','centrum\.cz','jyxo\.(cz|com)','najdi\.to','redbox\.cz', # Minor danish search-engines 'opasia\.dk', 'danielsen\.com', 'sol\.dk', 'jubii\.dk', 'find\.dk', 'edderkoppen\.dk', 'netstjernen\.dk', 'orbis\.dk', 'tyfon\.dk', '1klik\.dk', 'ofir\.dk', # Minor dutch search engines 'ilse\.','vindex\.', # Minor english search engines '(^|\.)ask\.co\.uk','bbc\.co\.uk/cgi-bin/search','ifind\.freeserve','looksmart\.co\.uk','splut\.','spotjockey\.','ukdirectory\.','ukindex\.co\.uk','ukplus\.','searchy\.co\.uk', # Minor finnish search engines 'haku\.www\.fi', # Minor french search engines 'recherche\.aol\.fr','ctrouve\.','francite\.','\.lbb\.org','rechercher\.libertysurf\.fr', 'search[\w\-]+\.free\.fr', 'recherche\.club-internet\.fr', 'toile\.com', 'biglotron\.com', 'mozbot\.fr', # Minor german search engines 'sucheaol\.aol\.de', 'fireball\.de','infoseek\.de','suche\d?\.web\.de','[a-z]serv\.rrzn\.uni-hannover\.de', 'suchen\.abacho\.de','brisbane\.t-online\.de','allesklar\.de','meinestadt\.de', '212\.227\.33\.241', '(161\.58\.227\.204|161\.58\.247\.101|212\.40\.165\.90|213\.133\.108\.202|217\.160\.108\.151|217\.160\.111\.99|217\.160\.131\.108|217\.160\.142\.227|217\.160\.176\.42)', 'wwweasel\.de', 'netluchs\.de', 'schoenerbrausen\.de', # Minor Hungarian search engines 'heureka\.hu','vizsla\.origo\.hu','lapkereso\.hu','goliat\.hu','index\.hu','wahoo\.hu','webmania\.hu','search\.internetto\.hu', 'tango\.hu', 'keresolap\.hu', 'polymeta\.hu', # Minor Indian search engines 'sify\.com', # Minor Italian search engines 'virgilio\.it','arianna\.libero\.it','supereva\.com','kataweb\.it','search\.alice\.it\.master','search\.alice\.it','gotuneed\.com', 'godado','jumpy\.it','shinyseek\.it','teecno\.it', # Minor Japanese search engines 'ask\.jp','sagool\.jp', # Minor Norwegian search engines 'sok\.start\.no', 'eniro\.no', # Minor Polish search engines 'szukaj\.wp\.pl','szukaj\.onet\.pl','dodaj\.pl','gazeta\.pl','gery\.pl','hoga\.pl','netsprint\.pl','interia\.pl','katalog\.onet\.pl','o2\.pl','polska\.pl','szukacz\.pl','wow\.pl', # Minor russian search engines 'ya(ndex)?\.ru', 'aport\.ru', 'rambler\.ru', 'turtle\.ru', 'metabot\.ru', # Minor Swedish search engines 'evreka\.passagen\.se','eniro\.se', # Minor Slovak search engines 'zoznam\.sk', # Minor Portuguese search engines 'sapo\.pt', # Minor swiss search engines 'search\.ch', 'search\.bluewin\.ch' ); @SearchEnginesSearchIDOrder_listgen=( # Generic search engines 'search\..*\.\w+' ); # NotSearchEnginesKeys # If a search engine key is found, we check its exclude list to know if it's # really a search engine #------------------------------------------------------------------------------ %NotSearchEnginesKeys=( 'altavista\.'=>'babelfish\.altavista\.', 'google\.'=>'mail\.google\.', 'google\.'=>'translate\.google\.', 'msn\.'=>'hotmail\.msn\.', 'tiscali\.'=>'mail\.tiscali\.', 'yahoo\.'=>'mail\.yahoo\.', 'yandex\.'=>'direct\.yandex\.' ); # SearchEnginesHashID # Each Search Engine Search ID is associated to an AWStats id string #------------------------------------------------------------------------------ %SearchEnginesHashID = ( # Major international search engines 'base\.google\.','google_base', 'froogle\.google\.','google_froogle', 'groups\.google\.','google_groups', 'images\.google\.','google_image', 'google\.','google', 'googlee\.','google', 'googlecom\.com','google', 'goggle\.co\.hu','google', '216\.239\.(35|37|39|51)\.100','google_cache', '216\.239\.(35|37|39|51)\.101','google_cache', '216\.239\.5[0-9]\.104','google_cache', '64\.233\.1[0-9]{2}\.104','google_cache', '66\.102\.[1-9]\.104','google_cache', '66\.249\.93\.104','google_cache', '72\.14\.2[0-9]{2}\.104','google_cache', 'msn\.','msn', 'live\.com','live', 'voila\.','voila', 'mindset\.research\.yahoo','yahoo_mindset', 'yahoo\.','yahoo','(66\.218\.71\.225|216\.109\.117\.135|216\.109\.125\.130|66\.218\.69\.11)','yahoo', 'lycos\.','lycos', 'alexa\.com','alexa', 'alltheweb\.com','alltheweb', 'altavista\.','altavista', 'a9\.com','a9', 'dmoz\.org','dmoz', 'netscape\.','netscape', 'search\.terra\.','terra', 'www\.search\.com','search.com', 'tiscali\.','tiscali', 'search\.aol\.co','aol', 'search\.sli\.sympatico\.ca','sympatico', 'excite\.','excite', # Minor international search engines '4\-counter\.com','google4counter', 'att\.net','att', 'bungeebonesdotcom','bungeebonesdotcom', 'northernlight\.','northernlight', 'hotbot\.','hotbot', 'kvasir\.','kvasir', 'webcrawler\.','webcrawler', 'metacrawler\.','metacrawler', 'go2net\.com','go2net', '(^|\.)go\.com','go', 'euroseek\.','euroseek', 'looksmart\.','looksmart', 'spray\.','spray', 'nbci\.com\/search','nbci', 'de\.ask.\com','askde', # break out Ask country specific engines. 'es\.ask.\com','askes', 'fr\.ask.\com','askfr', 'it\.ask.\com','askit', 'nl\.ask.\com','asknl', 'uk\.ask.\com','askuk', '(^|\.)ask\.co\.uk','askuk', '(^|\.)ask\.com','ask', 'atomz\.','atomz', 'overture\.com','overture', # Replace 'goto\.com','Goto.com', 'teoma\.','teoma', 'findarticles\.com','findarticles', 'infospace\.com','infospace', 'mamma\.','mamma', 'dejanews\.','dejanews', 'dogpile\.com','dogpile', 'wisenut\.com','wisenut', 'ixquick\.com','ixquick', 'search\.earthlink\.net','earthlink', 'i-une\.com','iune', 'blingo\.com','blingo', 'centraldatabase\.org','centraldatabase', 'clusty\.com','clusty', 'mysearch\.','mysearch', 'vivisimo\.com','vivisimo', 'kartoo\.com','kartoo', 'icerocket\.com','icerocket', 'sphere\.com','sphere', 'ledix\.net','ledix', 'start\.shaw\.ca','shawca', 'searchalot\.com','searchalot', 'copernic\.com','copernic', 'avantfind\.com','avantfind', 'steadysearch\.com','steadysearch', 'steady-search\.com','steadysearch', # Chello Portals 'chello\.at','chelloat', 'chello\.be','chellobe', 'chello\.cz','chellocz', 'chello\.fr','chellofr', 'chello\.hu','chellohu', 'chello\.nl','chellonl', 'chello\.no','chellono', 'chello\.pl','chellopl', 'chello\.se','chellose', 'chello\.sk','chellosk', 'chello','chellocom', # Mirago 'mirago\.be','miragobe', 'mirago\.ch','miragoch', 'mirago\.de','miragode', 'mirago\.dk','miragodk', 'es\.mirago\.com','miragoes', 'mirago\.fr','miragofr', 'mirago\.it','miragoit', 'mirago\.nl','miragonl', 'no\.mirago\.com','miragono', 'mirago\.se','miragose', 'mirago\.co\.uk','miragocouk', 'mirago','mirago', # required as catchall for new countries not yet known 'answerbus\.com','answerbus', 'icq\.com\/search','icq', 'nusearch\.com','nusearch', 'goodsearch\.com','goodsearch', 'scroogle\.org','scroogle', 'questionanswering\.com','questionanswering', 'mywebsearch\.com','mywebsearch', 'as\.starware\.com','comettoolbar', # Social Bookmarking Services 'del\.icio\.us','delicious', 'digg\.com','digg', 'stumbleupon\.com','stumbleupon', 'swik\.net','swik', 'segnalo\.alice\.it','segnalo', 'ineffabile\.it','ineffabile', # Minor Australian search engines 'anzwers\.com\.au','anzwers', # Minor brazilian search engines 'engine\.exe','engine', 'miner\.bol\.com\.br','miner', # Minor chinese search engines '\.baidu\.com','baidu', 'iask\.com','iask', '\.accoona\.com','accoona', '\.3721\.com','3721', '\.163\.com','netease', '\.soso\.com','soso', '\.zhongsou\.com','zhongsou', '\.vnet\.cn','vnet', '\.sogou\.com','sogou', # Minor czech search engines 'atlas\.cz','atlas', 'seznam\.cz','seznam', 'quick\.cz','quick', 'centrum\.cz','centrum', 'jyxo\.(cz|com)','jyxo', 'najdi\.to','najdi', 'redbox\.cz','redbox', # Minor danish search-engines 'opasia\.dk','opasia', 'danielsen\.com','danielsen', 'sol\.dk','sol', 'jubii\.dk','jubii', 'find\.dk','finddk', 'edderkoppen\.dk','edderkoppen', 'netstjernen\.dk','netstjernen', 'orbis\.dk','orbis', 'tyfon\.dk','tyfon', '1klik\.dk','1klik', 'ofir\.dk','ofir', # Minor dutch search engines 'ilse\.','ilse', 'vindex\.','vindex', # Minor english search engines 'bbc\.co\.uk/cgi-bin/search','bbc', 'ifind\.freeserve','freeserve', 'looksmart\.co\.uk','looksmartuk', 'splut\.','splut', 'spotjockey\.','spotjockey', 'ukdirectory\.','ukdirectory', 'ukindex\.co\.uk','ukindex', 'ukplus\.','ukplus', 'searchy\.co\.uk','searchy', # Minor finnish search engines 'haku\.www\.fi','haku', # Minor french search engines 'recherche\.aol\.fr','aolfr', 'ctrouve\.','ctrouve', 'francite\.','francite', '\.lbb\.org','lbb', 'rechercher\.libertysurf\.fr','libertysurf', 'search[\w\-]+\.free\.fr','free', 'recherche\.club-internet\.fr','clubinternet', 'toile\.com','toile', 'biglotron\.com', 'biglotron', 'mozbot\.fr', 'mozbot', # Minor german search engines 'sucheaol\.aol\.de','aolde', 'fireball\.de','fireball', 'infoseek\.de','infoseek', 'suche\d?\.web\.de','webde', '[a-z]serv\.rrzn\.uni-hannover\.de','meta', 'suchen\.abacho\.de','abacho', 'brisbane\.t-online\.de','t-online', 'allesklar\.de','allesklar', 'meinestadt\.de','meinestadt', '212\.227\.33\.241','metaspinner', '(161\.58\.227\.204|161\.58\.247\.101|212\.40\.165\.90|213\.133\.108\.202|217\.160\.108\.151|217\.160\.111\.99|217\.160\.131\.108|217\.160\.142\.227|217\.160\.176\.42)','metacrawler_de', 'wwweasel\.de','wwweasel', 'netluchs\.de','netluchs', 'schoenerbrausen\.de','schoenerbrausen', # Minor Hungarian search engines 'heureka\.hu','heureka', 'vizsla\.origo\.hu','origo', 'lapkereso\.hu','lapkereso', 'goliat\.hu','goliat', 'index\.hu','indexhu', 'wahoo\.hu','wahoo', 'webmania\.hu','webmania', 'search\.internetto\.hu','internetto', 'tango\.hu','tango_hu', 'keresolap\.hu','keresolap_hu', 'polymeta\.hu','polymeta_hu', # Minor Indian search engines 'sify\.com','sify', # Minor Italian search engines 'virgilio\.it','virgilio', 'arianna\.libero\.it','arianna', 'supereva\.com','supereva', 'kataweb\.it','kataweb', 'search\.alice\.it\.master','aliceitmaster', 'search\.alice\.it','aliceit', 'gotuneed\.com','gotuneed', 'godado','godado', 'jumpy\.it','jumpy\.it', 'shinyseek\.it','shinyseek\.it', 'teecno\.it','teecnoit', # Minor Japanese search engines 'ask\.jp','askjp', 'sagool\.jp','sagool', # Minor Norwegian search engines 'sok\.start\.no','start', 'eniro\.no','eniro', # Minor Polish search engines 'szukaj\.wp\.pl','wp', 'szukaj\.onet\.pl','onetpl', 'dodaj\.pl','dodajpl', 'gazeta\.pl','gazetapl', 'gery\.pl','gerypl', 'netsprint\.pl\/hoga\-search','hogapl', 'netsprint\.pl','netsprintpl', 'interia\.pl','interiapl', 'katalog\.onet\.pl','katalogonetpl', 'o2\.pl','o2pl', 'polska\.pl','polskapl', 'szukacz\.pl','szukaczpl', 'wow\.pl','wowpl', # Minor russian search engines 'ya(ndex)?\.ru','yandex', 'aport\.ru','aport', 'rambler\.ru','rambler', 'turtle\.ru','turtle', 'metabot\.ru','metabot', # Minor Swedish search engines 'evreka\.passagen\.se','passagen', 'eniro\.se','enirose', # Minor Slovak search engines 'zoznam\.sk','zoznam', # Minor Portuguese search engines 'sapo\.pt','sapo', # Minor swiss search engines 'search\.ch','searchch', 'search\.bluewin\.ch','bluewin', # Generic search engines 'search\..*\.\w+','search' ); # SearchEnginesWithKeysNotInQuery # List of search engines that store keyword as page instead of query parameter #------------------------------------------------------------------------------ %SearchEnginesWithKeysNotInQuery=( 'a9',1 # www.a9.com/searckey1%20searchkey2 ); # SearchEnginesKnownUrl # Known rules to extract keywords from a referrer search engine URL #------------------------------------------------------------------------------ %SearchEnginesKnownUrl=( # Most common search engines 'alexa','q=', 'alltheweb','q(|uery)=', 'altavista','q=', 'a9','a9\.com\/', 'dmoz','search=', 'google_base','(p|q|as_p|as_q)=', 'google_froogle','(p|q|as_p|as_q)=', 'google_groups','group\/', # does not work 'google_image','(p|q|as_p|as_q)=', 'google_cache','(p|q|as_p|as_q)=cache:[0-9A-Za-z]{12}:', 'google','(p|q|as_p|as_q)=', 'lycos','query=', 'msn','q=', 'live','q=', 'netscape','search=', 'tiscali','key=', 'aol','query=', 'terra','query=', 'voila','(kw|rdata)=', 'search.com','q=', 'yahoo_mindset','p=', 'yahoo','p=', 'sympatico', 'query=', 'excite','search=', # Minor international search engines 'google4counter','(p|q|as_p|as_q)=', 'att','qry=', 'bungeebonesdotcom','query=', 'go','qt=', 'askde','(ask|q)=', # break out Ask country specific engines. 'askes','(ask|q)=', 'askfr','(ask|q)=', 'askit','(ask|q)=', 'asknl','(ask|q)=', 'ask','(ask|q)=', 'atomz','sp-q=', 'euroseek','query=', 'findarticles','key=', 'go2net','general=', 'hotbot','mt=', 'infospace','qkw=', 'kvasir', 'q=', 'looksmart','key=', 'mamma','query=', 'metacrawler','general=', 'nbci','keyword=', 'northernlight','qr=', 'overture','keywords=', 'dogpile', 'q(|kw)=', 'spray','string=', 'teoma','q=', 'webcrawler','searchText=', 'wisenut','query=', 'ixquick', 'query=', 'earthlink', 'q=', 'iune','(keywords|q)=', 'blingo','q=', 'centraldatabase','query=', 'clusty','query=', 'mysearch','searchfor=', 'vivisimo','query=', # kartoo: No keywords passed in referring URL. 'kartoo','', 'icerocket','q=', 'sphere','q=', 'ledix','q=', 'shawca','q=', 'searchalot','q=', 'copernic','web\/', 'avantfind','keywords=', 'steadysearch','w=', # Chello Portals 'chelloat','q1=', 'chellobe','q1=', 'chellocz','q1=', 'chellofr','q1=', 'chellohu','q1=', 'chellonl','q1=', 'chellono','q1=', 'chellopl','q1=', 'chellose','q1=', 'chellosk','q1=', 'chellocom','q1=', # Mirago 'miragobe','(txtsearch|qry)=', 'miragoch','(txtsearch|qry)=', 'miragode','(txtsearch|qry)=', 'miragodk','(txtsearch|qry)=', 'miragoes','(txtsearch|qry)=', 'miragofr','(txtsearch|qry)=', 'miragoit','(txtsearch|qry)=', 'miragonl','(txtsearch|qry)=', 'miragono','(txtsearch|qry)=', 'miragose','(txtsearch|qry)=', 'miragocouk','(txtsearch|qry)=', 'mirago','(txtsearch|qry)=', 'answerbus','', # Does not provide query parameters 'icq','q=', 'nusearch','nusearch_terms=', 'goodsearch','Keywords=', 'scroogle','Gw=', # Does not always provide query parameters 'questionanswering','', 'mywebsearch','searchfor=', 'comettoolbar','qry=', # Social Bookmarking Services 'delicious','all=', 'digg','s=', 'stumbleupon','', 'swik','swik\.net/', # does not work. Keywords follow domain, e.g. http://swik.net/awstats+analytics 'segnalo','', 'ineffabile','', # Minor Australian search engines 'anzwers','search=', # Minor brazilian search engines 'engine','p1=', 'miner','q=', # Minor chinese search engines 'baidu','(wd|word)=', 'iask','(w|k)=', 'accoona','qt=', '3721','(p|name)=', 'netease','q=', 'soso','q=', 'zhongsou','(word|w)=', 'sogou', 'query=', 'vnet','kw=', # Minor czech search engines 'atlas','searchtext=', 'seznam','w=', 'quick','query=', 'centrum','q=', 'jyxo','s=', 'najdi','dotaz=', 'redbox','srch=', # Minor danish search engines 'opasia','q=', 'danielsen','q=', 'sol','q=', 'jubii','soegeord=', 'finddk','words=', 'edderkoppen','query=', 'orbis','search_field=', '1klik','query=', 'ofir','querytext=', # Minor dutch search engines 'ilse','search_for=', 'vindex','in=', # Minor english search engines 'askuk','(ask|q)=', 'bbc','q=', 'freeserve','q=', 'looksmartuk','key=', 'splut','pattern=', 'spotjockey','Search_Keyword=', 'ukindex', 'stext=', 'ukdirectory','k=', 'ukplus','search=', 'searchy', 'search_term=', # Minor finnish search engines 'haku','w=', # Minor french search engines 'francite','name=', 'clubinternet', 'q=', 'toile', 'q=', 'biglotron','question=', 'mozbot','q=', # Minor german search engines 'aolde','q=', 'fireball','q=', 'infoseek','qt=', 'webde','su=', 'abacho','q=', 't-online','q=', 'metaspinner','qry=', 'metacrawler_de','qry=', 'wwweasel','q=', 'netluchs','query=', 'schoenerbrausen','q=', # Minor Hungarian search engines 'heureka','heureka=', 'origo','(q|search)=', 'goliat','KERESES=', 'wahoo','q=', 'internetto','searchstr=', 'keresolap_hu','q=', 'tango_hu','q=', 'polymeta_hu','', # Minor Indian search engines 'sify','keyword=', # Minor Italian search engines 'virgilio','qs=', 'arianna','query=', 'supereva','q=', 'kataweb','q=', 'aliceitmaster','qs=', 'aliceit','qs=', 'gotuneed','', # Not yet known 'godado','Keywords=', 'jumpy\.it','searchWord=', 'shinyseek\.it','KEY=', 'teecnoit','q=', # Minor Japanese search engines 'askjp','(ask|q)=', 'sagool','q=', # Minor Norwegian search engines 'start','q=', 'eniro','q=', # Minor Polish search engines 'wp','szukaj=', 'onetpl','qt=', 'dodajpl','keyword=', 'gazetapl','slowo=', 'gerypl','q=', 'hogapl','qt=', 'netsprintpl','q=', 'interiapl','q=', 'katalogonetpl','qt=', 'o2pl','qt=', 'polskapl','qt=', 'szukaczpl','q=', 'wowpl','q=', # Minor russian search engines 'yandex', 'text=', 'rambler','words=', 'aport', 'r=', 'metabot', 'st=', # Minor swedish search engines 'passagen','q=', 'enirose','q=', # Minor swiss search engines 'searchch', 'q=', 'bluewin', 'qry=' ); # SearchEnginesKnownUrlNotFound # Known rules to extract not found keywords from a referrer search engine URL #------------------------------------------------------------------------------ %SearchEnginesKnownUrlNotFound=( # Most common search engines 'msn','origq=' ); # If no rules are known, WordsToExtractSearchUrl will be used to search keyword parameter # If no rules are known and search in WordsToExtractSearchUrl failed, this will be used to clean URL of not keyword parameters. #------------------------------------------------------------------------------ @WordsToExtractSearchUrl= ('tn=','ie=','ask=','claus=','general=','key=','kw=','keyword=','keywords=','MT=','p=','q=','qr=','qt=','query=','s=','search=','searchText=','string=','su=','txtsearch=','w='); @WordsToCleanSearchUrl= ('act=','annuaire=','btng=','cat=','categoria=','cfg=','cof=','cou=','count=','cp=','dd=','domain=','dt=','dw=','enc=','exec=','geo=','hc=','height=','hits=','hl=','hq=','hs=','id=','kl=','lang=','loc=','lr=','matchmode=','medor=','message=','meta=','mode=','order=','page=','par=','pays=','pg=','pos=','prg=','qc=','refer=','sa=','safe=','sc=','sort=','src=','start=','style=','stype=','sum=','tag=','temp=','theme=','type=','url=','user=','width=','what=','\\.x=','\\.y=','y=','look='); # SearchEnginesKnownUTFCoding # Known parameter that proves a search engine has coded its parameters in UTF-8 #------------------------------------------------------------------------------ %SearchEnginesKnownUTFCoding=( # Most common search engines 'google','ie=utf-8', 'alltheweb','cs=utf-8' ); # SearchEnginesHashLib # List of search engines names # 'search_engine_id', 'search_engine_name', #------------------------------------------------------------------------------ %SearchEnginesHashLib=( # Major international search engines 'alexa','Alexa', 'alltheweb','AllTheWeb', 'altavista','AltaVista', 'a9', 'A9', 'dmoz','DMOZ', 'google_base','Google (Base)', 'google_froogle','Froogle (Google)', 'google_groups','Google (Groups)', 'google_image','Google (Images)', 'google_cache','Google (cache)', 'google','Google', 'lycos','Lycos', 'msn','MSN Search', 'live','Windows Live', 'netscape','Netscape', 'aol','AOL', 'terra','Terra', 'tiscali','Tiscali', 'voila','Voila', 'search.com','Search.com', 'yahoo_mindset','Yahoo! Mindset', 'yahoo','Yahoo!', 'sympatico','Sympatico', 'excite','Excite', # Minor international search engines 'google4counter','4-counter (Google)', 'att','AT&T search (powered by Google)', 'bungeebonesdotcom','BungeeBones', 'go','Go.com', 'askde','Ask Deutschland', 'askes','Ask España', # break out Ask country specific engines. 'askfr','Ask France', 'askit','Ask Italia', 'asknl','Ask Nederland', 'ask','Ask', 'atomz','Atomz', 'dejanews','DejaNews', 'euroseek','Euroseek', 'findarticles','Find Articles', 'go2net','Go2Net (Metamoteur)', 'hotbot','Hotbot', 'infospace','InfoSpace', 'kvasir','Kvasir', 'looksmart','Looksmart', 'mamma','Mamma', 'metacrawler','MetaCrawler (Metamoteur)', 'nbci','NBCI', 'northernlight','NorthernLight', 'overture','Overture', # Replace 'goto\.com','Goto.com', 'dogpile','Dogpile', 'spray','Spray', 'teoma','Teoma', # Replace 'directhit\.com','DirectHit', 'webcrawler','WebCrawler', 'wisenut','WISENut', 'ixquick','ix quick', 'earthlink', 'Earth Link', 'iune','i-une', 'blingo','Blingo', 'centraldatabase','GPU p2p search', 'clusty','Clusty', 'mysearch','My Search', 'vivisimo','Vivisimo', 'kartoo','Kartoo', 'icerocket','Icerocket (Blog)', 'sphere','Sphere (Blog)', 'ledix','Ledix', 'shawca','Shaw.ca', 'searchalot','Searchalot', 'copernic','Copernic', 'avantfind','Avantfind', 'steadysearch','Avantfind', # Chello Portals 'chelloat','Chello Austria', 'chellobe','Chello Belgium', 'chellocz','Chello Czech Republic', 'chellofr','Chello France', 'chellohu','Chello Hungary', 'chellonl','Chello Netherlands', 'chellono','Chello Norway', 'chellopl','Chello Poland', 'chellose','Chello Sweden', 'chellosk','Chello Slovakia', 'chellocom','Chello (Country not recognized)', # Mirago 'miragobe','Mirago Belgium', 'miragoch','Mirago Switzerland', 'miragode','Mirago Germany', 'miragodk','Mirago Denmark', 'miragoes','Mirago Spain', 'miragofr','Mirago France', 'miragoit','Mirago Italy', 'miragonl','Mirago Netherlands', 'miragono','Mirago Norway', 'miragose','Mirago Sweden', 'miragocouk','Mirago UK', 'mirago','Mirago (country unknown)', 'answerbus','Answerbus', 'icq','icq', 'nusearch','Nusearch', 'goodsearch','GoodSearch', 'scroogle','Scroogle', 'questionanswering','Questionanswering', 'mywebsearch','MyWebSearch', 'comettoolbar','Comet toolbar search', # Social Bookmarking Services 'delicious','del.icio.us (Social Bookmark)', 'digg','Digg (Social Bookmark)', 'stumbleupon','Stumbleupon (Social Bookmark)', 'swik','Swik (Social Bookmark)', 'segnalo','Segnalo (Social Bookmark)', 'ineffabile','Ineffabile.it (Social Bookmark)', # Minor Australian search engines 'anzwers','anzwers.com.au', # Minor brazilian search engines 'engine','Cade', 'miner','Meta Miner', # Minor chinese search engines 'baidu','Baidu', 'iask','Iask', 'accoona','Accoona', '3721','3721', 'netease', 'NetEase', 'soso','SoSo', 'zhongsou','ZhongSou', 'sogou', 'SoGou', 'vnet','VNet', # Minor czech search engines 'atlas','Atlas.cz', 'seznam','Seznam', 'quick','Quick.cz', 'centrum','Centrum.cz', 'jyxo','Jyxo.cz', 'najdi','Najdi.to', 'redbox','RedBox.cz', # Minor danish search-engines 'opasia','Opasia', 'danielsen','Thor (danielsen.com)', 'sol','SOL', 'jubii','Jubii', 'finddk','Find', 'edderkoppen','Edderkoppen', 'netstjernen','Netstjernen', 'orbis','Orbis', 'tyfon','Tyfon', '1klik','1Klik', 'ofir','Ofir', # Minor dutch search engines 'ilse','Ilse','vindex','Vindex\.nl', # Minor english search engines 'askuk','Ask UK', 'bbc','BBC', 'freeserve','Freeserve', 'looksmartuk','Looksmart UK', 'splut','Splut', 'spotjockey','Spotjockey', 'ukdirectory','UK Directory', 'ukindex','UKIndex', 'ukplus','UK Plus', 'searchy','searchy.co.uk', # Minor finnish search engines 'haku','Ihmemaa', # Minor french search engines 'aolfr','AOL (fr)', 'ctrouve','C\'est trouvé', 'francite','Francité', 'lbb', 'LBB', 'libertysurf', 'Libertysurf', 'free', 'Free.fr', 'clubinternet', 'Club-internet', 'toile', 'Toile du Québec', 'biglotron','Biglotron', 'mozbot','Mozbot', # Minor German search engines 'aolde','AOL (de)', 'fireball','Fireball', 'infoseek','Infoseek', 'webde','Web.de', 'abacho','Abacho', 't-online','T-Online', 'allesklar','allesklar.de', 'meinestadt','meinestadt.de', 'metaspinner','metaspinner', 'metacrawler_de','metacrawler.de', 'wwweasel','WWWeasel', 'netluchs','Netluchs', 'schoenerbrausen','Schoenerbrausen/', # Minor hungarian search engines 'heureka','Heureka', 'origo','Origo-Vizsla', 'lapkereso','Startlapkeresõ', 'goliat','Góliát', 'indexhu','Index', 'wahoo','Wahoo', 'webmania','webmania.hu', 'internetto','Internetto Keresõ', 'tango_hu','Tango', 'keresolap_hu','Tango keresolap', 'polymeta_hu','Polymeta', # Minor Indian search engines 'sify','Sify', # Minor Italian search engines 'virgilio','Virgilio', 'arianna','Arianna', 'supereva','Supereva', 'kataweb','Kataweb', 'aliceitmaster','search.alice.it.master', 'aliceit','alice.it', 'gotuneed','got u need', 'godado','Godado.it', 'jumpy\.it','Jumpy.it', 'shinyseek\.it','Shinyseek.it', 'teecnoit','Teecno', # Minor Japanese search engines 'askjp','Ask Japan', 'sagool','Sagool', # Minor Norwegian search engines 'start','start.no', 'eniro','Eniro', # Minor polish search engines 'wp','Wirtualna Polska', 'onetpl','Onet.pl', 'dodajpl','Dodaj.pl', 'gazetapl','Gazeta.pl', 'gerypl','Gery.pl', 'hogapl','Hoga.pl', 'netsprintpl','NetSprint.pl', 'interiapl','Interia.pl', 'katalogonetpl','Katalog.Onet.pl', 'o2pl','o2.pl', 'polskapl','Polska', 'szukaczpl','Szukacz', 'wowpl','Wow.pl', # Minor russian search engines 'yandex', 'Yandex', 'aport', 'Aport', 'rambler', 'Rambler', 'turtle', 'Turtle', 'metabot', 'MetaBot', # Minor Swedish search engines 'passagen','Evreka', 'enirose','Eniro Sverige', # Minor Slovak search engines 'zoznam','Zoznam', # Minor Portuguese search engines 'sapo','Sapo', # Minor Swiss search engines 'searchch', 'search.ch', 'bluewin', 'search.bluewin.ch', # Generic search engines 'search','Unknown search engines' ); # Sanity check. # Enable this code and run perl search_engines.pm to check file entries are ok #----------------------------------------------------------------------------- #foreach my $key (@SearchEnginesSearchIDOrder_list1) { # if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in SearchEnginesSearchIDOrder_list1 with no value in SearchEnginesHashID"); # foreach my $key2 (@SearchEnginesSearchIDOrder_list2) { if ($key2 eq $key) { error("$key is in 1 and 2\n"); } } # foreach my $key2 (@SearchEnginesSearchIDOrder_listgen) { if ($key2 eq $key) { error("$key is in 1 and gen\n"); } } #} } #foreach my $key (@SearchEnginesSearchIDOrder_list2) { # if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in SearchEnginesSearchIDOrder_list1 with no value in SearchEnginesHashID"); # foreach my $key2 (@SearchEnginesSearchIDOrder_list1) { if ($key2 eq $key) { error("$key is in 2 and 1\n"); } } # foreach my $key2 (@SearchEnginesSearchIDOrder_listgen) { if ($key2 eq $key) { error("$key is in 2 and gen\n"); } } #} } #foreach my $key (@SearchEnginesSearchIDOrder_listgen) { if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in SearchEnginesSearchIDOrder_listgen with no value in SearchEnginesHashID"); } } #foreach my $key (keys %NotSearchEnginesKeys) { if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in NotSearchEnginesKeys with no value in SearchEnginesHashID"); } } #foreach my $key (keys %SearchEnginesKnownUrl) { # my $found=0; # foreach my $key2 (values %SearchEnginesHashID) { # if ($key eq $key2) { $found=1; last; } # } # if (! $found) { die "Entry '$key' has been found in SearchEnginesKnownUrl with no value in SearchEnginesHashID"; } #} #foreach my $key (keys %SearchEnginesHashLib) { # my $found=0; # foreach my $key2 (values %SearchEnginesHashID) { # if ($key eq $key2) { $found=1; last; } # } # if (! $found) { die "Entry '$key' has been found in SearchEnginesHashLib with no value in SearchEnginesHashID"; } #} #print @SearchEnginesSearchIDOrder_list1." ".@SearchEnginesSearchIDOrder_list2." ".@SearchEnginesSearchIDOrder_listgen; 1; lang/awstats-id.txt000064400000006566152532065620010331 0ustar00# Indonesian message file (oleh Steven Haryanto) # $Revision: 1.6 $ - $Date: 2002/10/29 19:14:33 $ message0=Tidak Diketahui message1=Tidak Diketahui (IP tidak teresolve) message2=Lainnya message3=Lihat Rincian message4=Hari message5=Bulan message6=Tahun message7=Statistik untuk message8=Kunjungan Pertama message9=Kunjungan Terakhir message10=Jumlah Kunjungan message11=Pengunjung Unik message12=Kunjungan message13=Kata Kunci message14=Pencarian message15=Persen message16=Trafik message17=Domain/Negara message18=Pengunjung message19=Halaman-URL message20=Jam (Waktu Server) message21=Browser message22=Error HTTP message23=Referer message24=Tidak pernah diupdate message25=Domain/negara pengunjung message26=host message27=halaman message28=halaman-url unik message29=Halaman yang Dilihat message30=Kata lain message31=Halaman tidak ditemukan (not found) message32=Kode error HTTP message33=Versi Netscape message34=Versi IE message35=Terakhir diupdate message36=Asal koneksi dari message37=Asal message38=Direct address / Bookmark message39=Asal tidak diketahui message40=Link dari Search Engine message41=Link dari situs lain (yang bukan search engine) message42=Link dari situs sendiri (situs yang sama dengan halaman yang diakses) message43=Frase yang dipakai di search engine message44=Kata kunci yang dipakai di search engine message45=Alamat IP yang tidak teresolve message46=OS tidak diketahui (field useragent) message47=URL tidak ditemukan (kode HTTP 404) message48=Alamat IP message49=Jumlah Hit Error message50=Browser tidak diketahui (field useragent) message51=robot unik message52=kunjungan/pengunjung message53=Robot/Spider message54=Tool gratis penganalisis log realtime dan penghasil statistik web advanced message55=dari message56=Halaman message57=Hit message58=Versi message59=Sistem Operasi message60=Jan message61=Feb message62=Mar message63=Apr message64=Mei message65=Jun message66=Jul message67=Agu message68=Sep message69=Okt message70=Nov message71=Des message72=Navigasi message73=Jenis File message74=Update Sekarang message75=Bandwidth message76=Kembali ke halaman utama message77=Kembali Ke Atas message78=dd mmm yyyy - HH:MM message79=Filter message80=Daftar Lengkap message81=Host message82=Diketahui message83=Robot message84=Min message85=Sen message86=Sel message87=Rab message88=Kam message89=Jum message90=Sab message91=Hari message92=Siapa message93=Kapan message94=User yang memiliki password message95=Min message96=Rata-Rata message97=Maks message98=Kompresi web message99=Penghematan bandwidth message100=Sebelum kompresi message101=Sesudah kompresi message102=Total message103=Frase unik message104=Halaman masuk (entry page) message105=Kode message106=Ukuran rata-rata message107=Link dari newsgroup message108=KB message109=MB message110=GB message111=Grabber message112=Ya message113=Tidak message114=Info WhoIs message115=OK message116=Halaman keluar (exit page) message117=Lama kunjungan message118=Tutup window message119=Byte message120=Frase Pencarian message121=Kata Kunci Pencarian message122=search engine referer unik message123=situs referer unik message124=Frase lain message125=Login lain (dan/atau user anonim) message126=Search engine referer message127=Situs referer message128=Ringkasan message129=Nilai pasti tidak tersedia di tampilan 'Tahunan' message130=Array nilai data message131=Email Pengirim message132=Email Penerima message133=Periode Laporanlang/awstats-ro.txt000064400000005432152532065620010344 0ustar00# Romanian message file (Codre Adrian - Florin Radulescu ) # $Revision: 1.3 $ - $Date: 2002/05/28 00:06:34 $ PageCode=iso-8859-2 message0=Necunoscute message1=Necunoscute (adresã ip nerezolvatã) message2=Alte message3=Detalii message4=Ziua message5=Luna message6=Anul message7=Statistici pentru: message8=Prima vizitã message9=Ultima vizitã message10=Numãrul de vizite message11=Vizitatori unici message12=Vizitã message13=Cuvânt cheie message14=Cãutare message15=Procent message16=Trafic message17=Domenii/þãri message18=Vizitatori message19=Pagini-URL message20=Ore (Timp server) message21=Browsere message22=Erori HTTP message23=Referiri message24=Cãutare Cuvinte cheie message25=Domenii vizitatori/þãri message26=gazde message27=pagini message28=pagini diferite message29=Contor vizualizãri message30=Alte cuvinte message31=Pagini negãsite message32=Coduri de eroare HTTP message33=Versiuni Netscape message34=Versiuni IE message35=Ultima actualizare message36=Conectare de la message37=Origine message38=Adresã directã / Semn de carte message39=Origine necunoscutã message40=Legãturã de la un motor de cãutare message41=Legaturã de la o paginã externã (alt site cu excepþia motoarelor de cãutare) message42=Legãturã de la o paginã internã (altã paginã de pe acelaºi site) message43=Cuvinte cãutate cu motoare de cãutare message44= message45=IP nerezolvat message46=Sistem de operare necunoscut message47=Pagini cerute dar negãsite (cod eroare HTTP numãrul 404) message48=Adresã IP message49=Eroare Accesãri message50=Browsere necunoscute message51=Roboþi message52=vizite/vizitatori message53=Roboþi/Motoare de cãutare message54=Analizator de trafic în timp real pentru statistici web avansate message55=din message56=Pagini message57=Accesãri message58=Versiuni message59=Sisteme de operare message60=Ian message61=Feb message62=Mar message63=Apr message64=Mai message65=Iun message66=Iul message67=Aug message68=Sep message69=Oct message70=Nov message71=Dec message72=Navigare message73=Statistici zilnice message74=Actualizeazã acum message75=Octeþi message76=Înapoi la pagina principalã message77=Primele message78=dd mm yyyy - HH:MM message79=Filtru message80=Toatã lista message81=Gazde message82=Cunoscute message83=Roboþi message84=Dum message85=Lun message86=Mar message87=Mie message88=Joi message89=Vin message90=Sam message91=Zilele sãptãmânii message92=Cine message93=Când message94=Utilizatori autentificati message95=Min message96=Medie message97=Max message98=Compresie web message99=Bandã economisitã message100=Inainte de compresie message101=Dupa compresie message102=Total message103=fraze cheie diferite message104=Paginã de intrare message105=Cod message106=Trafic mediu message107=Legaturi de la un grup de News message108=KB message109=MB message110=GBlang/.DS_Store000064400000014004152532065620007155 0ustar00Bud1 eslg1Scomp_noteslg1ScompF_notesmoDDdutcÏ G_notesmodDdutcÏ G_notesph1Scomp tooltips_flg1ScompY tooltips_fmoDDdutcÏ J tooltips_fmodDdutcÏ J tooltips_fph1Scompp tooltips_mlg1Scomp¶Â tooltips_mmoDDdutcÏ M tooltips_mmodDdutcÏ M tooltips_mph1Scompà tooltips_wlg1ScompÞÎ tooltips_wmoDDdutcÏ ^ tooltips_wmodDdutcÏ ^ tooltips_wph1Scompð  @€ @€ @€ @ E DSDB `€ @€ @€ @lang/awstats-es.txt000064400000012677152532065620010344 0ustar00# Spanish message file (Temu-BCN temujinnn@hotmail.com, Sergio Bayarri Gausi euimail@aiind.upv.es) # $Revision: 1.15 $ - $Date: 2005/02/12 19:15:56 $ message0=Desconocido message1=Desconocidos (Dirección IP desconocida) message2=Otros message3=Ver detalles message4=Día message5=Mes message6=Año message7=Estadísticas de message8=Primera visita message9=Última visita message10=Número de visitas message11=Visitantes distintos message12=Visita message13=palabras clave diferentes message14=Búsquedas message15=Porcentaje message16=Tráfico message17=Dominios/Países message18=Visitantes message19=Páginas-URLs message20=Visitas por Horas message21=Navegadores message22= message23=Enlaces message24=Nunca se ha actualizado (Consulte 'Build/Update' en la página awstats_setup.html) message25=Visitas por Dominios/Países message26=servidores message27=páginas message28=páginas diferentes message29=Accesos message30=Otras palabras message31=Páginas no encontradas message32=Códigos de error HTTP message33=Versiones de Netscape message34=Versiones de MS Internet Explorer message35=Última actualización message36=Conectado al sitio desde message37=Origen de la conexión message38=Entrada directa o desde Favoritos message39=Origen desconocido message40=Enlaces desde algún buscador de Internet message41=Enlaces desde páginas externas (otros sitios web, excepto buscadores) message42=Enlaces desde páginas internas (otras páginas del sitio) message43=Frases clave utilizadas en el buscador message44=Palabras clave utilizadas en el buscador message45=Dirección IP no identificada message46=Sistema Operativo desconocido (campo de referencia) message47=URLs solicitadas pero no encontradas (código 404 del protocolo HTTP) message48=Dirección IP message49=Solicitudes erróneas message50=Navegadores desconocidos (campo de referencia) message51=robots distintos message52=visitas/visitante message53=Visitas de Robots/Spiders message54=Analizador de históricos libre para estadísticas Web avanzadas message55=de message56=Páginas message57=Solicitudes message58=Versiones message59=Sistemas Operativos message60=Ene message61=Feb message62=Mar message63=Abr message64=May message65=Jun message66=Jul message67=Ago message68=Sep message69=Oct message70=Nov message71=Dic message72=Navegación message73=Tipos de ficheros message74=Actualizar ahora message75=Tráfico message76=Volver a la página principal message77=Top message78=dd mmm yyyy - HH:MM message79=Filtro message80=Lista completa message81=Servidores message82=Conocidos message83=Robots message84=Dom message85=Lun message86=Mar message87=Mie message88=Jue message89=Vie message90=Sab message91=Días de la semana message92=Quién message93=Cuándo message94=Usuarios autentificados message95=Min message96=Media message97=Max message98=Compresión Web message99=Tráfico ahorrado message100=Antes de la compresión message101=Después de la compresión message102=Total message103=frases clave diferentes message104=Página de entrada message105=Código message106=Tamaño medio message107=Enlaces desde grupos de noticias message108=KB message109=MB message110=GB message111=Grabber message112=Sí message113=No message114=Información Whois message115=Aceptar message116=Salida message117=Duración de las visitas message118=Cerrar ventana message119=Bytes message120=Búsquedas por frases clave message121=Búsquedas por palabras clave message122=enlaces desde buscadores diferentes message123=enlaces desde sitios diferentes message124=Otras cadenas de búsqueda message125=Otros usuarios (y/o usuarios anónimos) message126=Enlaces desde buscadores message127=Sitios de enlace message128=Resumen message129=Valor exacto no disponible en la vista anual message130=Tabla de datos message131=Correo electrónico del emisor message132=Correo electrónico del receptor message133=Periodo mostrado message134=Extra/Marketing message135=Resoluciones de pantalla message136=Ataques de Gusanos/Virus message137=Añadido a favoritos (estimado) message138=Días del mes message139=Misceláneos message140=Navegadores con soporte Java message141=Navegadores con soporte Macromedia Director message142=Navegadores con soporte Flash message143=Navegadores con soporte de reproductor Real audio message144=Navegadores con soporte de reproductor Quicktime audio message145=Navegadores con soporte de reproductor Windows Media audio message146=Navegadores con soporte PDF message147=Códigos de error SMTP message148=Países message149=Correos message150=Tamaño message151=Primero message152=Último message153=Excluir Filtro message154=Los códigos mostrados aquí son dados por solicitudes o tráfico "no visto" por los visitantes, y no se incluyen en otros apartados. message155=Cluster message156=Los Robots mostrados aquí son dados por solicitudes o tráfico "no visto" por los visitantes, y no se incluyen en otros apartados. message157=Los números mostrados trás el + son solicitudes con éxito de archivos "robots.txt". message158=Los Gusanos mostrados aquí son dados por solicitudes o tráfico "no visto" por los visitantes, y no se incluyen en otros apartados. message159=El tráfico "no visto" es tráfico generado por robots, gusanos o respuestas de código especial de estado HTTP. message160=Tráfico visto message161=Tráfico no visto message162=Histórico Mensual message163=Gusanos message164=gusanos diferentes message165=Correos electrónicos enviados con éxito message166=Correos electrónicos incorrectos o rechazados message167=Destinos sensibles message168=Javascript deshabilitado message169=Generado por message170=plugins lang/awstats-si.txt000064400000011733152532065620010340 0ustar00# Slovenian message file (goran@dodig.org) # $Revision: 1.2 $ - $Date: 2007/01/28 19:00:35 $ PageCode=utf-8 message0=Neznanih message1=Neznanih (nepoznan IP) message2=Drugi message3=Glej detajle message4=Dan message5=Mesec message6=Leto message7=Statistike za message8=Prvi obisk message9=Zadnji obisk message10=Å t. obiskov message11=RazliÄ�nih obiskovalcev message12=Obisk message13=razliÄ�nih kljuÄ�nih besed message14=Iskanje message15=Procentov message16=Promet message17=Domene/Države message18=Obiskovalcev message19=Strani-URL message20=Promet po urah dneva message21=Brskalniki message22= message23=Refererji message24=Nikoli posodobljen (Glej 'Build/Update' na awstats_setup.html strani) message25=Obiskovalcev iz domene/države message26=obiskovalcev message27=strani message28=razliÄ�nih strani-urljev message29=Obiskane strani message30=Druge besede message31=Strani, ki niso bile najdene message32=HTTP statusne kode message33=Netscape verzije message34=IE verzije message35=Zadnja osvežitev message36=Povezave z drugih strani message37=Izvor message38=Direktni naslovi / zaznambe message39=Neznan izvor message40=Povezave z internet iskalnikov message41=Povezave z zunanjih strani (z drugih internet strani, razen iskalnikov) message42=Povezave z internih strani message43=Iskalne fraze uporabljene na iskalnikih message44=Iskalni termini uporabljeni na iskalnikih message45=Nepoznani IP naslovi message46=Nepoznan OS (polje useragent) message47=URLji, ki niso bili najdeni (HTTP koda 404) message48=IP Naslov message49=Napaka Zadetkov message50=Neznani brskalniki (polje useragent) message51=razliÄ�ni roboti message52=obiskov/obiskovalca message53=Robotov/spiderjev message54=BrezplaÄ�en realtime logfile analizator za web statistike message55=od message56=strani message57=Zadetkov message58=Po verzijah message59=Operacijski sistemi message60=Jan message61=Feb message62=Mar message63=Apr message64=Maj message65=Jun message66=Jul message67=Avg message68=Sep message69=Okt message70=Nov message71=Dec message72=Navigacija message73=Tip datoteke message74=Osveži zdaj message75=Promet message76=Nazaj na glavno stran message77=Top message78=dd mmm yyyy - HH:MM message79=Filter message80=Cela lista message81=Obiskovalcev message82=Znanih message83=Robotov message84=Ned message85=Pon message86=Tor message87=Sre message88=ÄŒet message89=Pet message90=Sob message91=Promet po dnevih v tednu message92=Kdo message93=ÄŒasovni pregled message94=Prijavljenih uporabnikov message95=Min message96=PovpreÄ�no message97=Max message98=Web kompresija message99=Prihranjena pasovna Å¡irina message100=Kompresija vklopljena message101=Rezultat kompresije message102=Skupaj message103=razliÄ�nih fraz message104=Vpis message105=Koda message106=PovpreÄ�na velikost message107=Povezav iz NewsGroup message108=KB message109=MB message110=GB message111=Grabber message112=Da message113=Ne message114=Info. message115=OK message116=Izhod message117=Trajanje obiskov message118=Zapri okno message119=Bytov message120=Iskalne fraze message121=Iskalne kljuÄ�ne besede message122=razliÄ�nih iskalnikov message123=razliÄ�nih internet strani message124=Druge fraze message125=Druge prijave (in/ali anonimni uporabniki) message126=Iskalniki message127=Internet strani message128=Zbirno poroÄ�ilo message129=NatanÄ�na vrednost v pogledu 'Leto' ni na voljo message130=Polja podatkovnih vrednosti message131=Email poÅ¡iljatelja message132=Email prejemnika message133=Obobje poroÄ�ila message134=Ekstra/Marketing message135=Velikosti ekranov message136=Worm/Virus napadi message137=Dodano med priljubljene (približno) message138=Promet po dnevih v mesecu message139=Razno message140=Brskalniki s podporo Javi message141=Brskalniki s podporo Macromedia Directorju message142=Brskalniki s podporo Flashu message143=Brskalniki s podporo Real audia message144=Brskalniki s podporo Quicktime message145=Brskalniki s podporo Windows Media audia message146=Brskalniki s podporo PDF message147=SMTP Error kode message148=Države message149=SporoÄ�il message150=Velikost message151=Prvi message152=Zadnji message153=Filter za izloÄ�anje message154=Tu prikazane kode generirajo promet, ko ga obiskovalci ne vidijo, za to ta promet ni vkljuÄ�en v drugih pregledih. message155=Cluster message156=Tu prikazani roboti generirajo promet, ki ga obiskovalci ne vidijo, zato ta promet ni vkljuÄ�en v drugih pregledih. message157=Å tevilke po + so uspeÅ¡ni zadetki "robots.txt" datotek. message158=Tu prikazani wormi generirajo promet, ki ga obiskovalci ne vidijo, zato ta promet ni vkljuÄ�en v drugih pregledih. message159=Promet brez ogledov predstavlja promet generiran z roboti, wormi, ali odgovori s HTTP statustnimi kodami. message160=Promet z ogledi message161=Promet brez ogledov message162=Promet po mesecih message163=Wormi message164=razliÄ�nih wormov message165=UspeÅ¡no poslanih sporoÄ�il message166=NeuspeÅ¡no poslana/zavrnjena sporoÄ�ila message167=ObÄ�utljive tarÄ�e message168=Javascript izklopljen message169=Created by message170=plugini message171=ObmoÄ�ja message172=Mestalang/tooltips_m/.DS_Store000064400000014004152532065620011346 0ustar00Bud1eslg1Scomp_noteslg1Scompn_notesmoDDdutcÏ M_notesmodDdutcÏ M_notesph1Scomp  @€ @€ @€ @ EDSDB `€ @€ @€ @lang/tooltips_m/awstats-tt-it.txt000064400000015336152532065620013162 0ustar00
    Numero di client host diversi (indirizzi IP) che hanno inviato email.
    Numero di volte che una email è stata inviata con successo.
    Questo valore indica la quantità totale di dati trasferita dalle email.
    Le unità di misura sono espresse in KB, MB o GB (KiloByte, MegaByte o GigaByte)
    Gli orari visualizzati sono basati sul fuso orario del server.
    I dati qui riportati sono valori medi (calcolati su tutti i dati tra la prima e l'ultima email nel periodo di tempo analizzato)
    I dati qui riportati sono somme cumulative (calcolate su tutti i dati tra la prima e l'ultima email nel periodo di tempo analizzato)
    Operazione riuscita: Risposta di tipo non standard
    Operazione riuscita: Stato del sistema o risposta d'aiuto del sistema
    Operazione riuscita: Messaggio d'aiuto
    Operazione riuscita: Servizio pronto
    Operazione riuscita: Il servizio sta chiudendo il canale di trasmissione
    Operazione riuscita: Il server mail del vostro ISP ha eseguito con successo un comando ed il DNS riporta una consegna effettuata
    Operazione riuscita: Il messaggio contiene un indirizzo email non locale ma il server l'ha accettato e provvederà ad inoltrarlo verso un altro indirizzo di destinazione
    Operazione riuscita: Il destinatario non può essere verificato ma il server l'ha accettato e proverà a recapitarlo
    Operazione riuscita: Significa che il server mail è pronto a ricevere il messaggio oppure invita il vostro client ad inviare il corpo del messaggio dopo aver ricevuto l'intestazione.
    Errore temporaneo: Potrebbe essere la risposta a qualsiasi comando se il servizio sta per essere disattivato.
    Errore temporaneo: Il server mail del vostro ISP indica che un indirizzo di email non esiste, la casella è occupata oppure la email è stata temporaneamente rifiutata. E' possibile che la connessione sia caduta durante l'invio oppure che il server remoto non voglia accettare la email per qualche ragione (es. indirizzo IP, indirizzo mittente, destinatario, ecc.)
    Errore temporaneo: Il server mail del vostro ISP indica che l'invio è stato interrotto, solitamente a causa di un sovraccarico dovuto a troppi messaggi, oppure che il messaggio è valido ma alcuni eventi transitori ne impediscono l'invio. Si consiglia di ripetere l'operazione in un secondo momento
    Errore temporaneo: Il server mail del vostro ISP indica un probabile sovraccarico dovuto a troppi messaggi. Si consiglia di ripetere l'operazione in un secondo momento
    Errore temporaneo: Alcuni server mail hanno l'opzione di ridurre il numero di connessioni contemporanee ed anche il numero di messaggi inviati per connessione. Se avete troppi messaggi in coda questi potrebbero superare il numero massimo per connessione. Per verificarlo provate ad inviare pochi messaggi per volta verso quel dominio aumentando il numero ad ogni invio fino a scoprire il valore massimo accettato dal server
    Errore permanente: Errore di sintassi, comando non riconosciuto o linea di comando troppo lunga
    Errore permanente: Errore di sintassi sui parametri o sugli argomenti
    Errore permanente: Comando non implementato
    Errore permanente: Il server ha incontrato una sequenza errata di comandi
    Errore permanente: Parametro del comando non implementato
    Errore permanente: Per usare questo server SMTP dovete autenticarvi tramite protocollo POP e specificare il vostro indirizzo email nel campo Sender/From (mittente)
    Errore permanente: Accesso negato. Un sendmailismo ?
    Errore permanente: L'invio di email a destinatari che non appartengono al proprio dominio non è consentito oppure è richiesta l'autenticazione per far sapere al server che siete autorizzati a farlo. Per evitare lo SPAM alcuni server non consentono l'invio di email verso qualsiasi indirizzo (relay) usando i computer e la rete di un'altra azienda.
    Errore permanente: Utente non locale: provare con oppure Indirizzo Invalido: richiesta di relay negata
    Errore permanente: Invio email interrotto: spazio su disco esaurito. Il server mail dell'ISP segnala un probabile sovraccarico dovuto all'invio di troppi messaggi.
    Errore permanente: Invio email non iniziato: nome della casella di posta non consentito. Alcuni server mail hanno l'opzione di ridurre il numero di connessioni contemporanee ed anche il numero di messaggi inviati per connessione. Se avete troppi messaggi in coda per un dominio questi potrebbero superare il numero massimo per connessione e richiedere alcune modifiche al testo e/o al destinatario per poter essere inviati.
    Errore permanente: Invio email rifiutato: accesso negato
    Errore permanente: Troppi messaggi duplicati. Se la risorsa non è momentaneamente disponibile è possibile che sul server mail sia installato un sistema anti-spam.
    Errore ti tipo sconosciuto. Questo errore non viene segnalato dal server mail ma dal tool maillogconvert.pl quando rileva nel file di log che l'invio non è andato a buon fine ma non sono presenti spiegazioni sull'errore.
    lang/tooltips_m/awstats-tt-is.txt000064400000014552152532065620013160 0ustar00
    Fjöldi mismunandi véla (IP-vistfanga) sem sendu bréf.
    Fjöldi skipta sem tölvupóstur var giftusamlega sendur.
    Þetta er heildargagnamagn sem halað var niður sem póstur.
    Einingar eru í KB, MB eða GB (KílóBæti, MegaBæti eða GígaBæti)
    Öll tímatengd tölfræði er byggð á klukku netþjóns.
    Gögn í þessari skýrslu eru: meðalgildi (reiknuð út frá öllum gögnum milli fyrsta og síðasta bréfs á greindu tímabili)
    Gögn í þessari skýrslu eru: samtölur (reiknuð út frá öllum gögnum milli fyrsta og síðasta bréfs á greindu tímabili)
    Árangursríkt: Óstaðlað jákvætt svar
    Árangursríkt: Staða kerfis, eða svar við hjálparbeiðni
    Árangursríkt: Hjálparskilaboð
    Árangursríkt: Þjónusta tilbúin
    Árangursríkt: Þjónusta lokaði flutningsrás
    Árangursríkt: Póstþjónn netveitu þinnar hefur framkvæmt skipun giftusamlega og nafnaþjónninn gefur til kynna að bréfinu hafi verið komið til skila
    Árangursríkt: Bréf þitt til ákveðins netfangs er ekki staðbundið við póstþjóninn, en hann samþykkir bréfið og sendir það áfram á annað netfang
    Árangursríkt: Ekki var hægt að staðfesta tilveru móttakanda en póstþjónninn tók á móti bréfinu og reynir afhendingu
    Árangursríkt: Gefur til kynna að póstþjónn er tilbúinn að taka á móti bréfinu eða segja póstforriti þínu að senda aðaltexta bréfsins eftur að póstþjónninn hefur tekið á móti hausum bréfsins.
    Tímabundin villa: Þetta gæti verið villa við hvaða skipun sem er ef póstþjónninn veit að verið er að slökkva á honum.
    Tímabundin villa: Póstþjónn netveitu þinnar gefur til kynna að netfang sé ekki til, pósthólf sé upptekið eða póst sé hafnað tímabundið. Mögulegt er að nettengingin hafi rofnað í miðri sendingu, eða ef hinn póstþjónninn vill ekki taka á móti bréfum frá þér einhverra hluta vegna. (T.d. IP-vistfang, Frá netfang, móttakandi, o.s.frv.)
    Tímabundin villa: Póstþjónn netveitu þinnar gefur til kynna að póstflutningur var truflaður, venjulega vegna þess að of mörg bréf eru í vinnslu eða tímabundin villa kemur í veg fyrir að bréfið sé sent þótt bréfið sé gilt. Sending í framtíðinni gæti verið árangursrík.
    Tímabundin villa: Póstþjónn netveitu þinnar gefur til kynna að of mikið álag sé á honum vegna of marga bréfa í vinnslu. Sending í framtíðinni gæti verið árangursrík.
    Tímabundin villa: Sumir póstþjónar hafa stillingu sem takmarkar fjölda tenginga í einu og einnig fjölda sendra bréfa í hverri tengingu. Ef þú ert með mörg bréf í bið gætu þau farið yfir hámarksfjölda bréfa frá hverri tengingu. Til að athuga hvort þetta sé vandamálið getur þú prófað að senda örfá bréf til þessa léns í einu og síðan hækkað fjöldann þar til þú finnur út hver hámarksfjöldi samþykktur af netþjóninum er
    Varanleg villa: Stílvilla, óþekkt skipun eða skipanalína of löng
    Varanleg villa: Stílvilla í færibreytu
    Varanleg villa: Skipun ekki útfærð
    Varanleg villa: Þjónn rakst á ranga röð af skipunum
    Varanleg villa: Færibreyta skipunar ekki útfærð
    Varanleg villa: Þú verður að auðkenna þig með POP áður en þú getur notað þennan SMTP þjón og þú verður að nota netfang þitt úr Frá reitinum.
    Varanleg villa: Aðgangi hafnað. Sendmail-hegðun ?
    Varanleg villa: Sending bréfa til móttakanda fyrir utan lén þitt er ekki leyfð eða póstþjónn þinn veit ekki að þú hafir aðgang að honum til að senda bréf í gegnum hann og auðkenningar er krafist. Einnig er mögulegt að til að hindra sendingu RUSLPÓSTS leyfi sumir póstþjónar ekki sendingu bréfa ef notað er netkerfi annars fyrirtækis..
    Varanleg villa: Notandi ekki staðbundinn: vinsamlegast reyndu eða Ógilt netfang: Beiðni um sendingu bréfs í gegnum þjóninn hafnað
    Varanleg villa: Hætt við umbeðna póstskipun: ekki nóg pláss eftir. Póstþjónn netveitu gefur til kynna að pósthólf sé fullt, mögulega vegna of margra bréfa..
    Varanleg villa: Umbeðin póstskipun ekki framkvæmd: nafn pósthólfs ekki leyft. Sumir póstþjónar hafa möguleika á því að takmarka fjölda tenginga í einu og einnig fjölda bréfa sendra í hverri tengingu. Ef þú er með mikinn fjölda bréfa í bið (í sendingu) fyrir ákveðið lén, gæti sending farið yfir hámarksfjölda bréfa í tengingu og/eða breytingu sé krafist á bréfinu og/eða áfanganetfangi svo bréfið geti komist til skila.
    Varanleg villa: Umbeðinni póstskipun hafnað: aðgangi hafnað
    Varanleg villa: Of mörg afrit af bréfi. Póstþjónn ekki aðgengilegur í augnablikinu. Gefur (sennilega) til kynna að það er einhvers konar vörn gegn ruslpósti á póstþjóninum.
    Þetta er óþekkt villa. Þessi villa kemur ekki frá póstþjóni heldur frá maillogconvert.pl tólinu þegar það finnur að sending hafi ekki tekist en annállinn inniheldur engar upplýsingar um villuna..
    lang/tooltips_m/awstats-tt-gr.txt000064400000026503152532065620013154 0ustar00
    Α�ιθμός από διαφο�ετικο�ς πελάτες (IP διευθ�νσεις) που έστειλαν mails.
    Α�ιθμός επιτυχών μεταφο�ών email.
    Αυτό είναι το συνολικό μέγεθος δεδομένων που μεταφέ�θηκαν μέσω email.
    ΟΙ μονάδες είναι σε KB, MB ή GB (KiloBytes, MegaBytes ή GigaBytes)
    Όλα τα στατιστικά που συσχετίζονται με χ�όνο είναι βάση της ώ�ας του διακομιστή.
    Εδώ, τα δεδομένα που αναφέ�ονται είναι: μέσος ό�ος τιμών (έχουν υπολογιστεί από όλα τα δεδομένα μεταξ� του π�ώτου και του τελευταίου e-mail στο ε��ος της ανάλυσης)
    Εδώ, τα δεδομένα που αναφέ�ονται είναι: συγκεντ�ωτικά σ�νολα (έχουν υπολογιστεί από όλα τα δεδομένα μεταξ� του π�ώτου και του τελευταίου e-mail στο ε��ος της ανάλυσης)
    Επιτυχία: Μη τυπικό μ�νημα επιτυχίας
    Επιτυχία: Κατάσταση συστήματος, ή απόκ�ιση βοήθειας συστήματος
    Επιτυχία: Μήνυμα βοήθειας
    Επιτυχία: Η υπη�εσία σε ετοιμότητα
    Επιτυχία: Η υπη�εσία κλείνει το κανάλι μετάδοσης
    Επιτυχία: Ο διακομιστής mail του ISP σας εκτέλεσε με επιτυχία μία εντολή και ο DNS αναφέ�ει επιτυχή πα�άδοση
    Επιτυχία: Το μήνυμα για μια συγκεκ�ιμένη email διε�θυνση δεν είναι τοπικό όσον αφο�ά τον διακομιστή, αλλά θα το δεχτεί και θα το π�οωθήσει σε μια διαφο�ετική διε�θυνση πα�αλήπτη
    Επιτυχία: Ο πα�αλήπτης δεν μπο�εί να επιβεβαιωθεί αλλά ο διακομιστής mail αποδέχεται το μήνυμα και δοκιμάζει την πα�άδοσή του
    Επιτυχία: Δείχνει ότι ο διακομιστής mail είναι έτοιμος να πα�αλάβει το μήνυμα ή δίνει εντολή στο π�όγ�αμμα πελάτη αλληλογ�αφίας να στείλει το σώμα του μυνήματος, αφο� ο διακομιστής mail πα�αλάβει την επικεφαλίδα του μυνήματος.
    Π�οσω�ινό σφάλμα: Αυτό μπο�εί να είναι απόκ�ιση σε οποιαδήποτε εντολή όταν η υπη�εσία γνω�ίζει ότι θα π�έπει να τε�ματιστεί.
    Π�οσω�ινό σφάλμα: Ο διακομιστής mail του ISP σας δείχνει ότι μια διε�θυνση mail δεν υπά�χει, ότι η θυ�ίδα mail είναι απασχολημένη ή ότι το email απο��ίφθηκε π�οσω�ινά. Μπο�εί να σημαίνει π�οσω�ινό π�όβλημα στην σ�νδεση δικτ�ου κατά την διά�κεια της αποστολής, ή μπο�εί να συμβεί επίσης εάν ο απομακ�υσμένος διακομιστής mail δεν επιτ�έπει την αποδοχή email από εσάς για οποιονδήποτε λόγο π.χ. (Διε�θυνση IP, Διε�θυνση Αποστολέα. Διε�θυνση Πα�αλήπτη, κτλ.)
    Π�οσω�ινό σφάλμα: Ο διακομιστής mail του ISP σας δείχνει ότι διεκόπη η υπη�εσία mail, συνήθως λόγω υπε�φό�τωσης από πά�α πολλά μυνήματα ή λόγω ενδιάμεσης αποτυχίας στην πε�ίπτωση κατά την οποία, πα�όλο που το μ�νημα είναι έγκυ�ο, κάποιο π�οσω�ινό σφάλμα αποτ�έπει την επιτυχή αποστολή του μυνήματος. Μελλοντική αποστολή θα είναι πιθανόν επιτυχής
    Π�οσω�ινό σφάλμα: Ο διακομιστής mail του ISP σας δείχνει πιθανή υπε�φό�τωση από μεγάλο α�ιθμό μυνημάτων καθώς και ότι μελλοντική αποστολή πιθανόν να είναι επιτυχής
    Π�οσω�ινό σφάλμα: Κάποιοι διακομιστές mail έχουν την επιλογή να μειώσουν τον α�ιθμό ταυτόχ�ονων συνδέσεων καθώς και επίσης τον α�ιθμό των μυνημάτων που αποστέλλονται ανά σ�νδεση. Εάν έχετε μεγάλο α�ιθμό μυνημάτων στην ου�ά πιθανόν να ξεπε�νάει αυτό το ό�ιο. Για να δείτε εάν όντως αυτή είναι η πε�ίπτωση μπο�είται να δοκιμάσετε να αποστείλνετε μικ�ό α�ιθμό μυνημάτων σε αυτόν τον διακομιστή mail κάθε φο�ά και να αυξάνεται σταδιακά τον α�ιθμό αυτό μέχ�ις ότου να β�είτε τον μέγιστο α�ιθμό μυνημάτων που γίνεται ταυτόχ�ονα αποδεκτός από τον διακομιστή
    Μόνιμο σφάλμα: Συντακτικό λάθος, μη αναγνω�ίσιμη εντολή ή πολ� μεγάλη γ�αμμη εντολών ( με πα�αμέτ�ους)
    Μόνιμο σφάλμα: Συντακτικό λάθος στις πα�αμέτ�ους της εντολής
    Μόνιμο σφάλμα: Η εντολή δεν έχει υλοποιηθεί
    Μόνιμο σφάλμα: Ο διακομιστής συνάντησε μία λανθασμένη αλληλουχία εντολών
    Μόνιμο σφάλμα: Η πα�άμετ�ος της εντολής δεν έχει υλοποιηθεί
    Μόνιμο σφάλμα: Θα π�έπει να πιστοποιηθεί η pop σ�νδεσή σας π�ιν την επιτυχή χ�ήση αυτο� του διακομιστή SMTP και θα π�έπει να χ�ησιμοποιήσεται την διε�θυνση email για το πεδίο Αποστολέα.
    Μόνιμο σφάλμα: Από��ιψη π�όσβασης. Μήπως λόγω συμπε�ιφο�άς που χα�ακτη�ίζεται ως sendmailism;
    Μόνιμο σφάλμα: Αποστολές email σε αποδέκτες εκτός του domain σας δεν επιτ�έπονται ή ο διακομιστής email σας δεν γνω�ίζει ότι έχετε π�όσβαση για να τον χ�ησιμοποιήσετε για την αποστολή μυνημάτων και χ�ειάζεται πιστοποίηση. Η για την αποφυγή αποστολής SPAM κάποιοι διακομιστές mail δεν επιτ�έπουν την αποστολή σε κανένα email χ�ησιμοποιώντας το δίκτυο ή τους πό�ους άλλης εται�είας.
    Μόνιμο σφάλμα: Ο χ�ήστης δεν είναι τοπικός: πα�ακαλώ π�οσπαθήστε ή μη έγκυ�η διε�θυνση: Η αίτηση αποστολής απο��ίφθηκε
    Μόνιμο σφάλμα: Η αιτο�μενη ενέ�γεια mail ακυ�ώθηκε: υπέ�βαση ο�ίου αποθήκευσης. Ο διακομιστής mail του ISP δείχνει πιθανή υπε�φό�τωση λόγω μεγάλου α�ιθμο� μυνημάτων.
    Μόνιμο σφάλμα: Η αιτο�μενη ενέ�γεια mail δεν π�αγματοποιήθηκε: το όνομα της θυ�ίδας mail δεν επιτ�έπεται. Κάποιοι διακομιστές mail έχουν την επιλογή να μειώσουν τον α�ιθμό των ταυτόχ�ονων συνεσεων καθώς και επίσης τον α�ιθμό των ταυτόχ�ονων μυνημάτων που αποστέλλονται ανά σ�νδεση. Εάν έχετε πολλά μυνήματα στην ου�ά σας για αποστολή π�ός ένα domain, μπο�εί να γίνει υπέ�βαση του ο�ίου αυτο� και θα π�έπει να γίνουν κάποιες αλλαγές στα μην�ματα ή στους πα�αλήπτες για επιτυχή πα�άδοση.
    Μόνιμο σφάλμα: Η αιτο�μενη ενέ�γεια mail απο��ίφθηκε: ά�νηση π�όσβασης
    Μόνιμο σφάλμα: Μεγάλος α�ιθμός όμοιων μηνυμάτων. Ο πό�ος είναι π�οσω�ινά μη διαθέσιμος κάτι που δείχνει ότι (πιθανόν) να υπά�χει κάποιος μηχανισμός anti-spam στον διακομιστή email.
    Αυτό είναι ένα άγνωστο μ�νημα σφάλματος. Ένα τέτοιο σφάλμα δεν αναφέ�εται από τον διακομιστή mail αλλά από το ε�γαλείο maillogconvert.pl όταν ανιχνε�ει στο α�χείο log ότι η αποστολή δεν ήταν επιτυχής αλλά δεν υπά�χει κάποια εξήγηση του σφάλματος αυτο� στο α�χείο log.
    lang/tooltips_m/awstats-tt-br.txt000064400000017465152532065620013156 0ustar00
    Número de hosts clientes diferentes (endereços IP) que enviaram mensagens.
    Número de vezes que um email foi transmitido com sucesso.
    Este é o volume total de dados transferidos por mensagens.
    As unidades estão em KB, MB ou GB (KiloBytes, MegaBytes ou GigaBytes)
    Todas as estatísticas reportadas são baseadas no horário do servidor.
    Aqui os dados reportados são: valores médios (calculados a partir de todos os dados entre a primeira e a última mensagem no período analisado)
    Aqui os dados reportados são: somas acumulativas (calculadas a partir de todos os dados entre a primeira e a última mensagem no período analisado)
    Sucesso: Resposta de sucesso não padronizada
    Sucesso: Estado do sistema, ou Ajuda do sistema
    Sucesso: Mensagem de Ajuda
    Sucesso: Serviço pronto
    Sucesso: Serviço fechando canal de transmissão
    Sucesso: O servidor de e-mail de seu ISP executou um comando com sucesso e o DNS está reportando uma entrega positiva
    Sucesso: Sua mensagem para um endereço de e-mail especificado não é local ao servidor de e-mail, mas ele irá aceitar e encaminhar a mensagem para um novo endereço de e-mail de destino
    Sucesso: Destinatários não podem ser verificados mas o servidor aceita a mensagem e tentará entregá-la
    Sucesso: Indica que o servidor de mensagens está pronto para aceitar a mensagem ou instruir seu programa cliente de e-mail a enviar o corpo da mensagem após o servidor ter recebido os cabeçalhos da mensagem.
    Erro temporário: Este pode ser um reply a qualquer comando se o setviço sabe que deve ser desligado.
    Erro temporário: O servidor de e-mail de seu provedor indicou que o endereço de e-mail não existe, a caixa-postal está ocupada ou o e-mail foi temporariamente recusado. Isto pode ser devido a conexões de rede terem caído enquanto enviando, ou pode também acontecer se o servidor de e-mail remoto não quiser aceitar mensagens suas por alguma razão p.e. (endereço IP, endereço From, Destinatário, etc.)
    Erro temporário: O servidor de e-mail do seu provedor indica que o envio foi interrompido, normalmente devido a sobrecarga de mensagens ou falha transiente em que a mensagem enviada é válida, mas algum evento temporário náo permitiu o envio com sucesso da mensagem. Enviar no futuro pode resultar em sucesso
    Erro temporário: O servidor de e-mail do seu provedor indica provável sobrecarda de mensagens e enviar no futuro pode resultar em sucesso
    Erro temporário: Alguns servidores têm a opção de reduzir o número de conexões simultâneas e também o número de mensagens enviadas por conexão. Se você tem várias mensagens enfileiradas pode ser devido a exceder o número máximo de mensagens por conexão. Para verificar se este é o caso você pode tentar enviar apenas algumas mensagens para aquele domínio de uma vez e aumentar o número de mensagens até encontrar o número máximo de mensagens aceito pelo servidor
    Erro permanente: Erro de sintaxe, comando não reconhecido ou linha de comando muito longa
    Erro permanente: Erro de sintaxe em parâmetros ou argumentos
    Erro permanente: Comando não implementado
    Erro permanente: Servidor encontrou uma seqüência de comandos incorretos
    Erro permanente: Parâmetro de comando não implementado
    Erro permanente: Você deve ser um usuário autenticado em pop antes de poder utilizar este servidor SMTP e você deve utilizar seu endereço de e-mail no campo de remetente (Sender/From).
    Erro permanente: Acesso negado. Um sendmailismo ?
    Erro permanente: Enviar e-mails para remetentes de fora de seu domínio não é permitido ou seu servidor de e-mail não reconhece que você tem acesso a utilizá-lo para relay de mensagens e autenticação é necessária. Ou para prevenir o envio de SPAM alguns servidores de e-mail não permitirão enviar (relay) e-mail para qualquer e-mail utilizando a rede ou recursos computacionais de outra empresa.
    Erro permanente: Usuário não local: favor tentar ou Endereço Inválido: Requisição de Relay recusada
    Erro permanente: Ação requisitada de e-mail abortada: excede espaço disponível. O servidor de e-mail do provedor indica uma provável sobrecarga devido a muitas mensagens.
    Erro permanente: Ação requisitada de e-mail não realizada: nome de caixa-postal não permitido. Alguns servidores de e-mail têm a opção de reduzir o número de conexões simultâneas e tambám o número de mensagens por conexão. Se você tém várias mensagens enfileiradas (sendo enviadas) para um domínio, pode exceder o número máximo de mensagens por conexão e/ou alguma alteração na mensagem e/ou destinatário deve ser feita para o envio ter sucesso.
    Erro permanente: Ação requisitada de e-mail rejeitada: accesso recusado
    Erro permanente: Muitas mensagens duplicadas. Recursos temporariamente indisponíveis. Indica (possível) que exista algum tipo de sistema anti-spam no servidor de e-mail.
    Este é um erro desconhecido. Erros deste tipo não são reportados pelo servidor de e-mail, mas pela ferramenta maillogconvert.pl quando ela detecta no log que o envio não teve sucesso e o arquivo de log não contém nenhuma explicação do erro.
    lang/tooltips_m/awstats-tt-fr.txt000064400000015006152532065620013147 0ustar00
    Nombre de hotes (adresses IP) utilisés pour envoyés un mail.
    Nombre de fois qu'un email a été transféré avec succès.
    Nombre d'octets représentant le volume des mails transférés.
    Les unités sont en Ko, Mo ou Go (Kilooctets, Megaoctets or Gigaoctets)
    Toutes les statistiques en rapport avec le temps sont basées sur les heures du serveur.
    Ici les données rapportées sont des: valeurs moyennes (calculées à partir des données entre le premier et dernier email de la période analysée)
    Ici les données rapportées sont des: sommes cumulées (calculées à partir des données entre le premier et dernier email de la période analysée)
    Success: Non standard success response
    Success: System status, or system help repl
    Success: Help message
    Success: Service ready
    Success: Service closing transmission channel
    Success: Your ISP mail server have successfully executes a command and the DNS is reporting a positive delivery
    Success: Your message to a specified email address is not local to the mail server, but it will accept and forward the message to a different recipient email address
    Success: Recipient cannot be verified but mail server accepts the message and attempts delivery
    Success: Indicates mail server is ready to accept the message or instruct your mail client to send the message body after the mail server have received the message headers.
    Temporary error: This may be a reply to any command if the service knows it must shut down.
    Temporary error: Your ISP mail server indicates that an email address does not exist, mailbox is busy or mail temporarly refused. It could be the network connection went down while sending, or it could also happen if the remote mail server does not want to accept mail from you for some reason i.e. (IP address, From address, Recipient, etc.)
    Temporary error: Your ISP mail server indicates that the mailing has been interrupted, usually due to overloading from too many messages or transient failure is one in which the message sent is valid, but some temporary event prevents the successful sending of the message. Sending in the future may be successful
    Temporary error: Your ISP mail server indicates, probable overloading from too many messages and sending in the future may be successful
    Temporary error: Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up it could go over the max number of messages per connection. To see if this is the case you can try submitting only a few messages to that domain at a time and then keep increasing the number until you find the maximum number accepted by the server
    Permanent error: Syntax error, command unrecognized or command line too long
    Permanent error: Syntax error in parameters or arguments
    Permanent error: Command not implemented
    Permanent error: Server encountered bad sequence of commands
    Permanent error: Command parameter not implemented
    Permanent error: You must be pop-authenticated before you can use this SMTP server and you must use your mail address for the Sender/From field.
    Permanent error: Access denied. A sendmailism ?
    Permanent error: Sending an email to recipients outside of your domain are not allowed or your mail server does not know that you have access to use it for relaying messages and authentication is required. Or to prevent the sending of SPAM some mail servers will not allow (relay) send mail to any e-mail using another company’s network and computer resources.
    Permanent error: User not local: please try or Invalid Address: Relay request denied
    Permanent error: Requested mail action aborted: exceeded storage allocation. ISP mail server indicates, probable overloading from too many messages.
    Permanent error: Requested mail action not taken: mailbox name not allowed. Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up (being sent) for a domain, it could go over the maximum number of messages per connection and/or some change to the message and/or destination must be made for successful delivery.
    Permanent error: Requested mail action rejected: access denied
    Permanent error: Too many duplicate messages. Resource temporarily unavailable Indicates (probable) that there is some kind of anti-spam system on the mail server.
    This is an unknown error. A such error is not reported by the mail server but by the maillogconvert.pl tool when it detects in the log that the sending was not successfull and the log file does not contains any explanation of the error.
    lang/tooltips_m/awstats-tt-en.txt000064400000014616152532065620013150 0ustar00
    Number of different client hosts (IP addresses) who sent mails.
    Number of times an email was transfered by success.
    This is the total amount of data transfered by mails.
    Units are in KB, MB or GB (KiloBytes, MegaBytes or GigaBytes)
    All time related statistics are based on server time.
    Here, reported data are: average values (calculated from all data between the first and last email in analyzed range)
    Here, reported data are: cumulative sums (calculated from all data between the first and last email in analyzed range)
    Success: Non standard success response
    Success: System status, or system help repl
    Success: Help message
    Success: Service ready
    Success: Service closing transmission channel
    Success: Your ISP mail server have successfully executes a command and the DNS is reporting a positive delivery
    Success: Your message to a specified email address is not local to the mail server, but it will accept and forward the message to a different recipient email address
    Success: Recipient cannot be verified but mail server accepts the message and attempts delivery
    Success: Indicates mail server is ready to accept the message or instruct your mail client to send the message body after the mail server have received the message headers.
    Temporary error: This may be a reply to any command if the service knows it must shut down.
    Temporary error: Your ISP mail server indicates that an email address does not exist, mailbox is busy or mail temporarly refused. It could be the network connection went down while sending, or it could also happen if the remote mail server does not want to accept mail from you for some reason i.e. (IP address, From address, Recipient, etc.)
    Temporary error: Your ISP mail server indicates that the mailing has been interrupted, usually due to overloading from too many messages or transient failure is one in which the message sent is valid, but some temporary event prevents the successful sending of the message. Sending in the future may be successful
    Temporary error: Your ISP mail server indicates, probable overloading from too many messages and sending in the future may be successful
    Temporary error: Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up it could go over the max number of messages per connection. To see if this is the case you can try submitting only a few messages to that domain at a time and then keep increasing the number until you find the maximum number accepted by the server
    Permanent error: Syntax error, command unrecognized or command line too long
    Permanent error: Syntax error in parameters or arguments
    Permanent error: Command not implemented
    Permanent error: Server encountered bad sequence of commands
    Permanent error: Command parameter not implemented
    Permanent error: You must be pop-authenticated before you can use this SMTP server and you must use your mail address for the Sender/From field.
    Permanent error: Access denied. A sendmailism ?
    Permanent error: Sending an email to recipients outside of your domain are not allowed or your mail server does not know that you have access to use it for relaying messages and authentication is required. Or to prevent the sending of SPAM some mail servers will not allow (relay) send mail to any e-mail using another company’s network and computer resources.
    Permanent error: User not local: please try or Invalid Address: Relay request denied
    Permanent error: Requested mail action aborted: exceeded storage allocation. ISP mail server indicates, probable overloading from too many messages.
    Permanent error: Requested mail action not taken: mailbox name not allowed. Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up (being sent) for a domain, it could go over the maximum number of messages per connection and/or some change to the message and/or destination must be made for successful delivery.
    Permanent error: Requested mail action rejected: access denied
    Permanent error: Too many duplicate messages. Resource temporarily unavailable Indicates (probable) that there is some kind of anti-spam system on the mail server.
    This is an unknown error. A such error is not reported by the mail server but by the maillogconvert.pl tool when it detects in the log that the sending was not successfull and the log file does not contains any explanation of the error.
    lang/d2utmprDNIqj000064400000006566152532065620007716 0ustar00# Indonesian message file (oleh Steven Haryanto) # $Revision: 1.6 $ - $Date: 2002/10/29 19:14:33 $ message0=Tidak Diketahui message1=Tidak Diketahui (IP tidak teresolve) message2=Lainnya message3=Lihat Rincian message4=Hari message5=Bulan message6=Tahun message7=Statistik untuk message8=Kunjungan Pertama message9=Kunjungan Terakhir message10=Jumlah Kunjungan message11=Pengunjung Unik message12=Kunjungan message13=Kata Kunci message14=Pencarian message15=Persen message16=Trafik message17=Domain/Negara message18=Pengunjung message19=Halaman-URL message20=Jam (Waktu Server) message21=Browser message22=Error HTTP message23=Referer message24=Tidak pernah diupdate message25=Domain/negara pengunjung message26=host message27=halaman message28=halaman-url unik message29=Halaman yang Dilihat message30=Kata lain message31=Halaman tidak ditemukan (not found) message32=Kode error HTTP message33=Versi Netscape message34=Versi IE message35=Terakhir diupdate message36=Asal koneksi dari message37=Asal message38=Direct address / Bookmark message39=Asal tidak diketahui message40=Link dari Search Engine message41=Link dari situs lain (yang bukan search engine) message42=Link dari situs sendiri (situs yang sama dengan halaman yang diakses) message43=Frase yang dipakai di search engine message44=Kata kunci yang dipakai di search engine message45=Alamat IP yang tidak teresolve message46=OS tidak diketahui (field useragent) message47=URL tidak ditemukan (kode HTTP 404) message48=Alamat IP message49=Jumlah Hit Error message50=Browser tidak diketahui (field useragent) message51=robot unik message52=kunjungan/pengunjung message53=Robot/Spider message54=Tool gratis penganalisis log realtime dan penghasil statistik web advanced message55=dari message56=Halaman message57=Hit message58=Versi message59=Sistem Operasi message60=Jan message61=Feb message62=Mar message63=Apr message64=Mei message65=Jun message66=Jul message67=Agu message68=Sep message69=Okt message70=Nov message71=Des message72=Navigasi message73=Jenis File message74=Update Sekarang message75=Bandwidth message76=Kembali ke halaman utama message77=Kembali Ke Atas message78=dd mmm yyyy - HH:MM message79=Filter message80=Daftar Lengkap message81=Host message82=Diketahui message83=Robot message84=Min message85=Sen message86=Sel message87=Rab message88=Kam message89=Jum message90=Sab message91=Hari message92=Siapa message93=Kapan message94=User yang memiliki password message95=Min message96=Rata-Rata message97=Maks message98=Kompresi web message99=Penghematan bandwidth message100=Sebelum kompresi message101=Sesudah kompresi message102=Total message103=Frase unik message104=Halaman masuk (entry page) message105=Kode message106=Ukuran rata-rata message107=Link dari newsgroup message108=KB message109=MB message110=GB message111=Grabber message112=Ya message113=Tidak message114=Info WhoIs message115=OK message116=Halaman keluar (exit page) message117=Lama kunjungan message118=Tutup window message119=Byte message120=Frase Pencarian message121=Kata Kunci Pencarian message122=search engine referer unik message123=situs referer unik message124=Frase lain message125=Login lain (dan/atau user anonim) message126=Search engine referer message127=Situs referer message128=Ringkasan message129=Nilai pasti tidak tersedia di tampilan 'Tahunan' message130=Array nilai data message131=Email Pengirim message132=Email Penerima message133=Periode Laporanlang/awstats-hu.txt000064400000012104152532065620010332 0ustar00# Hungarian message file (gabor.funk@hunetkft.hu) # based on $Revision: 1.19 $ - $Date: 2005/12/15 00:04:20 $ PageCode=iso-8859-2 message0=Ismeretlen message1=Ismeretlen (feloldatlan ip) message2=Egyebek message3=Részletek message4=Nap message5=Hónap message6=Év message7=Statisztikai alap message8=Elsõ látogatás message9=Utolsó látogatás message10=Látogatások száma message11=Egyedi látogató message12=Látogatás message13=Különbözõ kulcsszó message14=Keresés message15=Százalék message16=Forgalom message17=Tartományok-Országok message18=Látogatók message19=Oldalak/URL message20=Óránkénti bontás message21=Böngészõk message22= message23=Hivatkozások message24=Nem frissített (Lásd 'Build/Update' fejezet az awstats_setup.html oldalon) message25=Látogatók tartományok/országok szerint message26=host message27=oldal message28=különbözõ oldalak-url message29=letöltött oldalak message30=Egyéb szavak message31=Nem talált oldalak message32=HTTP státuszkódok message33=Netscape verziók message34=IE verziók message35=Utolsó frissítés message36=Csatlakozások származási helyei message37=Származási hely message38=Direkt elérés / könyvjelzõ message39=Ismeretlen eredetû message40=Internet keresõkbõl message41=Linkek külsõ oldalakról (a keresõket kivéve) message42=Belsõ linkek (oldalon belül) message43=Keresõmotorokban használt kifejezések message44=Keresõmotorokban használt kulcsszavak message45=Feloldatlan IP címek message46=Ismeretlen OS (Hivatkozó mezõ) message47=Igényelt, de nem talált URL-ek (HTTP code 404) message48=IP cím message49=Hibás kérések message50=Ismeretlen böngészõk (Hivatkozó mezõ) message51=Látogató robot message52=látogatás/látogató message53=Robot/Spider látogatók message54=Ingyenes, valósidejû naplófájl analizátor fejlett web statisztikák készítéséhez message55=/ message56=Oldalak message57=Találatok message58=Verziók message59=Operációs Rendszerek message60=Jan message61=Feb message62=Már message63=Ápr message64=Máj message65=Jún message66=Júl message67=Aug message68=Szept message69=Okt message70=Nov message71=Dec message72=Navigáció message73=Fájltípus message74=Frissítés message75=Adatmennyiség message76=Vissza a fõoldalra message77=TOP message78=yyyy mmm dd - HH:MM message79=Szûrõ message80=Teljes lista message81=Host-ok message82=ismert message83=Robotok message84=V message85=H message86=K message87=Sze message88=Cs message89=P message90=Szo message91=Heti bontás message92=Ki message93=Mikor message94=Bejelentkezett felhasználók message95=Min message96=Átlag message97=Max message98=Web tömörítés message99=Nyert sávszélesség message100=Tömörítés bekapcsolva message101=Tömörítés eredménye message102=Összesen message103=különbözõ kifejezés message104=Belépõ oldalak message105=Kód message106=Átlagméret message107=Kapcsolódás hírcsoportból message108=KB message109=MB message110=GB message111=Grabber message112=Igen message113=Nem message114=információk message115=OK message116=Kilépõ oldalak message117=Látogatások hossza message118=Ablak bezárása message119=Bájt message120=Kifejezések keresése message121=Kulcsszavak keresése message122=különbözõ hivatkozó keresõmotor message123=különbözõ hivatkozó oldal message124=Egyéb kifejezések message125=Egyéb, vagy "Anonymous" látogatók message126=Hivatkozó keresõmotorok message127=Hivatkozó oldalak message128=Összesítés message129=Pontos érték nem áll rendelkezésre "éves" nézetben message130=Adat érték tömbök message131=Küldõ E-Mail címe message132=Fogadó E-Mail címe message133=Statisztikai idõszak message134=Extra/Marketing message135=Képernyõméretek message136=Worm/Virus kérések message137=Hozzáadás a kedvencekhez (becslés) message138=Napi bontás message139=Vegyes message140=Böngészõk Java támogatással message141=Böngészõk Macromedia Director támogatással message142=Böngészõk Flash támogatással message143=Böngészõk Real audio támogatással message144=Böngészõk Quicktime audio támogatással message145=Böngészõk Windows Media audio támogatással message146=Böngészõk PDF támogatással message147=SMTP hibakódok message148=Országok message149=Levelek message150=Méret message151=Elsõ message152=Utolsó message153=Szûrõ (kizárás) message154=Az itt listázott speciális HTTP statuszkódot generált kérések forgalma csak a "nem nézett forgalom" alatt szerepel, más statisztikába nincs beleszámítva. message155=Cluster message156=Az itt listázott robotok forgalma csak a "nem nézett forgalom" alatt szerepel, más statisztikába nincs beleszámítva message157=A pluszjel utáni számok a sikeres "robots.txt" fájllekéréseket jelentik. message158=Az itt listázott férgek forgalma csak a "nem nézett forgalom" alatt szerepel, más statisztikába nincs beleszámítva. message159=A "nem nézett forgalom" tartalmazza a robotok, férgek által lekért oldalakat illetve a speciális HTTP statuszkódot generált kérések forgalmát. message160=Nézett forgalom message161=Nem nézett forgalom message162=Havi bontás message163=Férgek message164=különféle féreg message165=Sikeresen elküldött levelek message166=Sikertelen/visszapattanó levelek message167=Érzékeny tartalom message168=Javascript kikapcsolva message169=Készítette az message170=beépülõ modulok message171=Régiók message172=Városoklang/awstats-ar.txt000064400000010150152532065620010317 0ustar00# Arabic message file (SanDan u2canbe@hotmail.com) # $Revision: 1.2 $ - $Date: 2004/02/10 19:13:08 $ PageCode=windows-1256 PageDir=rtl message0=ãÌåæá message1=ãÌåæá (ÚäæÇä IP ÛíÑ ãÚÑæÝ) message2=ÃÎÑì message3=ãÔÇåÏÉ ÇáÊÝÇÕíá message4=íæã message5=ÔåÑ message6=ÓäÉ message7=ÇÍÕÇÆÇÊ á message8=Ãæá ÒíÇÑÉ message9=ÂÎÑ ÒíÇÑÉ message10=ÚÏÏ ÇáÒíÇÑÇÊ message11=ÇáÒæÇÑ message12=ÒíÇÑÉ message13=ßáãÇÊ ÈÍË ãÎÊáÝÉ message14=ÈÍË message15=ÇáäÓÈÉ message16=ÍÑßÉ message17=ÇáÏæãíä\ÇáÏæá message18=ÇáÒæÇÑ message19=æÕáÇÊ ÇáÕÝÍÇÊ message20=ÇáÓÇÚÇÊ message21=ÈÑÇãÌ ÇáÊÕÝÍ message22= message23=ÇáãÍæáæä message24=áã íÊã ÇáÊÍÏíË (See 'Build/Update' on awstats_setup.html page) message25=ÇáÒæÇÑ ÇáÏæãíä\ÇáÏæá message26=ÇáåæÓÊ message27=ÕÝÍÇÊ message28=æÕáÇÊ ÕÝÍÇÊ ãÎÊáÝÉ message29=ÔæåÏÊ message30=ßáãÇÊ ÃÎÑì message31=ÕÝÍÇÊ ÛíÑ ãæÌæÏÉ message32=ÑãÒ ÍÇáÉ HTTP message33=ÇÕÏÇÑ äÊÓßíÈ message34=ÇÕÏÇÑ ÇßÓÈáæÑÑ message35=ÂÎÑ ÊÍÏíË message36=ÇÊÕá ÈÇáãæÞÚ Úä ØÑíÞ message37=ÇáãÕÏÑ message38=Úäæä ãÈÇÔÑ \ æÕáÉ ãÝÖáÇÊ message39=ãÕÏÑ ãÌåæá message40=æÕáÇÊ ãä ãÍÑßÇÊ ÈÍË message41=æÕáÇÊ ãä ÕÝÍÇÊ ÎÇÑÌíÉ (Óæì ãÍÑßÇÊ ÇáÈÍË) message42=æÕáÇÊ ãä ÕÝÍÇÊ ÏÇÎáíÉ (ÕÝÍÇÊ ãä ÏÇÎá ÇáãæÞÚ) message43=Ìãá ÇáÈÍË ÇáãÓÊÎÏãÉ Ýí ãÍÑßÇÊ ÇáÈÍË message44=ßáãÇÊ ÇáÈÍË ÇáãÓÊÎÏãÉ Ýí ãÍÑßÇÊ ÇáÈÍË message45=ÚäÇæíä IP áã íÊã ãÚÑÝÊåÇ message46=äÙÇã ÊÔÛíá ãÌåæá message47=æÕáÇÊ ãØáæÈÉ áßä ÛíÑ ãÊæÝÑÉ (ÑãÒ HTTP 404 ) message48=ÚäæÇä IP message49=ÎØÇÁ ØáÈ message50=ãÊÕÝÍ ãÌåæá message51=ÑæÈæÊ ãÎÊáÝ message52=ÒíÇÑÇÊ\ÒæÇÑ message53=ÇáÒæÇÑ ÑæÈæÊ\ÓÈÇíÏÑ message54=ãÍáá ãÌÇäí æÝæÑí áÇÍÕÇÆÇÊ ãÊØæÑÉ message55=ãä message56=ÕÝÍÇÊ message57=ØáÈÇÊ message58=ÇÕÏÇÑÇÊ message59=ÇäÙãÉ ÇáÊÔÛíá message60=íÇäÇíÑ message61=ÝÈÑÇíÑ message62=ãÇÑÓ message63=ÇÈÑíá message64=ãÇíæ message65=íæäíæ message66=íæáíæ message67=ÇÛÓØÓ message68=ÓÈÊãÈÑ message69=ÇßÊæÈÑ message70=äæÝãÈÑ message71=ÏíÓãÈÑ message72=ÇáÊÕÝÍ message73=äæÚ ÇáãáÝ message74=ÍÏË ÇáÂä message75=ÇáÓÚÉ message76=ÇáÚæÏÉ ááÕÝÍÉ ÇáÑÇÆíÓíÉ message77=ÃÚáì message78=dd mmm yyyy - HH:MM message79=ãÑÔÍ message80=ßÇãá ÇáÞÇÆãÉ message81=ÇáåæÓÊ message82=ãÚÑæÝ message83=ÑæÈæÊ message84=ÇáÃÍÏ message85=ÇáÃËäíä message86=ÇáËáÇËÇÁ message87=ÇáÃÑÈÚÇÁ message88=ÇáÎãíÓ message89=ÇáÌãÚÉ message90=ÇáÓÈÊ message91=ÃíÇã ÇáÃÓÈæÚ message92=ãä message93=ãÊì message94=ÇáãÓÊÎÏãíä ÇáãÚÑÝæä message95=ÃÞá message96=ãÚÏá message97=ÃßËÑ message98=ÇÎÊÒÇá ÇáÔÈßÉ message99=ÇáÓÚÉ ÇáãæÝÑÉ message100=ÇáÇÎÊÒÇá ãÝÚá message101=äÊÇÆÌ ÇáÇÎÊÒÇá message102=ÇÌãÇáí message103=Ìãá ÈÍË ãÎÊáÝÉ message104=ÏÎæá message105=ÑãÒ message106=ãÚÏá ÇáÍÌã message107=æÕáÇÊ ãä ãÌãæÚÇÊ ÇÎÈÇÑíÉ message108=ß.È message109=ã.È message110=Þ.È message111=ãÎÒä message112=äÚã message113=áÇ message114=ãÚáæãÉ message115=ãæÇÝÞ message116=ÎÑæÌ message117=ãÏÉ ÇáÒíÇÑÇÊ message118=ÃÛáÞ ÇáäÇÝÐÉ message119=ÈÇíÊ message120=ÈÍË ÌãáÉ ÈÍË message121=ÈÍË ßáãÉ ÈÍË message122=ãÍÑßÇÊ ÈÍË ãÍæáÉ ãÎÊáÝÉ message123=ãæÇÞÚ ãÍæáÉ ãÎÊáÝÉ message124=Ìãá ÃÎÑì message125=ÍÇáÇÊ ÊÓÌíá ÏÎæá ÃÎÑì message126=ãÍÑßÇÊ ÈÍË ãÍæáÉ message127=ãæÇÞÚ ãÍæáÉ message128=ÇáÎáÇÕÉ message129=ÇáÞíãÉ ÇáÝÚáíÉ ÛíÑ ãÊæÝÑÉ Ýí ÚÑÖ ÇáÓäÉ message130=ãÕÝæÝÇÊ Þíã ÇáÊÇÑíÎ message131=ÈÑíÏ ÇáãÑÓá message132=ÈÑíÏ ÇáãÓÊÞÈá message133=ÇáãÏÉ ÇáãÐßæÑÉ message134=ÇßËÑ\ÊÓæíÞ message135=ÍÌã ÇáÔÇÔÉ message136=åÌæã ãä ÝíÑæÓ\ææÑã message137=ÇÖÇÝÉ Çáì ÇáãÝÖáÉ (ÊÞÑíÈí) message138=ÇíÇã ÇáÔåÑ message139=ÛíÑ ãÕäÝÉ message140=ãÊÕÝÍ ÈÏÚã ÇáÌÇÝÇ message141=ãÊÕÝÍ ÈÏÚã ÇáãÇíßÑæãíÏíÇ ÏÇíÑßÊÑ message142=ãÊÕÝÍ ÈÏÚã ÇáÝáÇÔ message143=ãÊÕÝÍ ÈÏÚã ÇáÑíá ÈáÇíÑ message144=ãÊÕÝÍ ÈÏÚã Çá ßæíß ÊÇíã message145=ãÊÕÝÍ ÈÏÚã Çá ãíÏíÇ ÈáÇíÑ message146=ãÊÕÝÍ ÈÏÚã Çá PDF message147=ÑãæÒ ÃÎØÇÁ Çá SMTP message148=Ïæá message149=ÈÑíÏ message150=ÍÌã message151=Ãæá message152=ÂÎÑ message153=ãÑÔÍ ÇáÊÞÕíÉ message154=ÇáÑãæÒ ÇáæÇÑÏ ÐßÑåÇ åäÇ ÇÚØÊ ÑÏæÏ HTTP ÛíÑ ãÑÆíÉ ãä ÞÈá ÇáÒÇÆÑ message155=ãÌãæÚÉ message156=ÇáÑæÈæÊÇÊ ÇáæÇÑÏ ÐßÑåÇ åäÇ ÇÚØÊ ÑÏæÏ ÛíÑ ãÑÆíÉ ãä ÞÈá ÇáÒÇÆÑ message157=ÇáÃÑÞÇã ÈÚÏ + åí ØáÈÇÊ ãæÝÞÉ áãáÝ 'robots.txt' message158=ÝíÑæÓÇÊ ÇáÏæÏ ÇáæÇÑÏ ÐßÑåÇ åäÇ ÇÚØÊ ÑÏæÏ ÛíÑ ãÑÆíÉ ãä ÞÈá ÇáÒÇÆÑ message159=ÇáÍÑßÉ ÛíÑ ÇáãÔÇåÏÉ åí ÇáÊí ÇÍÏËÊåÇ ÇáÑæÈæÊÇÊ Çæ ÝíÑæÓÇÊ ÇáÏæÏ Çæ ÑãæÒ ÍÇáÉ Çá HTTP message160=ÇáÍÑßÉ ÇáãÔÇåÏÉ message161=ÇáÍÑßÉ ÛíÑ ÇáãÔÇåÏÉ message162=ÇáÇÌãÇáí ÇáÔåÑí message163=ÝíÑæÓÇÊ ÇáÏæÏ message164=ÝíÑæÓÇÊ ÏæÏ ãÎÊáÝÉ lang/awstats-pt.txt000064400000011420152532065620010341 0ustar00# Portuguese message file # $Revision: 1.10 $ - $Date: 2004/03/21 17:04:04 $ message0=Desconhecido message1=Desconhecido (ip não resolvido) message2=Outros visitantes message3=Ver detalhes message4=Dia message5=Mês message6=Ano message7=Estatísticas de message8=Primeira visita message9=Última visita message10=Numero de visitas message11=Visitantes únicos message12=Visita message13=Palavra chave message14=Pesquisa message15=Percentagem message16=Tráfego message17=Domínios/Países message18=Visitantes message19=Páginas/URL message20=Horas message21=Visualizadores message22=Erros HTTP message23=Referencias message24=Busca Palavras message25=Visitas domínios/países message26=hosts message27=páginas message28=paginas diferentes message29=Acesso message30=Outras palavras message31=Páginas não encontradas message32=Erros HTTP message33=Versões Netscape message34=Versões MS Internet Explorer message35=Ultima Actualização message36=Ligado a partir de message37=Origem message38=Endereço directo / Favoritos message39=Origem desconhecida message40=Ligações de um motor de busca message41=Ligações de páginas externas (outros que não motores de busca) message42=Ligações de páginas internas (páginas no mesmo site) message43=Frases usadas em motores de busca message44=Palavras usadas em motores de busca message45=Endereço IP não resolvido message46=SO Desconhecido (Campo Referer) message47=URLs solicitadas e não encontradas (HTTP code 404) message48=Endereço IP message49=Erro Hits message50=Browsers Desconhecidos (Campo Referer) message51=Motores visitantes message52=visitas/visitante message53=Motores/Spiders message54=Ferramenta de Análise de ficheiros de log em realtime para estatísticas avançadas message55=de message56=Páginas message57=Hits message58=Versões message59=SO message60=Jan message61=Fev message62=Mar message63=Abr message64=Mai message65=Jun message66=Jul message67=Ago message68=Set message69=Out message70=Nov message71=Dez message72=Navegação message73=Tipos de Arquivos message74=Actualizar message75=Bytes message76=Retorna à página inicial message77=Top message78=dd mmm yyyy - HH:MM message79=Filtro message80=Lista completa message81=Hosts message82=Conhecido(a)(s) message83=Robôs message84=Dom message85=Seg message86=Ter message87=Qua message88=Qui message89=Sex message90=Sab message91=Dias da semana message92=Quem message93=Quando message94=Utilizadores autenticados message95=Min message96=Med message97=Max message98=Compressão Web message99=Banda economizada message100=Antes da compressão message101=Depois da compressão message102=Total message103=palavras-chave(s) diferente(s) message104=Páginas de entrada message105=Código message106=Dimensão média message107=Ligações de um NewsGroup message108=KB message109=MB message110=GB message111=Grabber message112=Sim message113=Não message114=Info. message115=OK message116=Sair message117=Duração da visita message118=Fechar janela message119=Bytes message120=Frases de busca message121=Palavras de busca message122=Referenciados por diferentss motores de busca message123=Referenciados por diferentes páginas message124=Outras frases message125=Outros logins (e/ou utilizadores anónimos) message126=Motores de busca referenciadores message127=Páginas referenciadoras message128=Resumo message129=Valor exacto não disponível em vista 'Ano' message130=Lista de valores message131=Sender EMail message132=Receiver EMail message133=Período considerado message134=Extra/Marketing message135=Tamanhos de ecrã message136=Ataques de Worm/Virus message137=Adicionar a favoritos (estimado) message138=Dias do mês message139=Diversos message140=Browsers com suporte Java message141=Browsers com suporte Macromedia Director message142=Browsers com suporte Flash message143=Browsers com suporte para audio Real message144=Browsers com suporte para audio Quicktime message145=Browsers com suporte para audio Windows Media message146=Browsers com suporte para PDF message147=Códigos de erro SMTP message148=Países message149=Correios message150=Tamanho message151=Primeiro message152=Último message153=Filtro de exclusão message154=Códigos mostrados aqui deram 'hits' ou tráfego "não visto" pelos visitantes, por isso não serão incluidos em outros gráficos. message155=Cluster message156=Robots mostrados aqui deram 'hits' ou tráfego "não visto" pelos visitantes, por isso não serão incluidos em outros gráficos. message157=Valores após + são 'hits' directos em ficheiros "robots.txt". message158=Worms mostrados aqui deram 'hits' ou tráfego "não visto" pelos visitantes, por isso não serão incluidos em outros gráficos. message159=Tráfego "não visto" é tráfego gerado por robots, worms ou respostas a códigos de status HTTP especiais. message160=Tráfego visualizado message161=Tráfego não visualizado message162=Histórico mensal message163=Worms message164=Worms diferentes lang/tooltips_w/awstats-tt-ua.txt000064400000014563152532065620013166 0ustar00
    Íîâèé âiçèò çàðàõîâóºòüñÿ òîäi, êîëè ç'ÿâëÿºòüñÿ (çàâàíòàæóº iïåðåãëÿäຠñòîðiíêè) íîâèé âiäâiäóâà÷ ç õîñòà, ç ÿêîãî íiõòî íå ç'ºäíóâàâñÿ ç ñåðâåðîì ïðîòÿãîì îñòàííiõ ".(#VisitTimeOut#)." õâ.
    Êiëüêiñòü êëiºíòñüêèõ õîñòiâ (IP-àäðåñ), ç ÿêèõ çäiéñíþâàëèñü âiäâiäóâàííÿ ñàéòó i ÿêèìè áóëî îòðèìàíî ïðèíàéìíi îäíó ñòîðiíêó.
    Öi äàíi âiäîáðàæàþòü, ñêiëüêè ðiçíèõ ëþäåé çàâiòàëî íà ñàéò ïðîòÿãîì îäíîãî äíÿ.
    Öå ÷èñëî ïîçíà÷ຠçàãàëüíó êiëüêiñòü ïåðåãëÿäiâ âñiõ ñòîðiíîê ñàéòó âñiìà âiäâiäóâà÷àìè ïiä ÷àñ óñiõ âiçèòiâ.
    Öi äàíi âiäðiçíÿþòüñÿ âiä êiëüêîñòi "ïîïàäàíü" òèì, ùî ðàõóþòüñÿ òiëüêè HTML-ñòîðiíêè, à ðåøòà ôàéëiâ, â ò.÷. çîáðàæåííÿ, iãíîðóºòüñÿ.
    Êiëüêiñòü âèïàäêiâ, êîëè ñòîðiíêà, çîáðàæåííÿ, ÷è ÿêèéñü iíøèé ôàéë äàíîãî ñàéòó ïåðåãëÿäàºòüñÿ àáî ïðîñòî çàâàíòàæóºòüñÿ êèìîñü.
    Öi äàíi ìàþòü ÷èñòî ïiçíàâàëüíó öiííiñòü ùîäî ðîáîòè ñåðâåðà, áî êiëüêiñòü ïåðåãëÿäiâ ñòîðiíîê º íàáàãàòî iëþñòðàòèâíiøîþ ùîäî ëþäñüêî¿ àóäèòîði¿.
    Öå ñóìàðíèé îá'ºì äàíèõ, ïåðåäàíèõ ñåðâåðîì âiäâiäóâà÷àì ïðè çàâàíòàæåííi íèìè ñòîðiíîê, çîáðàæåíü òà iíøèõ ôàéëiâ. Âèìiðþºòüñÿ â êiëîáàéòàõ (êÁ), ìåãàáàéòàõ (ÌÁ), ãiãàáàéòàõ (ÃÁ).
    #PROG# âèðiçíÿº êîæåí äîñòóï äî ñàéòó ïiñëÿ ïîøóêó ç äîïîìîãîþ #SearchEnginesArray# íàéáiëüø ïîïóëÿðíèõ ïîøóêîâèõ ñèñòåì i êàòàëîãiâ (òàêèõ ÿê Altavista, Lycos, Google, Voila, AllTheWeb, òà ií.).
    Ñïèñîê çîâíiøíiõ ñòîðiíîê, ïîñèëàííÿ ç ÿêèõ áóëè âèêîðèñòàíi äëÿ çàõîäó íà ñàéò. (Ïîêàçàíî ëèøå #MaxNbOfRefererShown# çîâíiøíiõ ñòîðiíîê, ç ÿêèõ áóëî íàéáiëüøå âiäâiäóâà÷iâ).
    Ïîñèëàííÿ ç ðåçóëüòàòiâ ïîøóêîâèõ ìàøèí òóò íå âðàõîâàíi, áî âîíè âæå âêëþ÷åíi äî ïîïåðåäíüî¿ ñåêöi¿ äàíî¿ òàáëèöi.
     öié òàáëèöi ïîêàçàíî ñïèñîê íàé÷àñòiøå âèêîðèñòîâóâàíèõ êëþ÷îâèõ ñëiâ àáî ôðàç, çà ÿêèìè âiäâiäóâà÷i çíàõîäèëè äàíèé ñàéò â ïîøóêîâèõ ñèñòåìàõ i êàòàëîãàõ. ( #PROG# ðîçïiçíàþòüñÿ êëþ÷îâi ñëîâà ç #SearchEnginesArray# íàéáiëüø ïîïóëÿðíèõ ïîøóêîâèõ ñèñòåì i êàòàëîãiâ, òàêèõ ÿê Altavista, Lycos, Google, Voila, i ò.ä.). Çàãàëüíà êiëüêiñòü êëþ÷îâèõ ñëiâ ìîæå áóòè áiëüøîþ çàãàëüíî¿ êiëüêîñòi ôðàç (äiéñíî¿ êiëüêîñòi çäiéñíåíèõ ïîøóêîâèõ îïåðàöié), áî êîæíå êëþ÷îâå ñëîâî, âèêîðèñòàíå â ïîøóêó, ðàõóºòüñÿ îêðåìî.
    Ðîáîòè (ÿêèõ ùå ÷àñòî íàçèâàþòü ïàâóêàìè) — öå àâòîìàòè÷íi êîìï'þòåðíi "âiäâiäóâà÷i", ÿêi âèêîðèñòîâóþòüñÿ áàãàòüìà ïîøóêîâèìè ìåõàíiçìàìè äëÿ ñêàíóâàííÿ ñàéòó ç ìåòîþ
    1. iíäåêñóâàííÿ i êëàñèôiêàöi¿ éîãî âìiñòó
    2. çáèðàííÿ ñòàòèñòèêè (ïî äàíîìó ñàéòó ÷è ÿêî¿ñü çàãàëüíî¿)
    3. âèçíà÷åííÿ, ÷è ñàéò [âñå ùå] àêòèâíèé
     ïîòî÷íié âåðñi¿ #PROG# âìiº ðîçïiçíàâàòè #RobotArray# ðîáîòiâ.
    Âñÿ ñòàòèñòèêà, ïîâ'ÿçàíà ç ÷àñîì, áàçóºòüñÿ íà ÷àñîâi, âñòàíîâëåíîìó íà ñåðâåði.
    Òóò ïîêàçóþòüñÿ ñåðåäíi çíà÷åííÿ (ðîçðàõîâàíi çà âñiìà äàíèìè, íàêîïè÷åíèìè ìiæ ïåðøèì i îñòàííiì âiçèòàìè, ùî âiäáóëèñÿ ïðîòÿãîì ïåðiîäó)
    Òóò ïîêàçóþòüñÿ ñóêóïíi çíà÷åííÿ (ðîçðàõîâàíi çà âñiìà äàíèìè, íàêîïè÷åíèìè ìiæ ïåðøèì i îñòàííiì âiçèòàìè, ùî âiäáóëèñÿ ïðîòÿãîì ïåðiîäó)
    Äåÿêi òðèâàëîñòi âiçèòiâ º 'íåâiäîìèìè', áî íå çàâæäè ìîæëèâî ¿õ âèðàõóâàòè. Îñíîâíi ïðè÷èíè öüîãî:
    - Âiçèò íå áóâ çàêií÷åíèé, êîëè âiäáóâàëîñü îíîâëåííÿ ñòàòèñòèêè.
    - Âiçèò ðîçïî÷àâñÿ â îñòàííþ ãîäèíó (ïiñëÿ 23:00) îñòàííüîãî äíÿ ìiñÿöÿ (×åðåç òåõíi÷íi ïðè÷èíè #PROG# íå ìîæå îá÷èñëþâàòè òðèâàëiñòü òàêèõ ñåñié).
    Äëÿ öiº¿ ïîìèëêè íåìຠîïèñàííÿ.
    Ñåðâåð çðîçóìiâ çàïèò, àëå âèêîíຠéîãî ïiçíiøå.
    Ñåðâåð îáðîáèâ çàïèò, àëå äîêóìåíò äëÿ âiäïðàâêè âiäñóòíié.
    ×àñòêîâèé âìiñò.
    Äîêóìåíò, ùî çàïèòóâàâñÿ, áóëî ïåðåìiùåíî i çàðàç çíàõîäèòüñÿ çà iíøîþ àäðåñîþ, ÿêà ïåðåäàºòüñÿ ó âiäïîâiäi.
    Äëÿ öiº¿ ïîìèëêè íåìຠîïèñàííÿ.
    Ñèíòàêñè÷íà ïîìèëêà, ñåðâåð íå çðîçóìiâ çàïèò.
    Ñïðîáà çàâàíòàæèòè URL, ÿêèé ïîòðåáóº iì'ÿ êîðèñòóâà÷à i ïàðîëü äëÿ äîñòóïó.
    Âåëèêà êiëüêiñòü òàêèõ ïîìèëîê ìîæå îçíà÷àòè, ùî õòîñü (íàïðèêëàä, õàêåð) íàìàãàºòüñÿ ïðîðâàòèñü äî çàõèùåíî¿ ÷àñòèíè ñàéòó øëÿõîì ïiäáîðó ïàðîëiâ.
    Ñïðîáà çàâàíòàæèòè URL, ÿêèé º íåäîñòóïíèì, íàâiòü çà íàÿíîñòi iìåíè êîðèñòóâà÷à i ïàðîëÿ äëÿ äîñòóïó.
    (Íàïðèêëàä, URL â ìåæàõ êàòàëîãó, íå ïðèçíà÷åíîãî äëÿ ïåðåãëÿäó ÷åðåç Internet.).
    Ñïðîáà äîñòóïó äî íåiñíóþ÷îãî ðåñóðñó. Öÿ ïîìèëêà ÷àñòî îçíà÷àº, ùî äåñü íà ñòîðiíêàõ äàíîãî ñàéòó àáî iíøèõ ñàéòiâ º ïîìèëêîâi ïîñèëàííÿ, àáî âiäâiäóâà÷ ïîìèëèâñÿ ïðè ââåäåííi URL.
    Ñåðâåð âèòðàòèâ çàáàãàòî ÷àñó äëÿ âiäïîâiäi íà çàïèò. Öÿ ïîìèëêà ÷àñòî º íàñëiäêîì çàíàäòî ïîâiëüíîãî CGI-ïðîãðàìè, ÿêó ñåðâåð áóâ çìóøåíèé çíèùèòè àáî ñàì ñåðâåð íàäìiðó ïåðåâàíòàæåíèé.
    Âíóòðiøíÿ ïîìèëêà. Öÿ ïîìèëêà âèäàºòüñÿ ïðè ïîìèëêîâîìó çàâåðøåííi CGI-ïðîãðàìè.
    Âèìàãàºòüñÿ íåâiäîìà äiÿ.
    Êîä, ïîâåðíåíèé HTTP-ñåðâåðîì, ÿêèé ïðàöþº â ÿêîñòi øëþçó, êîëè ðåàëüíèé ñåðâåð ïðèçíà÷åííÿ íå äຠóñïiøíî¿ âiäïîâiäi íà çàïèòè êëiºíòà.
    Âíóòðiøíÿ ïîìèëêà ñåðâåðà.
    Òàéì-àóò øëþçó.
    Âåðñiÿ HTTP íå ïiäòðèìóºòüñÿ.
    lang/tooltips_w/awstats-tt-al.txt000064400000013450152532065620013147 0ustar00
    Vizita është përkufizuar si vizitor risi (Shfletimin apo Shiqimin e faqes) të cilët nuk e kan vizituar faqen që nga #VisitTimeOut# min.
    Numri i klientëve strehues (IP adresa) të cilët erdhën ta vizitojnë faqen (dhe që shfletuan se paku një faqe).
    Këto t'dhëna tregojnë numrin e personave të ndryshëm fizikë të cilët arritën faqen në çdo ditë.
    Hera e faqeve që është shiquar (Shuma e të gjitha vizitave).
    Kjo pjes e t'dhënave ndryshon nga "Hyrjet" në atë mënyr i numron vetëm faqet HTML kundër atyre për figur dhe të tjera.
    Hera e faqes, figurës, vargut që është shiquar ose shkarkuar nga dikush.
    Këto t'dhëna janë ofruar vetëm si referencë, pasi që numri i shiqimeve "Faqe" është menduar për qëllime tregtie.
    Kjo informatë trtegon sasinë e t'dhënave shkarkuar nga të gjitha faqet, figurat dhe vargjet mbrenda një Faqësie.
    Njesitë janë në KB, MB ose GB (KiloBajt, MegaBajta or GigaBajta)
    #PROG# e njeh çdo lidhje në faqe search nga #SearchEnginesArray# Makinat Kërkuese në Internet më të popullarizuara si dhe Tregues (si Yahoo, Altavista, Lycos, Google, Voila, etj...).
    Lista e të gjitha faqeve jashta faqës që nyjëzuan (dhe hyrje) te faqja e juaj (Vetëm #MaxNbOfRefererShown# faqe më të shpeshta). Nyjet që janë përdor nga rezultatet e makinave kërkuese janë përjashtu këtu sepse ato përfshi në rreshtat e tabelave.
    Kjo tabelë tregon kryefrazat dhe kryefjalitë më të shpeshta që janë përdorur ta gjejnë faqen tënde nga Makinat Kërkuese dhe tregues në Internet. (kryefjalë nga #SearchEnginesArray# Makinat Kërkuese dhe Treguest më të popullarizuar janë njohur nga #PROG#, si Yahoo, Altavista, Lycos, Google, Voila, etj...).
    Vështri se shuma e kryefalive mund të jet më i madh se sa shume për kryefraza (numri real i kërkesave) sepse ndoshta dy fjali janë përdor në të njejtin Kërkues, kërkuese është numruar dy herë për fjali (një herë për çdo fjalë).
    Robotat (rrallë emruar si Marimanga) janë vizita automatike kompjuterike përdorur nga shumë Makina Kërkuese që e Shiqon faqen tënga për tregues dhe radhitje, grumbullon statistika në Faqet e Internetit dhe/ose shiqon nëse faqja e juajështë ende në linje.
    #PROG# Ka mundësi që t'i njohë #RobotArray# robota.
    Të gjitha vizitat janë bazuar nga koha reale e Shërbyesit.
    Këtu, t'dhënat e raportuara janë: valutat mesatare (llogaritur nga t'dhëant ndërmjet vizites së parë dhe të fundit)
    Këtu, t'dhënat e raportuara janë: Shuma grumbulluese (llogaritur nga t'dhëant ndërmjet vizites së parë dhe të fundit)
    Disa zgjatje të vizitave janë 'panjohur' sepse gjithmonë ato nuk mund të llogariten. Kjo është arsya kryesore për këtë:
    - vizita nuk ishte përfundur kur 'freskimi' ndodhi.
    - vizita filloi në orën e fundit (pas 23:00) te fundi i ditës së muajit (Një arsye teknike parandalon #PROG# për llogaritjen e një zgjatje të një mbledhje të tillë)
    Nuk ka përshkrim për këtë gabim.
    Kërkesa është kuptuar nga shërbyesi por do të kryesohet më vonë.
    Shërbyesi ka kryesuar mirpo atje nuk ka dokument për ta dërguar.
    Përmbajtje gjysore.
    Dokumenti i kërkuar ishte larguar dhe tani një adres tjetër është përgjigj.
    Nuk ka përshkrim për këtë gabim.
    Gabim sintaksor, shërbyesi nuk e ka kuptuar kërkesen.
    Provoi që ta arrij një URL ku një hyrje/parullë është nevojitur.
    Numri i madh në këtë gjë d.m.th. se (si psh. Grepi) është duke provuar që ta then, ose për të hyr në faqen tënde të siguruar (si shembull, duke shpresuar se duke provu parulla të ndryshme mund të hynë në hapsiren e siguruar).
    Provoi që ta arrij një URL pa trajtur për arritje, edhe me parullë (për shembull, një URL mbrenda Treguesit jo e përkufizuar si "shfletuese".).
    Provoi që ta arrij një URL joekzistuese. Ky gabim shpesh dmth një nyje pavlerë diku në faqen tënde ekziston ose vizitori e ka gabuar një URL të caktuar.
    Shërbyesi shfrytëzoi shumë kohë ti përgjigjet kërkesës. Ky gabim shpesh përfshin skriptat (CGI, PHP) e ngadalshëm që shërbyesi është detyru që ta zhduk Faqe shërbyesin jashtëzakonisht të dyndur.
    Gabim i mbrendshëm. Ky gabim shpesh shkaktohet nga një program CGI që përfundoi parregull (psh trajtim i keq).
    Kërkes e panjohur.
    Kodi i kthyer nga një shërbyes HTTP që punon si portë prokurie kur realisht, shërbyesi shenjuar nuk përgjigjet sukseshëm te kërkesat e klientëve.
    Gabim mbrenda shërbyesit.
    Parta tejkaloi kohën.
    Botimi i HTTP Nuk është i Përkrahur
    lang/tooltips_w/awstats-tt-tw.txt000064400000004623152532065620013207 0ustar00
    ¦¹Äæ¦ì¬°°ÑÆ[ºô¯¸ªºÁ`¦¸¼Æ¡A±q¬Û¦P¦ì§}¨ÓÂsø°¥»ºô¯¸¡A®É¶¡¶¡¹j¶·¦Ü¤Ö#VisitTimeOut#¤ÀÄÁ¤~·|¦A°O¿ý¤@¦¸¡C
    ¦¹Äæ¦ì¬°°ÑÆ[ºô¯¸ªº¤H¼Æ¡C¥H±q¤£¦Pªº¹q¸£ÂsÄý¥»ºô¯¸ªº­Ó¼Æ¨Ó­pºâºô¯¸ªº¤H¼Æ¡C
    ¦¹Äæ¦ì¬°ºô­¶Åª¨úªºÁ`¦¸¼Æ¡C¥u°O¿ýºô­¶(.html)ªº­Ó¼Æ¡C
    ¦¹Äæ¦ì¬°ºô­¶¤º®eŪ¨úªºÁ`¦¸¼Æ¡A¥]§tºô­¶ÀÉ¡A¹Ï¤ùÀÉ¡A¼v¹³Àɵ¥¡C
    ¦¹Äæ¦ì¬°ºô­¶¤º®eŪ¨úªºÁ`®e¶q¤j¤p¡A¥]§tºô­¶ÀÉ¡A¹Ï¤ùÀÉ¡A¼v¹³Àɵ¥¡C
    ¦¹Äæ¦ì¬°°O¿ý¨Ï¥ÎªÌ±q¨º¨Ç·j´Mºô¯¸¶i¤J¦¹ºô¯¸¡C¨t²Î·|¦Û°Ê¤ÀªR³Ì±`¨Ï¥Îªº#SearchEnginesArray#ªº·j´Mºô¯¸¡C
    Åã¥Ü¨ä¥¦ºô¯¸ªººô­¶¦³¨ä¤º®e³sµ²¦Ü¥»¯¸ªººô­¶¦Cªí¡C ¨t²Î·|¦C¥X¸û±`³sµ²ªº«e#MaxNbOfRefererShown#­Óºô­¶ºô§}¡C
    ³o­Óªí®æÅã¥Ü¨Ï¥ÎªÌ¦b·j´Mºô¯¸¤¤¸û±`¨Ï¥ÎªºÃöÁä¦r¨Óµn¤Jºô¯¸¡C¨t²Î·|°O¿ý³Ì±`¨Ï¥Îªº#SearchEnginesArray#­Ó·j´Mºô¯¸ÃöÁä¦r¡C
    ·j´Mºô¯¸ªºº©¹C¾¹(Robots)·|¦Û°Êªº§ä´Mºô¯¸¤ºªº©Ò¦³¤º®e¡C
    ¦¹Äæ¦ì°O¿ý¸û±`¨Ï¥Îªº#RobotArray#­Óº©´å¾¹§ä´Mºô¯¸ªº°O¿ý¡C
    ¨S¦³Ãö©ó³o¶µ¿ù»~½Xªº´y­z
    ºô­¶¦øªA¾¹¤£¤F¸Ñ¨Ï¥ÎªÌªº»Ý¨D
    ºô­¶¦øªA¾¹¥|³B²z§¹¨Ï¥ÎªÌªº»Ý¨D¡A¦ý¬O«o¨S¦³¤å¥ó¶Ç°e¥X
    ºô­¶¤º®eŪ¨ú¤£§¹¥þ
    §ä´Mªººô­¶¤w¸g²¾¨ì¨ä¥¦¦a¤è¡A¦Ó¥B¥H¤w¸g§ä´M¨ì¤F
    ºô­¶­ì¥ý§ä¤£¨ì¡A²{¦b¤w¸g¦b§Oªº¦a¤è§ä¨ì¤F
    »yªk¿ù»~¡Aºô­¶¦øªA¾¹¤£¤F¸Ñ¨Ï¥ÎªÌªº»Ý¨D
    ¹Á¸Õ³sµ²¦Ü»Ý¿é¤J±K½Xªººô­¶ºô§}¦Óµo¥Í¿ù»~
    ¹Á¸Õ³sµ²¦Ü¥¼¶}©ñÂsÄýªººô­¶ºô§}¦Óµo¥Í¿ù»~
    ¹Á¸Õ³sµ²¦Ü¤£¦s¦bªººô­¶ºô§}¦Óµo¥Í¿ù»~
    ºô­¶¦øªA¾¹ªá¶O¤Ó¦h®É¶¡³B²z³o­Ó»Ý¨D
    ¤º³¡¦øªA¾¹µo¥Í¿ù»~¡A¤@¯ë¬O CGI µ{¦¡µo¥Í°ÝÃD
    ¤£¤F¸Ñ»Ý¨D
    ºô­¶¦øªA¾¹¦] proxy ¦Ó¥¼¯à¦^À³¯u¥¿¨Ï¥ÎªÌªº»Ý¨D
    ¤º³¡¦øªA¾¹µo¥Í¿ù»~
    ³q°T¹h¹O®É
    ³o­Ó HTTP ªºª©¥»¨S¦³¤ä´©
    lang/tooltips_w/.DS_Store000064400000014004152532065620011360 0ustar00Bud1eslg1Scomp_noteslg1Scomp ú_notesmoDDdutcÏ ^_notesmodDdutcÏ ^_notesph1Scomp  @€ @€ @€ @ EDSDB `€ @€ @€ @lang/tooltips_w/awstats-tt-it.txt000064400000015444152532065620013174 0ustar00
    Per nuova visita si intende ogni nuovo visitatore che visualizza o consulta una pagina e non si è connesso al sito negli ultimi #VisitTimeOut# minuti.
    Numero di client host (indirizzi IP) che hanno visitato il sito (e visualizzato almeno una pagina).
    Questa cifra riflette il numero di persone fisiche diverse che si sono collegate al sito.
    Numero di volte in cui una pagina del sito è stata visualizzata (somma di tutti i visitatori, per tutte le visite).
    Questo valore è diverso dagli "accessi" perchè considera solamente le pagine HTML e non le immagini o gli altri elementi.
    Numero di volte in cui una pagina, una immagine o un elemento è stato visualizzato o scaricato da qualcuno.
    Questo valore viene fornito solo per completezza in quanto il numero delle "pagine" visualizzate spesso è preferibile ai fini commerciali.
    Questo valore indica la quantità di dati scaricati per tutte le pagine, le immagini e i file presenti sul sito.
    Le unità di misura sono espresse in KB, MB o GB (KiloByte, MegaByte o GigaByte)
    #PROG# è in grado di riconoscere gli accessi al sito provenienti dalle ricerche sui #SearchEnginesArray# motori di ricerca più famosi (come Yahoo, Altavista, Lycos, Google, Voila, ecc.).
    Elenco delle pagine di siti esterni contenenti un link che è stato seguito per accedere a questo sito (solo le #MaxNbOfRefererShown# pagine esterne più utilizzate sono visualizzate). I link presenti nelle pagine dei motori di ricerca sono esclusi in quanto già conteggiati nel riquadro soprastante.
    Questa tabella offre l'elenco delle parole o frasi chiave utilizzate più spesso per trovare il sito sui motori di ricerca. (#PROG# è in grado di riconoscere le ricerche sui #SearchEnginesArray# motori di ricerca più famosi come Yahoo, Altavista, Lycos, Google, Voila, ecc.).
    Notare che il totale delle ricerche sulle parole chiave potrebbe essere maggiore di quello sulle frasi chiave (il numero reale di ricerche) perchè quando 2 parole chiavi sono presenti sulla stessa ricerca questa viene conteggiata due volte (una per ciascuna parola).
    I robot (noti anche col nome di spider) sono dei visitatori automatici utilizzati da molti motori di ricerca per analizzare il sito al fine di indicizzarlo, generare statistiche sui siti Web in Internet e/o verificare che sia ancora in linea.
    #PROG# è in grado di riconoscere #RobotArray# robot.
    Gli orari visualizzati sono basati sul fuso orario del server.
    I dati qui riportati sono valori medi (calcolati su tutti i dati tra la prima e l'ultima visita nel periodo di tempo analizzato)
    I dati qui riportati sono somme cumulative (calcolate su tutti i dati tra la prima e l'ultima visita nel periodo di tempo analizzato)
    Alcune Durate delle visite sono 'sconosciute' perchè non possono essere sempre calcolate. Questi sono i casi più ricorrenti:
    - La visita non era ancora conclusa quando sono state aggiornate (funzione 'update') le statistiche.
    - La visita è iniziata durante l'ultima ora (dopo le 23:00) dell'ultimo giorno del mese (Una ragione tecnica impedisce ad #PROG# di calcolare la durata di queste sessioni)
    I Worm sono dei visitatori automatici provenienti da server esterni, infettati da un virus, che provano ad effettuare particolari visite al server del sito al fine di infettarlo. In molti casi questi worm sfruttano i bug di alcuni server non aggiornati o di tipo commerciale. Se il vostro server non è l'obiettivo sensibile del worm potete tranquillamente ignorare queste visite.
    Ci sono pochissimi 'server worm' al mondo ma questi talvolta dimostrano di essere veramente efficaci. #PROG# è in grado di riconoscere #WormsArray# firme di worm noti (nimda, code red, ecc.).
    Nessuna descrizione per questo errore.
    Il server ha processato la richiesta ma verrà eseguita più tardi.
    Il server ha processato la richiesta ma non ci sono documenti da visualizzare.
    Contenuto parziale.
    Il documento richiesto è stato spostato e si trova al momento ad un altro indirizzo, indicato nella risposta.
    Nessuna descrizione per questo errore.
    Errore di sintassi, il server non ha compreso la richiesta.
    Tentativo di accesso a un URL che richiede un'autenticazione tramite login e password.
    Un numero troppo elevato può significare che qualcuno (es. un hacker) sta cercando di forzare l'accesso al sito (ad esempio provando diverse combinazioni di login e password).
    Tentativo di accesso a un URL non configurato per essere accessibile, neppure tramite autenticazione (ad esempio l'URL di una cartella il cui contenuto non può essere sfogliato).
    Tentativo di accesso a un URL inesistente. Si tratta di un link non valido sul sito o di un errore di battitura del visitatore che ha indicato un URL non corretto.
    Il server ha impiegato troppo tempo per rispondere alla richiesta. Può trattarsi di uno script CGI troppo lento obbligato ad abbandonare la richiesta oppure di un timeout dato dalla saturazione del sito.
    Errore interno del server. Questo errore è quello restituito più di frequente durante la terminazione anormale di uno script CGI (per esempio a seguito di un coredump).
    Azione richiesta di tipo sconosciuto.
    Codice ritornato da un server HTTP che funge da proxy o da gateway quando il vero server destinatario non risponde alla richiesta del client.
    Errore interno del server.
    Time-out del gateway.
    Versione HTTP non supportata.
    lang/tooltips_w/awstats-tt-tr.txt000064400000010001152532065620013165 0ustar00
    Yeni ziyaretçi, geçmiþ #VisitTimeOut# dakika içinde sitenize baðlanmamýþ ve o anda sitenize bakan kullanýcýdýr.
    Sitenizi ziyaret eden ve en az bir sayfa gören bilgisayar (IP adresi) sayýsý. Bu sayý sitenizi bir gün içinde ziyaret eden farklý kiþileri temsil eder.
    Sitedeki bir sayfanýn kaç kere görüldüðü (Tüm ziyaretçilerin tüm ziyatlerinin toplamý). Bu sayý "hits" sayýsýndan farklýdýr: sadece HTML dosyalarý sayýlýr, resim ve diðer dosyalar sayýlmaz.
    Sitedeki sayfa, resim, ve dosyalarýn biri tarafýndan kaç kere indirlmiþ veya görülmüþ olmasý. Bu bilgi kaynak olarak verilmiþtir. Genelde pazarlama alanýnda görüntülenen sayfa sayýsý tercih edilir.
    Bu sayý sitenizden tüm resimler, sayfalar ve dosyalar dahil indirilen toplam bilgi miktarýný belirtir.
    #PROG# sitenize en popüler #SearchEnginesArray# Ýnternet dizini ve arama motorundan gelen eriþimleri anlar.
    Sitenize baðlantý veren (ve giriþ yapmak için kullanýlan) dýþ sayfalar (Sadece en çok kullanýlan #MaxNbOfRefererShown# dýþ sayfa gösterilmiþtir.) Arama motorlarý tarafýndan kullanýlan arama sonuçlarý bu listeye dahil deð idir, çünkü bu tabloda bir üst satýrda bu bilgi verilmiþtir.
    Bu tablo sitenizi Ýnternet dizinlerinden ve arama motorlarýndan bulmak için en çok kullanýlan anahtar sözcükleri gösterir. (#PROG# en popüler #SearchEnginesArray# Ýnternet dizini ve arama motorundan kullanýlan anahtar sözcükleri gösterir.
    Robotlar (basþka bir deyiþle Örümcekler) sitenizi (1) dizinlemek ve sýralamak, (2) istatistik toplamak, ve/veya (3) sitenizin iþler durumda olduðunu kontol etmek amacýyla tarayan otomatik bilgisayar programlarýdýr. #PROG# #RobotArray#adet robotu tanýr.
    Bu hatanýn açýklamasý yok.
    Sunucu isteðinizi anladý fakat daha sonra iþlem görecek.
    Sunucu isteðinizi yerine getirdi fakat yollanacak dosya yok.
    Kýsmi içerik.
    Ýstenilen belge cevapta verilen baþka bir adrese taþýnmýþtýr.
    Bu hatanýn açýklamasý yok.
    Sözdizimi hatasý, sunucu isteðinizi anlamadý.
    Kulannýcý adý ve þifre gerektiren bir URLe ulaþýldý.
    Burada yüksek bir sayý bir korsanýn sitenize girmeye çalýþtýðýný belirtebilir.
    Þifre kullanarak bile ulaþýlmasý yasaklanmýþ bir URL (örneðýn, "bakýlabilir" olarak tanýnlanmamýþ bir klasör.).
    Varolmayan bir URLLe ulaþmaya çalýþýldý. Bu hata genellikle sitenizin bir yerinde geçersiz bir baðlantýý olduðunu veya ziyaretçinin URLi yanlýþ yazmasýndan kaynaklanýr.
    Sunucu iþleme cevap vermek için çok fazla zaman harcadý. Bu genellikle yavaþ bir CGI programýnýn kalabalýk bir veb sunucusunda durdurulmasýndan kaynaklanýr.
    Dahiki hata. Bu hata genellikle bir CGI programýnýn beklenmeyen bir þekilde sonuþlanmasý (çekirdek bellek dökümü) ile oluþur.
    Ýstenilen iþlem bilinmiyor.
    Ulaþýlmaya çalýþýlan sunucu cevap vermeyince að geçidi olarak iþleyen bir HTTP sunucunun belirttiði hata.
    Dahili sunucu hatasý.
    Að geçidi zaman aþýmý.
    HTTPnin bu sürümü desteklenmiyor.
    lang/tooltips_w/awstats-tt-pl.txt000064400000012520152532065620013163 0ustar00
    Wizyty ka¿dego nowego go¶cia, który ogl±da³ stronê i nie ³±czy³ siê z ni± przez ostatnie #VisitTimeOut# mn.
    Adres numeryczny hosta klienta (tzw. adres IP) odwiedzaj±cego tê stronê.
    Ten numer mo¿e byæ identyczny dla kilku ró¿nych Internautów którzy odwiedzili stronê tego samego dnia.
    ¦rednia liczba obejrzanych stron przypadaj±ca na jednego Internautê. (Suma go¶ci, wszystkich wizyt).
    Ten licznik ró¿ni siê od kolumny z prawej, gdy¿ zlicza on tylko strony html (bez obrazków i innych plików).
    Liczba wszystkich stron, obrazków, d¼wiêków, plików, które zosta³y obejrzane lub ¶ci±gniête przez kogo¶.
    Warto¶æ jest jedynie orientacyjna, zaleca siê spogl±daæ na licznik "strony".
    Liczba kilobajtów ¶ci±gniêtych przez Internautów.
    Jest to suma wszystkich ¶ci±gniêtych danych (strony html, obrazki, d¼wiêki).
    #PROG# rozró¿nia dostêp do stron z zagranicznych wyszukiwarek dziêki #SearchEnginesArray# najpopularniejszym przegl±darkom internetowym (Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Lista wszystkich stron spoza serwera z których trafiono na ten serwer (wy¶wietlanych jest #MaxNbOfRefererShown# stron z których najczê¶ciej siê odwo³ywano.
    Ta kolumna pokazuje listê najczê¶ciej u¿ywanych s³ów kluczowych, dziêki którym znaleziono t± stronê w wyszukiwarkach. (#PROG# rozró¿nia zapytania s³ów kluczowych z #SearchEnginesArray# najpopularniejszych wyszukiwarek, takich jak Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Roboty s± programami sieciowymi skanuj±cymi strony w celu zebrania/aktualizacji danych (np. s³owa kluczowe do wyszukiwarek), lub sprawdzaj±cymi czy strona nadal istnieje w sieci.
    #PROG# rozró¿nia obecnie #RobotArray# robów.
    Wszystkie statystyki bazuj± na czasie serwera.
    Here, reported data are: average values (calculated from all data between the first and last visit)
    Here, reported data are: cumulative sums (calculated from all data between the first and last visit)
    Pewne d³ugo¶ci wizyt s± podane jako nieznae, gdy¿ nie zawsze mog± zostaæ obliczone. Najczê¶ciej wynika to z:
    - Wizyta jeszcze trwa³a podczas aktualizacji statystyki,
    - Wizyta rozpoczê³a siê po 23:00 ostatniego dnia miesi±ca (ze wzglêdów technicznych #PROG# nie przelicza d³ugo¶ci takich sesji)
    Zlecenie POST zosta³o zrealizowane pomy¶lnie.
    ¯±danie zosta³o odebrane poprawnie, lecz bêdzie pó¼niej zrealizowane przez serwer.
    Serwer przetworzy³ ¿±danie, lecz nie posiada ¿adnych danych do wys³ania.
    Czê¶ciowa zawarto¶æ.
    Dokument zosta³ przeniesiony pod inny adres.
    Dokument zosta³ czasowo przeniesiony pod inny adres.
    Zlecenie by³o b³êdne, lub niemo¿liwe do zrealizowania przez serwer.
    B³±d powstaje wtedy, kiedy serwer WWW otrzymuje do wykonania instrukcjê, której nie rozumie.
    B³±d autoryzacji. Strona wymaga podania has³a i loginu - b³±d pokazuje siê wtedy, gdy które¶ z tych danych siê nie zgadza lub zosta³y podane niew³a¶ciwiwe.
    Je¶li liczba ta jest du¿a, jest to sygna³ dla webmastera, i¿ kto¶ próbuje z³amaæ has³o do strony nim zabezpieczonej.
    B³±d wystêpuje wtedy, gdy katalog/strona do którego siê odwo³ywano nie ma ustawionych w³a¶ciwych praw dostêpu, lub prawa te nie pozwalaj± na obejrzenie zawarto¶ci katalogu/strony.
    Spróbuj wpisaæ nie istniej±cy adres URL (np. adres tej strony ze skasowan± jedn± literk±). Znaczy to, ¿e posiadasz gdzie¶ na swoich stronach b³êdny link, lub link odnosz±cy siê do nieistniej±cej strony.
    Przegl±darka nie wys³a³a ¿±dañ do serwera w czasie jego oczekiwania. Mo¿esz powtórzyæ ¿±danie bez jego modyfikacji w czasie pó¼niejszym.
    B³±d wewnêtrzny. Ten b³±d czêsto pojawia siê, gdy aplikacja CGI nie zakoñczy³a siê normalnie (podobno ka¿dy program zawiera przynajmniej jeden b³±d...:-).
    Serwer nie umo¿liwia obs³ugi mechanizmu.
    Serwer jest chwilowo przeci±¿ony i nie mo¿e obs³u¿yæ zlecenia.
    Serwer zdecydowa³ siê przerwaæ oczekiwanie na inny zasób lub us³ugê, i z tego powodu nie móg³ obs³u¿yæ zlecenia.
    Serwer docelowy nie otrzyma³ odpowiedzi od serwera proxy, lub bramki.
    Nie obs³ugiwana wesja protoko³u HTTP.
    lang/tooltips_w/awstats-tt-is.txt000064400000014347152532065620013174 0ustar00
    Nýtt innlit er skilgreint sem hver nýr gestur (sem skoðar síðu) sem var ekki tengdur við vefsvæði þitt síðustu #VisitTimeOut# mínúturnar
    Fjöldi véla (IP-vistfanga) sem litu inn á vefinn (og sóttu að lágmarki eina síðu.
    Gögnin gefa til kynna fjölda einstakra gesta sem litu inn á síðuna.
    Fjöldi skipta sem b>síða á þessu vefsvæði var skoðuð (Samtölur allra gesta fyrir öll innlit).
    Munurinn á þessum gögnum og "skrár" liggur í því að eingöngu eru taldar HTML síður en ekki myndir eða annars konar skrár.
    Fjöldi skipta sem síða, mynd eða skrá á vefsvæðinu var skoðuð eða sótt af einhverju(m).
    Þessi gögn eru einungis höfð með til hliðsjónar, þar sem fjöldi "síðna" sem skoðaðar voru eru oft talin vera betri markaðsgögn.
    Þessar upplýsingar gefa mynd af því gagnamagni sem sótt var af vefnum, síðum, myndum og skrám.
    Einingar eru í KB, MB eða GB (Kílóbæti, MegaBæti eða GígaBæti)
    #PROG# greinir hvert innlit á vefinn eftir leit á #SearchEnginesArray# vinsælustu leitarvélunum (Yahoo, Altavista, Lycos, Google, Voila, o.s.frv.).
    Listi yfir allar tilvísanir utan þessa vefsvæðis sem notaðar voru til að vísa til vefsvæðis þíns (Einungis #MaxNbOfRefererShown# oftast notuðu tilvísanirnar eru birtar hér). Links used by the results of the search engines are excluded here because they have already been included on the previous line within this table. Tilvísunum frá niðurstöðusíðum leitarvéla er sleppt hér þar sem þær hafa nú þegar verið notaðar í línunni hér fyrir ofan.
    Taflan sýnir þau leitarorð og setningar sem oftast hafa verið notuð á leitarvélum til að finna vefsvæði þitt. (Leitarorð frá #SearchEnginesArray# algengustu leitarvélunum sem #PROG# þekkir, svo sem Yahoo, Altavista, Lycos, Google, Voila, o.s.frv.).
    Athugið að heildarfjöldi leita með leitarorðum gæti verið hærri en heildarfjöldi leita eftir leitarsetningum (réttur fjöldi leita) því að ef notuð eru 2 leitarorð í sömu leitinni er leitin talin tvisvar sem orðaleit en einu sinni sem setningaleit.
    Leitarormar ("robots" og "spiders") eru 'sjálfvirkir gestir' notaðir af mörgum leitarvélum sem skoða, skrásetja og flokka innihald vefsins, safna tölulegum upplýsingum um tilvísanir og/eða hvort vefsvæðið sé enn nettengt.
    #PROG# þekkir allt að #RobotArray# leitarorma.
    Öll tímatengd tölfræði er byggð á klukku netþjóns.
    Gögn í þessari skýrslu eru: meðalgildi (reiknuð út frá öllum gögnum milli fyrsta og síðasta innlits á greindu tímabili)
    Gögn í þessari skýrslu eru: samtölur (reiknuð út frá öllum gögnum milli fyrsta og síðasta innlits á greindu tímabili)
    Ekki er alltaf hægt að reikna út Lengd innlita. Helstu ástæður þess eru eftirfarandi:
    - Innliti var ekki lokið þegar tölfræðin var reiknuð út.
    - Innlit byrjaði á síðasta klukkutíma (eftir kl 23:00) sólarhrings síðasta dags mánaðar (Tæknileg ástæða í #PROG# hindrar útreikning slíkra innlita)
    Ormar eru 'sjálfvirkir gestir'/b> sem eru í raun aðrir netþjónar sem sýktir eru af vírusi, sem reyna að framkvæma ákveðnar heimsóknir á vefþjón þinn til að sýkja hann. Í flestum tilfellum nýta slíkir ormar sér öryggisholur í gömlum vefþjónum. Ef kerfi þitt er ekki sýkjanlegt af þessum ormi getur þú hunsað þessi innlit.
    Það eru mjög fáir 'netþjónaormar' til í heiminum en þeir eru mjög virkir á ákveðnum tímum. #PROG# getur þekkt #WormsArray# mismunandi orma (Nimda, Code Red...).
    Engin lýsing er til á þessari villu.
    Þjónninn skildi beiðnina en afgreiðir hana síðar.
    Þjónninn hefur afgreitt beiðnina en það vantar skrána sem á að senda.
    Einungis hluti skráar afgreiddur.
    Umbeðin skrá hefur verið færð á nýtt veffang sem sent var með í svarinu.
    Engin lýsing er til á þessari villu.
    Stílvilla, þjónninn skildi ekki beiðnina.
    Beðið var um vefslóð þar sem notandanafns er krafist.
    Ef mikið er um þetta getur það bent til þess að tilraunir séu gerðar til að brjótast inn á síðu á með mörgum samsetningum af notendanöfnum og lykilorðum (til að fá aðgang að gögnum sem eru háð aðgangsstýringu).
    Beðið var um afgreiðslu á vefslóð sem ekki á að vera aðgengileg jafnvel þótt rétt notendanafn og lykilorð hafi verið notað) (Gæti verið mappa sem ekki er merkt "vafranleg".).
    Beðið var um vefslóð sem ekki er til. Þessi villa kemur oft upp þegar tengill á vefsíðu inniheldur villu eða gestur slær vitlausa slóð í vafrann sinn.
    Þjónninn hefur tekið of langan tíma í afgreiðslu beiðninnar. Þessi villa gefur oft til kynna hæga CGI skriftu sem þjónninn neyddist til að drepa eða mjög upptekinn vefþjón.
    Innri villa hefur komið upp á þjóni. Þessi villa kemur oft upp ef CGI forrit hefur lokið keyrslu á óeðlilegan hátt.
    Beiðni er ekki þekkt.
    Villuboð sem skilað er af vefþjóni sem þjónar sem vefsel eða gátt þegar umbeðin þjónustuvél svarar ekki fyrirspurnum frá gestum.
    Innri villa kom upp á þjóni.
    Samband rofnaði við gátt.
    HTTP útgáfa er ekki studd.
    lang/tooltips_w/awstats-tt-sr.txt000064400000022040152532065620013172 0ustar00
    �ова по�ета �е дефинише као �ваки нови по�етилац који �е није повезао на ваш �ајт у току по�ледњих #VisitTimeOut# минута.
    Број кори�ничких рачунара (IP адре�а) који �у по�ећивали овај �ајт (и видели најмање једну �траницу).
    Овај податак говори о броју физички различитих о�оба које �у по�етиле �ајт током једног дана.
    Колико пута је једна �траница �ајта била прегледана (укупно за �ве по�етиоце током �вих по�ета).
    Овај податак �е разликује од "погодака" по томе што броји �амо HTML �транице за разлику од �лика и других датотека.
    Колико пута је једна �траница, �лика, датотека �ајта била прегледана или преузета од �тране некога.
    Овај податак �лужи �амо као референца, пошто је број "�траница" много кори�нији за разне маркетиншке потребе.
    Ова информација говори о количини преузетих података за �ве �транице, �лике и датотеке у оквиру вашег �ајта.
    Јединице �у KB, MB или GB (килобајти, мегабајти или гигабајти). Овај податак је кори�тан како би�те пратили о�тварени �аобраћај у оквиру вашег �ајта.
    #PROG# препознаје �ваки при�туп вашем �ајту након претраге помоћу #SearchEnginesArray# најпопуларнијих интернет претраживача и директоријума (Yahoo, Altavista, Lycos, Google, Voila, итд...).
    Ли�та �вих �пољних �траница на којима �е налази веза коју је кори�ник употребио да би дошао на вашу �траницу (Само #MaxNbOfRefererShown# највећих веза је приказано). Везе које �у резултат претраживања �у и�кључене јер �у већ приказане у претходном реду ове табеле.
    Ова табела приказује ли�ту кључних речи које �е најчешће кори�те за проналажење вашег �ајта помоћу интернет претраживача или директоријума. (#PROG# Препознаје кључне речи #SearchEnginesArray# највећих претраживача и директоријума, међу којима �у и Yahoo, Altavista, Lycos, Google, Voila, итд...).
    Роботи �у рачунар�ки програми које кори�те многи претраживачи како би анализирали вашу �траницу и тиме (1) је индек�ирали и рангирали, (2) прикупили �тати�тике о интернет �транама и/или (3) проверили да ли је ваш �ајт још увек активан.
    #PROG# Може препознати до #RobotArray# робота.
    Све �тати�тике везане �а временом �у базиране на времену на �ерверу.
    Приказани подаци овде �у: про�ечне вредно�ти (израчунате на о�нову �вих података између прве и по�ледње по�ете у анализираном оп�егу)
    Приказани подаци овде �у: кумулативне �уме (израчунате на о�нову �вих података између прве и по�ледње по�ете у анализираном оп�егу)
    �ека Трајања по�ета �у 'непозната' јер �е не могу увек израчунати. Ово �у главни разлози за то:
    - По�ета није завршена када је вршено 'ажурирање'.
    - По�ета је почела у по�ледњем �ату (након 23:00) по�ледњег дана у ме�ецу (технички разлози �пречавају #PROG# да израчуна трајање такве по�ете)
    �ема опи�а ове грешке.
    Сервер је разумео захтев, али ће га обрадити ка�није.
    Сервер је обрадио захтев, али нема шта да пошаље кори�нику.
    Делимичан �адржај (кори�ник је прекинуо отварање �транице).
    Тражени документ је премештен на ново ме�то и нова адре�а је дата кори�нику (преу�меравање).
    �ема опи�а ове грешке.
    Синтак�на грешка. Сервер није разумео захтев.
    Кори�ник је покушао да отвори �трану за коју је потребно дати кори�ничко име и лозинку.
    Велики број под овом �тавком може значити да неко покушава провалити на ваш �ајт (нпр. и�пробавајући разне комбинације кори�ничког имена и лозинке за улазак).
    Кори�ник је покушао да отвори �трану која је подешена да јој �е не може при�тупити, чак ни �а кори�ничким именом и лозинком (нпр. �трана унутар директоријума који није дефини�ан као при�тупачан.).
    Кори�ник је покушао при�тупити непо�тојећој �трани. Ова грешка обично значи да негде на вашем �ајту по�тоји неи�правна веза или да је кори�ник неи�правно унео адре�у одређене �транице.
    Серверу је требало превише времена да одговори на захтев. Код ове грешке �е обично ради о �пором CGI �крипту који је �ервер морао да прекине, о �порој вези кори�ника или о ек�тремном загушењу �аобраћаја на �ерверу.
    Интерна грешка. Ову грешку узрокује CGI програм који �адржи неку грешку, па је прекинуо рад.
    Захтевана је непозната акција.
    Овај код враћа HTTP �ервер који ради као по�редник или пролаз, и то ако �тварни �ервер не одговори у�пешно на захтев клијента.
    Интерна грешка на �ерверу.
    Овај код враћа HTTP �ервер који ради као пролаз, и то ако приликом контактирања �тварног �ервера и�текне предвиђено време (gateway timeout).
    Клијент захтева верзију HTTP-а која није подржана.
    lang/tooltips_w/awstats-tt-gr.txt000064400000027373152532065620013174 0ustar00
    Ως νέα επίσκεψη ο�ίζεται η π�οβολή μιας σελίδας από έναν εισε�χόμενος επισκέπτης ο οποιός δεν είχε συνδεθεί στο site κατά τα τελευταία #VisitTimeOut# λεπτά.
    Α�ιθμός τον πελατών (IP διευθ�νσεις) που επισκέφθηκαν το site (και που π�όβαλλαν τουλάχιστον μια σελίδα).
    Τα δεδομένα αυτά αναφέ�ονται στον α�ιθμό των διαφο�ετικών φυσικών π�οσώπων που είχαν π�όσβαση στο site.
    Α�ιθμός π�οβολών μιας σελίδας του site (Σ�νολο για όλους τους επισκέπτες και για όλες τις επισκέψεις).
    Αυτό το κομμάτι των δεδομένων διαφέ�ει από τα "χτυπήματα" στο ότι μετ�άει μόνο τις HTML σελίδες σε αντίθεση με εικόνες και άλλα α�χεία.
    Α�ιθμός π�οβολών ή λήψεων μιας σελίδας, εικόνας ή α�χείου του site από κάποιον επισκέπτη.
    Αυτό το κομμάτι των δεδομένων δίνεται ως αναφο�ά μόνο, αφο� ο α�ιθμός των "σελίδων" που π�οβάλλονται είναι συνήθως π�οτιμότε�ος για λόγους marketing.
    Αυτό το κομμάτι των δεδομένων αναφέ�εται στην ποσότητα των δεδομένων που λαμβάνονται από όλες τις σελίδες, εικόνες και α�χεία μέσα στο site.
    Οι μονάδες είναι σε KB, MB ή GB (KiloBytes, MegaBytes ή GigaBytes)
    #PROG# αναγνω�ίζει κάθε π�όσβαση στο site μετά από μια αναζήτηση από τις #SearchEnginesArray# πιο δημοφιλείς Μηχανές Αναζήτησης και Καταλόγους στο Internet (όπως Yahoo, Altavista, Lycos, Google, Voila, κτλ...).
    Λίστα από όλους τους εξωτε�ικο�ς συνδέσμους που χ�ησιμοποιήθηκαν για να συνδέθο�ν (και να εισαχθο�ν) στο site (Μόνο οι #MaxNbOfRefererShown# πιο συχνά χ�ησιμοποιημένες εξωτε�ικές σελίδες εμφανίζονται). Οι συνδέσμοι που χ�ησιμοποιο�νται από τα αποτελέσματα των μηχανών αναζήτησης δεν συμπε�ιλαμβάνονται εδώ αφο� έχουν ήδη συμπε�ιληφθεί στην π�οηγο�μενη γ�αμμή στον πίνακα αυτό.
    Αυτός ο πίνακας εμφανίζει την λίστα από τις πιο συχνά χ�ησιμοποιο�μενες εκφ�άσεις και λέξεις-κλειδιά για τον εντοπισμό του site από τις Μηχανές Αναζήτησης και τους Καταλόγους στο Internet. (Λέξεις-κλειδιά από #SearchEnginesArray# πιο δημοφιλείς Μηχανές Αναζήτησης και Καταλόγους στο Internet αναγνω�ίζονται από #PROG#, όπως Yahoo, Altavista, Lycos, Google, Voila, κτλ...).
    Σημειώνεται ότι ο συνολικός α�ιθμός αναζητήσεων για λέξεις-κλειδιά πιθανόν να είναι μεγαλ�τε�ος από τον συνολικό α�ιθμό αναζητήσεων για εκφ�άσεις (π�αγματικό α�ιθμό αναζητήσεων) γιατί όταν 2 λέξεις-κλειδιά χ�ησιμοποιο�νται στην ίδια αναζήτηση, η αναζήτηση μετ�άει δ�ο φο�ές (μία για κάθε λέξη).
    Τα Robot (κάποιες φο�ές αναφέ�ονται ως Α�άχνες (Spiders)) είναι αυτόματοι επισκέπτες που χ�ησιμοποιο�νται από πολλές μηχανές αναζήτησης που σα�ώνουν το site σας για να το π�οσθέσουν στην βάση τους και να βαθμολογήσουν την θέση του, ή που συλλέγουν στατιστικά ή ελέγχουν εάν το site σας είναι ακόμα ενε�γό.
    #PROG# είναι ικανό να αναγνω�ίσει έως #RobotArray# robots.
    Όλα τα στατιστικά που συσχετίζονται με χ�όνο είναι βάση της ώ�ας του διακομιστή.
    Εδώ, τα δεδομένα που αναφέ�ονται είναι: μέσος ό�ος τιμών (έχουν υπολογιστεί από όλα τα δεδομένα μεταξ� του π�ώτου και του τελευταίου e-mail στο ε��ος της ανάλυσης)
    Εδώ, τα δεδομένα που αναφέ�ονται είναι: συγκεντ�ωτικά σ�νολα (έχουν υπολογιστεί από όλα τα δεδομένα μεταξ� του π�ώτου και του τελευταίου e-mail στο ε��ος της ανάλυσης)
    Κάποιες διά�κειες Επισκέψεων είναι 'άγνωστες' αφο� δεν μπο�ο�ν πάντα να υπολογιστο�ν. Αυτός είναι ο βασικός λόγος για αυτό:
    - Η επίσκεψη δεν ολοκλη�ώθηκε όταν συνέβει ή 'ανανέωση'.
    - Η επίσκεψη ξεκίνησε την τελευταία ώ�α (μετά τις 23:00) της τελευταίας μέ�ας ενός μήνα (Ένα τεχνικό ζήτημα αποτ�έπει το #PROG# από τον υπολογισμό διά�κειας τέτοιων συνεδ�ιών)
    Τα Σκουλήκια (Worms) είναι αυτόματοι επισκέπτες που στην π�αγματικότητα π�οήλθαν από εξωτε�ικο�ς διακομιστές, που π�οσβλήθηκαν από ιό, που π�οσπαθεί να κάνει συγκεκ�ιμένα χτυπήματα-επισκέψεις στον διακομιστή σας ώστε να τον π�οσβάλλει με τον ιό. Στις πε�ισσότε�ες των πε�ιπτώσεων, τέτοια σκουλήκια εκμεταλλε�ονται bugs από εμπο�ικο�ς διακομιστές που δεν έχουν ενημε�ωθεί με τις τελευταίες αναβαθμίσεις. Εάν το σ�στημά σας δεν είναι ο ευαίσθητος στόχος του σκουληκιο�, μπο�είτε απλά να αγνοήσετε τέτοιες επισκέψεις.
    Εμφανίζονται ελαχιστα 'σκουλήκια διακομιστών' στον κόσμο αλλά είναι πολ� ενε�γά κατά διαστήματα. #PROG# είναι ικανό να αναγνω�ίσει #WormsArray# γνωστές υπογ�αφές σκουληκιών (nimda,code red,...).
    Καμία πε�ιγ�αφή για αυτό το σφάλμα.
    Η αίτηση αναγνω�ίστηκε από τον διακομιστή αλλά θα επεξε�γαστεί α�γότε�α.
    Ο διακομιστής επεξε�γάστηκε την αίτηση αλλά δεν υπά�χει κανένα έγγ�αφο π�ος αποστολή.
    Με�ικό πε�ιεχόμενο.
    Το έγγ�αφο για το οποίο έγινε η αίτηση μετακινήθηκε και β�ίσκεται τώ�α σε μια άλλη διε�θυνση που αναφέ�εται στην απάντηση.
    Καμία πε�ιγ�αφή για αυτό το σφάλμα.
    Συντακτικό σφάλμα, ο διακομιστής δεν κατανόησε το αίτημα.
    Π�οσπάθεια π�όσβασης σε ένα URL όπου χ�ειάζεται όνομα χ�ήστη και κωδικός.
    Μια υψηλή τιμή στο στοιχείο αυτό θα μπο�ο�σε να σημαίνει ότι κάποιος (όπως ένας hacker) π�οσπαθεί να σπάσει, ή να εισέλθει στο site σας (π�οσπαθώντας να εισέλθει σε μια ασφαλή πε�ιοχή δοκιμάζοντας για πα�άδειγμα διαφο�ετικά ονόματα χ�ήστη/κωδικο�ς).
    Π�οσπάθεια π�όσβασης ενός URL που δεν έχει �υθμιστεί να είναι π�οσβάσιμο, ακόμα και με ένα όνομα χ�ήστη/κωδικό (για πα�άδειγμα, ένα URL μεσα σε ένα φάκελο που δεν έχει ο�ιστεί ως "πλοηγήσιμος".).
    Π�οσπάθεια π�όσβασης σε ένα URL που δεν υπά�χει. Αυτό το σφάλμα συνήθως σημαίνει ότι υπά�χει κάποιος άκυ�ος σ�νδεσμος κάπου στο site σας ή ότι κάποιος επισκέπτης πληκτ�ολόγησε λανθασμένα κάποιο URL.
    Ο διακομιστής έκανα υπε�βολικά μεγάλο χ�ονικό διάστημα να αποκ�ιθεί σε μία αίτηση. Αυτό το σφάλμα συνήθως εμπε�ιέχει είτε κάποιο α�γό CGI script που ο διακομιστής χ�ειάστηκε να τε�ματίσει είτε υπε�βολικά πολ� κίνηση στον διακομιστή.
    Εσωτε�ικό σφάλμα. Αυτό το σφάλμα συνήθως π�οκαλείται από ένα π�όγ�αμμα CGI που τε�ματίστηκε ανώμαλα (coredump για πα�άδειγμα).
    Άγνωστο αίτημα ενέ�γειας.
    Κώδικας που επιστ�έφεται από έναν HTTP διακομιστή που λειτου�γεί ως μεσολαβητής ή δ�ομολογητής όταν ένας π�αγματικός, διακομιστής π�οο�ισμο� δεν αποκ�ίνεται με επιτυχία στο αίτημα του πελάτη.
    Εσωτε�ικό σφάλμα διακομιστή.
    Τέλος χ�όνου διακομιστή π�λης.
    Η HTTP έκδοση δεν υποστη�ίζεται.
    lang/tooltips_w/awstats-tt-gl.txt000064400000017117152532065620013161 0ustar00
    Unha nova visita defínese por cada novo visitante entrante (accedendo a unha páxina) que non estivera conectado ó sitio durante os últimos #VisitTimeOut# mins..
    Número de máquinas cliente (enderezos IP) que viñeron a visitar o sitio (e que miraron polo menos unha páxina).
    Este dato refire o número de diferentes persoas físicas que accederan o sitio.
    Número de veces que unha páxina deste sitio é vista (Suma de tódolos visitantes para tódalas visitas).
    Esta dato difire de "accesos" en que somente conta páxinas HTML e non imaxes e outros ficheiros.
    Número de veces que unha páxina, imaxe ou ficheiro do sitio e vista ou descargada por alguén.
    Este dato provese como referencia somente, dado que o número de "páxinas" vistas é a miudo preferido para propósitos de mercadotecnia.
    Este dato refírese á cantidade de datos descargados de tódalas páxinas, imaxes e ficheiros no sitio.
    As unidades están en KB, MB ou GB (Kilooctetos, Megaoctetos ou Gigaoctetos)
    #PROG# recoñece cada acceso ó sitio feito despois dunha procura dende os #SearchEnginesArray# Procuradores e Directorios mais populares da Interrede (como Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Lista de tódalas páxinas externas que foron usadas para enlazar (e entrar) ó sitio (Somente as #MaxNbOfRefererShown# páxinas externas máis frecuentemente usadas son amosadas). Os enlaces usados polos resultados dos procuradores son excluídos aquí porque xa foron incluídos na liña anterior desta táboa.
    Esta táboa amosa a lista de mais frecuentes palabras ou frases clave usadas para atopa-lo sitio dende Procuradores e Directorios da Interrede. (Palabras clave dos #SearchEnginesArray# Procuradores e Directorios mais populares son recoñecidas por #PROG#, como Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Decátese de que o número total de procuras por palabras clave pode ser maior co número total de procuras por frases clave (número real de procuras) porque cando dúas palabras clave sexan usadas na mesma procura, a procura e contada dúas veces por palabras clave (unha vez por cada palabra).
    Os Robots (ás veces refírese a Arañas) son ordenadores automáticos visitantes usados por moitos procuradores que exploran o sitio web para indicalo e clasificalo, recoller estatísticas sobre sitios web da Interrede e/ou mirar se o sitio de vostede está aínda en liña.
    #PROG# é capaz de recoñecer ata #RobotArray# robots.
    Tódalas estadísticas feitas en relación ó tempo están baseadas na hora do servidor.
    Aquí, os datos expostos son valores medios (calculados a partir de tódolos datos entre a primeira e última visita no rango analizado)
    Aquí, os datos expostos son sumas acumulativas (calculados a partir de tódolos datos entre a primeira e última visita en un rango analizado)
    Algunhas Duracións de visitas son 'descoñecidas' porque non sempre poden ser calculadas. As principais razóns disto son:
    - A visita non rematara cando a 'actualización' ocurríu.
    - A visita escomenzóu na derradeira hora (despois das 23:00) do derradeiro día dun mes (Unha razón técnica evita que #PROG# calcule a duración de tales sesións)
    Os Gusanos son ordenadores automáticos visitantes que son de feito servidores externos, infectados por un virus, que intentan realizar accesos particulares no servidor para infectalo. Na maioría dos casos, ditos gusanos explotan algúns erros de servidores sen actualizar ou comerciais. Se o sistema non é o obxectivo sensible do gusano, pódese sinxelamente ignorar estes accesos.
    Hai moi poucos 'gusanos de servidor' no mundo pero están moi activos ás veces. #PROG# é capaz de recoñecer #WormsArray# sinaturas de gusanos coñecidos (nimda, code red, ...).
    Error sen descripción.
    A petición foi comprendida polo servidor pero se procesará máis tarde.
    O servidor procesóu a petición pero non hai documento para enviar.
    Contido parcial.
    O documento pedido foi reubicado e está agora noutro enderezo amosado na resposta.
    Error sen descripción.
    Error de sintaxe, o servidor non comprendéu a petición.
    Intentos de acceder un URL onde un par identificador/contrasinal foi requirido.
    Un número alto neste apartado podería significar que alguén (como un intruso) está intentando romper ou introducirse no sitio (esperando entrar nunha área segura probando diferentes pares identificador/contrasinal, por exemplo).
    Intentos de acceder a un URL non configurado para ser accesible, nin siquera con un par identificador/contrasinal (por exemplo, un URL nun directorio non definido como "navegable").
    Intentos de acceder un URL non existente. Este erro a miúdo significa que hai un enlace inválido nalgures no sitio ou que un visitante escribíu mal un certo URL
    O servidor tardóu demasiado tempo para responder unha petición. Este erro frecuentemente implica ben un lento guión (script) CGI que o servidor foi requirido para matar ou ben un servidor web extremadamente conxestionado.
    Erro interno. Este erro é a miúdo causado por un programa CGI que finalizóu anormalmente (volcado de núcleo, por exemplo).
    Acción requirida descoñecida
    Código retornado por un servidor HTTP que funciona como atallo ou pasarela cando un servidor real destinatario non responde axeitadamente á petición do cliente
    Erro interno do servidor.
    A pasarela non responde.
    Versión de HTTP non soportada.
    lang/tooltips_w/awstats-tt-fi.txt000064400000013615152532065620013154 0ustar00
    Tässä uudeksi vierailuksi on laskettu sivustolle saapunut vierailija (sivuja selannut), joka ei ole ollut yhteydessä sivustoon viimeisen #VisitTimeOut# minuutin aikana.
    Asiakaskoneiden (IP-osoitteiden) määrä, jotka ovat käyneet sivustoilla (ja selanneet ainakin yhtä sivua).
    Tämä tieto viittaa eri fyysisten henkilöiden määrään, jotka ovat käyneet sivustolla.
    Näytettyjen sivujen määrä. (kaikkien vierailujen aikana näytettyjen sivujen yhteismäärä).
    Tämä tieto eroaa kohdasta "osumat" siinä, että mukaan lasketaan ainoastaan HTML-sivut, ei kuvia tai muita tiedostoja.
    Näytettyjen tai ladattujen sivujen, kuvien ja tiedostojen yhteismäärä.
    Tämä tieto tarjotaan ainoastaan viitteeksi, koska markkinointitarkoituksissa suositaan yleensä näytettyjen "sivujen" määrää.
    Tämä tieto viittaa sivustoltasi sivujen, kuvien ja tiedostojen muodossa ladatun datan määrään.
    Yksikkönä Kt, Mt tai Gt (Kilotavu, Megatavu tai Gigatavu)
    #PROG# tunnistaa #SearchEnginesArray# suosituimman hakukoneen (kuten Yahoo, Altavista, Lycos, Google, Voila, jne...) hakutulosten avulla sivustolle löytäneet.
    Luettelo ulkopuolisista sivuista, joilta löytyy linkki (jota on seurattu) sivustollesi (Näkyvissä ainoastaan #MaxNbOfRefererShown# useimmin käytettyä ulkopuolista sivua). Hakukoneiden hakutuloksista löytyviä linkkejä ei ole sisällytetty mukaan, koska nämä näkyvät jo tämän taulukon edellisellä rivillä.
    Tästä taulukosta nähdään luettelo yleisimmistä hakulauseista tai hakusanoista, joiden avulla sivustoillesi on löydetty Internetin hakukoneiden ja hakemistojen avulla. (#PROG# tunnistaa hakusanat #SearchEnginesArray#:sta suosituimmasta hakukoneesta ja hakemistosta, kuten Yahoo, Altavista, Lycos, Google, Voila, jne...).
    Huomaa, että hakusanojen kokonaismäärä voi olla suurempi kuin hakulauseiden (todellinen hakujen määrä), koska silloin kun kahta hakusanaa on käytetty samassa haussa, lasketaan tämä hakusana-tilastossa kahdesti (jokainen hakusana erikseen).
    Robotit (käytetään joskus myös nimitystä "Spider") ovat automaattisia tietokonevierailijoita, joita useat hakukoneet käyttävät indeksoidakseen, arvostellakseen ja kerätäkseen tilastoa sivustoista ja/tai tutkiakseen vieläkö sivustot ovat saatavilla.
    #PROG# tunnistaa jopa #RobotArray# robottia.
    Kaikki kelloaikoihin liittyvät tilastot perustuvat palvelimen kelloon.
    Tässä kerrotut tiedot ovat: keskimääräisiä arvoja (laskettu kaikkien ensimmäisen ja viimeisimmän vierailun välisten tietojen perusteella)
    Tässä kerrotut tiedot ovat: kumulatiivisia summia (laskettu kaikkien ensimmäisen ja viimeisimmän vierailun välisten tietojen perusteella)
    Jotkut Vierailujen kestot ovat 'tuntemattomia', koska niitä ei aina voida laskea. Pääasiallinen syy tälle on:
    - Vierailu ei ollut loppunut 'päivityksen' tapahtuessa.
    - Vierailu alkoi kuukauden viimeisen vuorokauden viimesen tunnin aikana (klo 23:00 jälkeen) (Tekniset syyt estävät laskutoimituksen tällaisessa tapauksessa)
    Tälle virheelle ei ole kuvausta.
    Palvelin on ymmärtänyt palvelupyynnön, mutta se käsitellään myöhemmin.
    Palvelin on käsitellyt pyynnön, mutta lähetettäväksi ei ole mitään tietoa.
    Osittainen sisältö.
    Pyydetty tiedosto on siirretty toiseen, vastauksessa kerrottuun osoitteeseen.
    Tälle virheelle ei ole kuvausta.
    Kielioppivirhe. Palvelin ei ymmärtänyt palvelupyyntöä.
    Pyydetty URL, johon tarvitaan tunnus/salasana -kaksikko.
    Suuri määrä näitä virheitä saattaa tarkoittaa sitä, että joku (kuten hakkeri) yrittää murtautua, tai päästä sivustoille (toivoen päätyvänsä suojatulle alueelle kokeilemalla eri tunnus/salasana -pareja, esimerkiksi).
    Tried to reach an URL not configured to be reachable, even with an login/password pair (for example, an URL within a directory not defined as "browsable".).
    Pyydetty URL, jota ei ole olemassa. Tämä virhe tarkoittaa usein sitä, että jossakin sivustollasi on virheellinen linkki, tai että vierailija on kirjoittanut URL:n väärin.
    Server has taken too much time to respond to a request. This error frequently involves either a slow CGI script which the server was required to kill or an extremely congested web server.
    Sisäinen virhe. Tämä virhe on usein epänormaalisti keskeytyneen CGI-ohjelman aiheuttama (tuloksena esim. coredump).
    Pyydetty toiminto tuntematon.
    Välityspalvelimena tai yhdyskäytävänä toimivan HTTP-palvelimen palauttama koodi, kun todellinen kohteena ollut palvelin ei vastannut palvelupyyntöön hyväksyttävästi.
    Palvelimen sisäinen virhe.
    Yhdyskäytävän aikaraja täyttynyt.
    HTTP-versio ei tuettu.
    lang/tooltips_w/awstats-tt-nb.txt000064400000011201152532065620013142 0ustar00
    Ett nytt besøk er en ny gjest som ikke har vært tilkoplet nettstedet siste #VisitTimeOut# min.
    Antall klientverter (IP-adresser) som har besøkt nettstedet, og har sett minst en side).
    Denne informasjonen gjelder antallet forskjellige personer som har besøkt siden.
    Antall ganger en side på nettstedet har blitt vist.
    Denne informasjonen skiller seg fra «treff» ved å bare telle HTML-sider, og ikke bilder og andre filer.
    Antall ganger en side, et bilde eller en fil på nettstedet har blitt vist eller lastet ned.
    Denne informasjonen viser hvor mye data som har blitt lastet ned totalt (sider, bilder eller andre filer).
    Enhetene er KB, MB eller GB (kilobyte, megabyte eller gigabyte)
    #PROG# kan se når et besøk på nettstedet ditt kommer fra et søk på de #SearchEnginesArray# mest populære søkemotorene og emnekatalogane (f.eks. Yahoo, Altavista, Lycos, Google og Kvasir).
    Liste over alle eksterne sider som har lenker til nettstedet ditt (bare de #MaxNbOfRefererShown# mest brukte eksterne sider blir vist). Lenker fra søkemotorer er ikke inkludert her, siden disse allerede er oppført i forrige del av denne tabellen.
    Denne tabellen viser de mest brukte søkeordene brukt til å finna nettstedet ditt i søkemotorer og emnekataloger. (Søkeord fra de #SearchEnginesArray# mest populære søkemotorene og emnekatalogene kan leses av #PROG#, f.eks. Yahoo, Altavista, Lycos, Google, og Kvasir).
    Roboter blir brukt av mange søkemotorer som besøker nettstedet ditt for å indeksere og rangere det, samle statistikk om nettsteder, og/eller se om nettstedet fremdeles er tilgjengelig.
    #PROG# kjenner til #RobotArray# roboter.
    All tidsrelatert statistikk er basert på tjenertid.
    Rapporterte tall er gjennomsnittsverdier (regnet ut fra alle data mellom første og siste besøk)
    Rapporterte tall er kumulative summer (regnet ut fra alle data mellom første og siste besøk)
    Ingen beskrivelse av denne feilen.
    Forespørselen var forstått av tjeneren men vil bli prosessert senere.
    Tjeneren har prosessert forespørselen men har ikke noe innhold å sende.
    Delvis innhold.
    Det forespurte dokumentet er flyttet, og finnes nå på en annen side. Brukeren blir automatisk videresendt til den nye adressen.
    Ingen beskrivelse av denne feilen.
    Syntaksfeil. Tjeneren forsto ikke forespørselen.
    Prøvde å hente en side som var passordbeskyttet.
    Mange slike feilmeldinger kan bety at noen prøver å bryte seg inn på nettstedet ditt.
    Prøvde å hente en side som er utilgjengelig (selv med passord) (for eksempel en katalog som er definert som ikke lesbar).
    Prøvde å hente en ikke-eksisterende side. Denne feilen betyr oftest at det er en lenke en eller annen plass på nettstedet ditt (eller på en ekstern side) som ikke fungerer, og som må oppdateres.
    Tjeneren har brukt for mye tid på å svare på en forespørsel. Denne feilen gjelder enten et tregt CGI-skript tjenaren måtte avslutte, eller tungt trafikkert tjenar.
    Intern feil. Denne feilen kommer ofte av CGI-skript som har blitt avsluttet unormalt.
    Ukjent forespørsel.
    Kode returnert av ein HTTP-tjener som fungerer som proxy eller systemport når en ekte tjener ikke svarer på forespørselen.
    Intern tjenerfeil.
    Systemport tidsavbrutt.
    Støtter ikke HTTP-versjonen.
    lang/tooltips_w/awstats-tt-nl.txt000064400000011736152532065620013171 0ustar00
    Een nieuw bezoek is elke binnenkomende bezoeker (die een pagina bekijkt) die de laatste #VisitTimeOut# mn niet met uw site verbonden was.
    Aantal client hosts (IP adres) die de site bezochten (en minimaal een pagina bekeken).
    Dit geeft aan hoeveel verschillende fysieke personen de site op een bepaalde dag bezocht hebben.
    Aantal malen dat een pagina van de site bekeken is (Som voor alle bezoekers voor alle bezoeken).
    Dit onderdeel verschilt van "hits" in het feit dat het alleen HTML pagina's telt, in tegenstelling tot plaatjes en andere bestanden.
    Aantal malen dat een pagina, plaatje of bestand op de site door iemand is bekeken of gedownload.
    Dit onderdeel is alleen als referentie gegeven, omdat het aantal bekeken "pagina's" voor marketingdoeleinden de voorkeur heeft.
    Aantal door uw bezoekers gedownloade kibibytes.
    Dit onderdeel geeft de hoeveelheid gedownloade gegevens in alle pagina's, plaatjes en bestanden van uw site, gemeten in KiBs.
    Dit programma, #PROG#, herkent elke benadering van uw site na een zoekopdracht van de #SearchEnginesArray# meest populaire Internet zoekmachines (zoals Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Lijst van alle externe pagina's die zijn gebruikt om naar uw site te linken (of deze te benaderen) (Alleen de #MaxNbOfRefererShown# meest gebruikte externe pagina's zijn getoond. Links gebruikt door de resultaten van zoekmachines worden hiet niet getoond omdat deze al zijn opgenomen in de vorige regel van deze tabel.
    Deze tabel toont de lijst van keywords die het meest zijn gebruikt om uw site te vindein in Internet zoekmachines. (Keywords van de #SearchEnginesArray# meest populaire zoekmachines worden door #PROG# herkend, zoals Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Robots (soms Spiders genoemd) zijn automatische bezoekcomputers die door veel zoekmachines worden gebruikt om uw site te scannen om (1) deze te indexeren, (2) statistieken over Internet sites te verzamelen en/of (3) te kijken of site nog steeds on-line is.
    Dit programma, #PROG#, is in staat maximaal #RobotArray# robots te herkennen
    .
    Geen beschrijving voor deze foutmelding.
    De server heeft het verzoek begrepen, maar zal deze later behandelen.
    De server heeft het verzoek verwerkt, maar er is geen document om te verzenden.
    Gedeeltelijke inhoud.
    Het aangevraagde document is verplaatst en is nu op een andere locatie die in het antwoord gegeven is.
    Geen beschrijving voor deze foutmelding.
    "Taalfout", de server begreep het verzoek niet.
    Er is gepoogd een URL waarvoor een usernaam/wachtwoord noodzakelijk is te benaderen.
    Een hoog aantal van deze meldingen kan betekenen dat iemand (zoals een hacker) probeert uw site te kraken, of uw site binnen te komen (pogend een beveiligd onderdeel van uw site te benaderen door verschillende usernamen/wachtwoorden te proberen, bijvoorbeeld).
    Er is gepoogd een URL die is ingesteld om niet benaderbaar te zijn, zelfs met usernaam/wachtwoord te benaderen (bijvoorbeeld, een URL in een directory die niet "doorbladerbaar" is).
    Er is gepoogd een niet bestaande URL te benaderen. Deze fout betekent vaak dat er een ongeldige link in uw site zit of dat een bezoeker een URL foutief heeft ingevoerd.
    De server heeft er te lang over gedaan om een antwoord op een aanvraag te geven. Het kan een CGI script zijn dat zo traag is dat de server hem heeft moeten afbreken of een overbelaste web server.
    Interne fout. Deze error wordt vaak veroorzaakt door een CGI programma dat abnormaal is beeindigd (een core dump, bijvoorbeeld).
    Onbekende actie aangevraagd.
    Melding die door een proxy of gateway HTTP server wordt gegeven als een echte doelserver niet succesvol op de aanvraag van een client antwoordt.
    Interne server fout.
    Gateway time-out.
    HTTP versie niet ondersteund.
    lang/tooltips_w/awstats-tt-hu.txt000064400000012263152532065620013170 0ustar00
    Új látogatásnak számít minden olyan új beérkezett látogató aki megtekint egy oldalt és a legutolsó látogatása óta eltelt legalább #VisitTimeOut# perc.
    Azon egyedi számítógépek száma (IP címek) akik az oldalon jártak (és legalább egy oldalt megnéztek).
    Ez az adat a fizikailag különbözõ gépekre vonatkozik ahonnan az oldalt látogatták bármelyik nap.
    Az oldal összesített találatai (Összes látogató összes látogatása).
    Ez annyiban különbözik a "találatok"-tól, hogy csak a HTML oldalak találatait összesíti, a képeket és egyéb fájlokat nem.
    Oldalak, képek, fájlok összesített találatai és letöltései.
    Ez az összesítés csak referencia célokat szolgál, hiszen marketing szempontból az "oldalak találatai" adat az érdekesebb.
    Ez az adat az összes letöltött adatmennyiséget jelzi beleértve az összes oldalt, képet és fájlt kilobájt, megabájt illetve gigabájt-ban (Kb, Mb, Gb).
    Az #PROG# felismeri, ha az oldalakat a #SearchEnginesArray# legismertebb keresõprogramok egyikén keresztül érték el (például Yahoo, Altavista, Lycos, Google, Voila, stb...).
    Az olyan külsõ oldalak listája, amely erre a honlapra mutat, vagy rajtuk keresztül érkezett a kérés (Csak a leggyakoribb #MaxNbOfRefererShown# külsõ oldal). A keresõkön keresztül érkezett találatok itt nincsenek listázva, azok az elõzõ részben találhatóak.
    Ebben a táblázatban találhatóak a keresõprogramokban leggyakrabban használt kulcsszavak és kifejezések amelyeken keresztül ezen honlapot megtalálták. (Az #PROG# a #SearchEnginesArray# leggyakoribb keresõmotort ismeri. Például Yahoo, Altavista, Lycos, Google, Voila, stb...).
    Az összes keresett kulcsszó száma nagyobb mint a keresett kifejezéseké (azaz az igazi keresések számáé) mert 2 keresett kulcsszó esetén a keresés kétszer számít (egyszer-egyszer mindkét szóra).
    A robot-ok (spider-nek vagy webcrawler-nek is mondják) automatikus számítógép látogatók melyet számos keresõprogram használ arra hogy az oldalt átnézze, index-elje és kategorizálja, statisztikát gyûjtsön a weboldalakról és/vagy megnézze, hogy a honlap még mindig elérhetõ-e.
    Az #PROG# #RobotArray# különbözõ robotot ismer fel.
    Minden itt feltûntetett idõnek a szerveridõ szolgált alapul.
    Az itteni adat átlagos érték (az elsõ és az utolsó látogatás közötti idõszakra)
    Az itteni adat összegzett adat (az elsõ és az utolsó látogatás közötti idõszakra)
    Néha a látogatási idõszak "ismeretlen"-nek látszik, mert nem mindig kiszá mítható. Ennek fõ okai:
    - A látogatás nem fejezõdött be a frissítéskor.
    - A látogatás a hónap utolsó napjának utolsó órájában kezdõdött (23:00 után).
    Nincs hibaleírás.
    A kérést felismerte a szerver, de csak a késõbbiekben feldolgozva végre.
    A szerver feldolgozta a kérést, de az nem eredményezett kimeneti dokumentumot.
    Résztartalom.
    A kért dokumentum helye megváltozott, új cím a válaszban.
    Nincs hibaleírás.
    Szintaktikai hiba, a szerver nem értette a kérést.
    Jelszóvédett tartalom sikertelen elérése.
    Nagyszámú ilyen hiba jelentheti azt, hogy valaki (egy hacker) megpróbál elérni egy jelszóvédett oldalt felhasználói nevek és jelszavak folyamatos próbálgatásával.
    Nem tallózható könyvtár (még felhasználó azonosító és jelszó ismeretében sem) (például egy könyvtáron belüli "tallózásra" nem engedélyezett link).
    Nem létezõ oldal (URL). Érvénytelen link, mely lehet az oldalon belül, más külsõ oldalon, vagy csak a látogató vétett hibát a beírás közben.
    A szerver túl sokáig nem válaszolt. Általában lassú CGI program vagy nagyon leterhelt szerver esetén fordul elõ.
    Belsõ hiba. Általában CGI program abnormális futása után keletkezik (pl. coredump).
    Ismeretlen kéréstípus.
    Proxy szerver hibakód, melyet a távoli szerver sikeres válaszának hiányában küld a kérést küldõ kliensnek.
    Belsõ szerverhiba.
    Gateway idõtúllépés.
    Nem támogatott verziójú HTTP kérés.
    lang/tooltips_w/awstats-tt-dk.txt000064400000015667152532065620013165 0ustar00
    Et nyt besøg defineres som hver ny indkommende besøger, der ser eller browser en side, og ikke har været inde på hjemmesiden i #VisitTimeOut# minutter.
    Antal besøgende (IP-adresser), som har besøgt hjemmesiden (og som har fået vist mindst en side).
    Dette refererer til antallet af forskellige, fysiske personer, der har fået vist siden.
    Antal gange en side på hjemmesiden har været vist. (Summen af alle sider for alle besøgende).
    Sider adskiller sig fra hits, idet det kun er html-sider, men ikke billeder eller andre filer, der tæller.
    Antal gange en side, fil eller et billede på hjemmesiden er blevet vist eller hentet af nogen.
    Hits er kun med som reference, idet det oftest er Sider eller Besøg (eller Unikke besøg), man reelt ønsker statistik for.
    Dette er mængden af data hentet (sider, billeder og filer) fra hjemmesiden.
    Enhederne er KB, MB eller GB (KiloBytes, MegaBytes eller GigaBytes)
    #PROG# kan se, hvis en besøgende har fundet hjemmesiden gennem en søgning fra en af de #SearchEnginesArray# mest brugte Internet søgemaskiner eller kataloger (så som Google, Yahoo, Altavista, Lycos, Voila etc.).
    En liste med alle eksterne sider, der linker til (og er blevet brugt til at komme ind på) din hjemmeside (kun de #MaxNbOfRefererShown# mest anvendte eksterne sider vises).
    Links fra søgemaskiner er ikke medregnet, da de er medtaget for sig selv i en separat tabel.
    Denne tabel viser de mest benyttede søgesætninger og søgeord, som anvendes for at finde din hjemmeside gennem søgemaskiner og kataloger. (søgeord fra de #SearchEnginesArray# mest populære søgemaskiner og kataloger genkendes af #PROG#, så som Google, Yahoo, Altavista, Lycos, Voila etc.).
    Bemærk at det samlede antal søgninger ud fra søgeord kan være større end det samlede antal søgninger ud fra søgesætninger (det reelle antal søgninger), da to søgeord brugt i samme søgning tæller to gange (en gang for hvert ord).
    Robotter (også kaldet Spiders) er automatiske computerbesøgende, som anvendes af mange søgemaskiner. De scanner hjemmesider for at indeksere og rangordne dem, samle statistik om hjemmesider og/eller se om din hjemmeside eksisterer endnu.
    #PROG# genkender op til #RobotArray# søgerobotter.
    Al tidsrelateret statistik baseres på servertiden (OBS: ved IIS-servere er klokkeslætsangivelser normalt altid baseret på UTC-tid).
    Her vises gennemsnit (beregnet ud fra alle data mellem første og sidste besøg i det analyserede udsnit).
    Her vises sammenlagte summer (beregnet ud fra alle data mellem første og sidste besøg i det analyserede udsnit).
    Besøgenes længde er undertiden 'ukendt', fordi de ikke altid kan beregnes. Følgende er hovedårsagerne til dette:
    - Besøget var ikke afsluttet, da 'opdateringen' fandt sted.
    - Besøget startede den sidste time (efter kl. 23:00) på den sidste dag i måneden (En teknisk årsag forhindrer #PROG# i at beregne varigheden af sådanne besøg).
    Orme er automatiske computerbesøgende, der i virkeligheden består af eksterne servere, der er inficeret med en virus, som forsøger at lave et specifikt hit på din server for at inficere den også. I de fleste tilfælde udnytter sådanne orme huller i kommercielle eller ikke-opdaterede servere. Hvis dit system ikke er defineret som et sårbart system i forhold til ormen, kan du normalt bare ignorere disse hits.
    Der er kun meget få 'server orme' i verden, men de er meget aktive til tider. #PROG# er i stand til at genkende #WormsArray# kendte orme-signaturer (Nimda, Code Red osv.).
    Ingen beskrivelse af denne fejl.
    Serveren forstod forespørgslen, som udføres senere.
    Serveren har udført forespørgslen, men der er ikke noget dokument at sende.
    Partielt indhold.
    Sider er flyttet og den nye URL er givet i svaret.
    Ingen beskrivelse af denne fejl.
    Syntaksfejl, serveren forstod ikke forespørgslen.
    Der er blevet forespurgt en URL hvor brugernavn/kode var krævet.
    Et højt antal her kan betyde, at nogen (måske en hacker) forsøger at komme ind på dit site (f.eks. ved at prøve forskellige kombinationer af brugernavne/koder).
    Der er blevet forespurgt en URL der er opsat ikke tilgængelig, selv med et korrekt brugernavn/kode (for eksempel en URL i et bibliotek, der er defineret som ikke 'browsable'.).
    Der er blevet forespurgt en ikke eksisterende URL. Denne fejl skyldes ofte, at der er en forkert link på hjemmesiden, eller at en besøgende har tastet en forkert URL.
    Serveren har taget for lang tid om at besvare forespørgslen. Dette skyldes ofte et langsomt cgi-script, eller at serveren er overbelastet.
    Intern fejl. Dette skyldes ofte, at et cgi-script er afsluttet unormalt (med coredump f.eks.).
    Ukendt forespørgsel.
    Kode returneret af en HTTP server, der fungerer som proxy eller gateway, når den rigtige destinationsserver ikke svarer rigtigt på en klientforespørgsel.
    Intern serverfejl.
    Gateway timeout
    HTTP-version understøttes ikke.
    lang/tooltips_w/awstats-tt-kr.txt000064400000007656152532065620013202 0ustar00
    »õ·Î¿î ¹æ¹®Àº ÀÌÀü¿¡(#VisitTimeOut# ºÐÀ̳») ´ç½ÅÀÇ »çÀÌÆ®¿¡ Á¢¼ÓÇÏÁö ¾ÊÀº(º¸°Å³ª ºê¶ó¿ì¡ ÇÏÁö ¾ÊÀº) »õ·Î¿î ¹æ¹®ÀÚ¸¦ ³ªÅ¸³À´Ï´Ù.
    Ŭ¶óÀÌ¾ðÆ® È£½ºÆ® ¼ö(IP ÁÖ¼Ò)´Â ¹æ¹®ÇÑ »çÀÌÆ® ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.(ÃÖ¼ÒÇÑ ÇÑ ÆäÀÌÁö¶óµµ º» »çÀÌÆ®)
    ÀÌ ÀÚ·á´Â ÀϺ° ¹°¸®ÀûÀ¸·Î ´Ù¸¥ »ç¿ëÀÚ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
    »çÀÌÆ®¿¡¼­ º»(view) ÆäÀÌÁö ȸ¼ö¸¦ ³ªÅ¸³À´Ï´Ù. (¸ðµç ¹æ¹®ÀÚÀÇ ÇÔ)
    ÀÌ ÀÚ·á´Â À̹ÌÁö, ÆÄÀϰú ´Þ¸® HTML ÆäÀÌÁö¿¡¼­ÀÇ "Á¶È¸¼ö(hit)"¿Í´Â ´Ù¸¨´Ï´Ù.
    ÆäÀÌÁö, À̹ÌÁö, ÆÄÀÏÀ» º¸°Å³ª ´Ù¿î·ÎµåÇÑ È¸¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
    ÀÌ ÀÚ·á´Â ÂüÁ¶¿ëÀ¸·Î¸¸ Á¦°øµË´Ï´Ù. ¿Ö³ÄÇÏ¸é º» "ÆäÀÌÁö"´Â Á¾Á¾ ½ÃÀåÁ¶»ç ¸ñÀûÀ¸·Î »ç¿ëµÉ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
    ÀÌ Á¤º¸µéÀº ´Ù¿î·ÎµåÇÑ ¸ðµç ÆäÀÌÁö, À̹ÌÁö, ÆÄÀÏ µéÀ» Kb´ÜÀ§·Î ³ªÅ¸³À´Ï´Ù.
    #PROG# ´Â #SearchEnginesArray#ÀÇ °Ë»öÀ¸·Î ´ç½ÅÀÇ »çÀÌÆ®¿¡ ´ëÇÑ Á¢±ÙÀ» ½Äº°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ´ç½ÅÀÇ »çÀÌÆ®¿¡ ¸µÅ©µÈ ¸ðµç ¿ÜºÎ ÆäÀÌÁö
    (#MaxNbOfRefererShown#´Â °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â ¿ÜºÎ ÆäÀÌÁö¸¦ ³ªÅ¸³À´Ï´Ù.) °Ë»ö ¿£Áø¿¡ ÀÇÇÑ °á°úÆäÀÌÁö¿¡ »ç¿ëµÈ ¸µÅ©´Â ¿©±â¿¡¼­ Á¦¿ÜµË´Ï´Ù. (ÀÌ Å×À̺íÀÇ ÀÌÀü¿¡ ÀÌ¹Ì ³ª¿Í ÀÖ½À´Ï´Ù.)
    ÀÌ Å×À̺íÀº ´ç½ÅÀÇ »çÀÌÆ®¿¡¼­ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â Ű¿öµå ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. (°¡Àå ¾ÖÈ£ÇÏ´Â °Ë»ö¿£Áø Yahoo, Altavista, Lycos, Google, Voilaµî°ú °°Àº #SearchEnginesArray#ÀÇ Å°¿öµå¸¦ #PROG#´Â ½Äº°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ·Îº¸Æ® (¶§·Î´Â ½ºÆÄÀÌ´õ¸¦ ¶æÇÔ)´Â ¸¹Àº °Ë»ö ¿£Áø¿¡¼­ »ç¿ëµÇ´Â ÀÚµ¿È­µÈ À¥Á¢¼Ó µµ±¸ÀÔ´Ï´Ù. ÀÌ ¿£ÁøÀº (1) À¥»çÀÌÆ®¸¦ ¸ñ·ÏÈ­ÇÏ°í ¼ø¼­¸¦ ºÎ¿©Çϰí (2) ÀÎÅÍ³Ý À¥ »çÀÌÆ®ÀÇ Åë°è¸¦ ¼öÁýÇϰí (3) ´ç½ÅÀÇ »çÀÌÆ®°¡ ¿©ÀüÈ÷ »ç¿ë°¡´ÉÇÑÁö Á¶»çÇÕ´Ï´Ù.
    #PROG#´Â #RobotArray# ·Îº¸Æ®¸¦ ½Äº°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ÀÌ ¿À·ù¿¡ ´ëÇÑ ¼³¸íÀÌ ¾ø½À´Ï´Ù.
    ¿äûÀÌ ¼­¹ö¿¡ ÀÇÇØ ´õÀÌ»ó ÁøÇàµÉ ¼ö ¾ø½À´Ï´Ù.
    ¼­¹ö°¡ ¿äûÀ» ó¸®ÇßÁö¸¸ Àü¼ÛÇÒ ¹®¼­°¡ ¾ø½À´Ï´Ù.
    ÀϺΠ³»¿ë.
    ¿äûµÈ ¹®¼­´Â ¿Å°ÜÁ®¼­ ´Ù¸¥ ÁÖ¼Ò¸¦ »ç¿ëÇÕ´Ï´Ù.
    ÀÌ ¿À·ù¿¡ ´ëÇÑ ¼³¸íÀÌ ¾ø½À´Ï´Ù.
    ±¸¹® ¿À·ù, ¼­¹ö°¡ ÀÌ ¿äûÀ» ¾Ë ¼ö ¾ø½À´Ï´Ù.
    URL¿¡ Á¢¼ÓÀ» À§Çؼ­´Â ·Î±×ÀÎ/ÆÐ½º¿öµå °¡ ÇÊ¿äÇÕ´Ï´Ù.
    ÀÌ Ç׸ñÀÇ ÃÖ°í°ªÀº ´©±º°¡ Å©·¢À» ½ÃµµÇϰųª ´ç½ÅÀÇ »çÀÌÆ®¿¡ Á¢¼ÓÀ» ½ÃµµÇϰí ÀÖ´Â °Í(´Ù¸¥ ·Î±×ÀÎ/ÆÐ½º¿öµå¸¦ »ç¿ëÇÏ¿© ½ÃµµÇϴ°Í) À» ÀǹÌÇÕ´Ï´Ù.
    »ç¿ë°¡´ÉÇÏ°Ô ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Â URL¿¡ ´ëÇÑ Á¢¼Ó½Ãµµ ¿À·ù ÀÔ´Ï´Ù. (¿¹¸¦ µé¾î, µð·ºÅ丮¿¡¤Ô´ëÇÑ "ºê¶ó¿ì¡"ÀÌ Á¤ÀǵÇÁö ¾ÊÀº °æ¿ìÀÔ´Ï´Ù.)
    Á¸ÀçÇÏÁö ¾Ê´Â URL¿¡ ´ëÇÑ Á¢¼Ó ½Ãµµ ¿À·ùÀÔ´Ï´Ù. ÀÌ ¿À·ù´Â Á¾Á¾ ´ç½ÅÀÇ »çÀÌÆ® ¾îµò°¡¿¡¼­ À߸øµÈ ¸µÅ©°¡ ÀÖ¾î ¹æ¹®ÀÚµéÀÌ À߸øµÈ URL·Î Á¢¼ÓÇÏ´Â °æ¿ì¿¡ ¹ß»ýÇÕ´Ï´Ù.
    ¼­¹ö¿¡°Ô ¿äûµÈ °ÍÀÌ ³Ê¹« ¸¹Àº ÀÀ´ä ½Ã°£À» ¿ä±¸ÇÕ´Ï´Ù. ÀÌ ¿À·ù´Â Á¾Á¾ ´À¸° CGI ½ºÅ©¸³Æ® ¹®Á¦À̰ųª À¥¼­¹ö »ç¿ë·®ÀÌ ¸¹Àº °æ¿ì¿¡ ¹ß»ýÇÕ´Ï´Ù.
    ³»ºÎ ¿À·ù. ÀÌ ¿À·ù´Â Á¾Á¾ CGIÇÁ·Î±×·¥ÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÇ¾úÀ» ¶§ ¹ß»ýÇÕ´Ï´Ù.
    ¿äûµÈ µ¿ÀÛÀ» ¾Ë¼ö ¾ø½À´Ï´Ù.
    HTTP ¼­¹ö¿¡ ÀÇÇØ ¹Ý¼ÛµÈ Äڵ尡 ÇÁ¶ô½Ã³ª °ÔÀÌÆ®¿þÀÌ·Î µ¿ÀÛÇÕ´Ï´Ù. ´ë»ó ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ Á¤È®ÇÏ°Ô ÀÀ´äÀ» ÇÏÁö ¸øÇÕ´Ï´Ù.
    ³»ºÎ ¼­¹ö ¿À·ù.
    °ÔÀÌÆ®¿þÀÌ ½Ã°£Ãʰú.
    HTTP ¹öÀüÀÌ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.
    lang/tooltips_w/awstats-tt-sk.txt000064400000010101152532065620013156 0ustar00
    Noví návštevníci su definovaní ako ka¾dý prichádzajuci (prehliadajúci si alebo prechádzajúci), kto sa na stránky nepripojil posledních #VisitTimeOut# min.
    Poèet klientov (IP address), ktorí pri¹li na stránky (a ktori si prehliadli aspoò jednu stránku). Toto èíslo prislucha èíslu roznych fyzických osob, ktori navštívili stránky ktorýkolvek jeden den.
    Poèet kolkokrát bola stránka na tomto servery pozreta (Suèet za všetky navštevujucí a ich návštevy). To se liši od Hitov tak, ¾e su zapoèítane iba stránky (nie obrázky a ostatne...).
    Poèet kolkokrát bola stránka, obrázok, subor na tomto servery stiahnuta (Suèet za všetky navštevující a jejich návštevy). Toto èíslo je uvedene kvoli porovnániu zo Stránkami.
    Velkost všetkych stránok, obrázkov a suborov stiahnutych z tohoto serveru.
    #PROG# rozpozná prístup na server od vyhladávanie z #SearchEnginesArray# najznámejších internetových vyhledávaèov a zoznamov (ako je Yahoo, Altavista, Lycos, Google, Voila, atd...).
    Seznam všech externích stránek (mimo server), které byly pou¾ity jako odkaz na tento server (Je zobrazeno jen #MaxNbOfRefererShown# nejèastìjších). Odkazy pou¾ité z vyhledávaèù nejsou zaøazeny, nebo» je obsahuje jiný údaj.
    Tato tabulka zobrazuje zoznam nejèastejsie zadavaných výrazov, ktoré boly zadávane vo vyhladávaèoch k najdeniu tohoto serveru. (Výrazy od #SearchEnginesArray# najznámejších vyhladávaèov a zoznamov su #PROG# rozpoznany, ako je Yahoo, Altavista, Lycos, Google, Voila, atd...).
    Roboti (niekedy oznaèováni ako pavuci alebo èmuchalové) su poèítaèoví automat. návštevníci pou¾ivaní vela vyhledávajucimi slu¾bami k (1) indexovániu a hodnoteniu, (2) zbieraniu statistik z webov a/alebo (3) k zistsniu, ci stránky stále existuju.
    #PROG# je schopmy rozpoznat #RobotArray# robotov.
    Bolo vytvoreno nové miesto s datami a odeslane.
    Po¾adavka bola rozeznana, ale bude vybaveny neskor.
    Po¾iadavka bola rozeznana, ale nieje co odoslat spet.
    Poziadavka bol zpracovany iba èiastoène.
    Po¾adovaný dokument bol presunuty a adresa bola odoslana.
    Dokument sa doèasne nachádza na inej adrese.
    Syntaktická chyba, chybný po¾iadavok.
    Po¾iadavka neobsahovala ¾iadanu autorizaciu meno/heslo pre vstup na stránku. Ak se vyskytujeèasto,pokuša sa niekdo o prielom-hack.
    Po¾iadavka bola odmietnuta serverom (neprístupne data, neviditelný adresár...).
    Pokus o vstup na neexistujuci stránku alebo soubor.
    Cela po¾iadavka nebola serveru od klienta odoslana v po¾adovanom èase (chyba klienta alebo serveru alebo skriptu).
    Chyba serveru (èasto sa vyskytuje pri chybnom zpracovaní skriptu).
    Po¾iadavku, ktora bola zaslana nieje mo¾no vyriedit, pretoze ho server nevie zpracovat.
    Server prijal chybnu po¾iadavku od iného serveru (proxy nebo brány).
    Chyba serveru, slu¾ba nieje k dispozicii.
    Vypršal èasový interval u proxy serveru alebo brány.
    Nepodporovaná verzia protokolu HTTP.
    lang/tooltips_w/awstats-tt-br.txt000064400000017352152532065620013163 0ustar00
    Uma nova visita é definida como cada novo visitante entrando (vendo ou navegando por uma página) que não estava conectado a seu site pelos últimos #VisitTimeOut# minutos.
    Número de hosts clientes (endereços IP) que vieram visitar o site (e que viram pelo menos uma página).
    Estes dados se referem ao número de pessoas físicas diferentes que chegaram no site.
    Número de vezes que uma página do site é vista (Soma de todos os visitantes e todas visitas).
    Estes dados diferem dos "hits" pois somente conta a exibição de páginas HTML, enquanto os "hits" contam também imagens e outros arquivos.
    Número de vezes uma página, imagem, ou arquivo do site é visto ou recebido por alguém.
    Estes dados são fornecidos apenas como referência, já que o número de "páginas" visto é freqüentemente preferido para fins de marketing.
    Esta parte de informação refere-se à quantidade de dados recebidos de todas páginas, imagens e arquivos de seu site.
    Unidades estão em KB, MB ou GB (KiloBytes, MegaBytes ou GigaBytes)
    #PROG# reconhece cada accesso ao seu site após uma busca a partir das #SearchEnginesArray# mais populares Ferramentas de Busca da Internet e Diretórios (como Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Lista de todas páginas externas que foram utilizadas como origem de acesso (e entrada) ao seu (Somente as #MaxNbOfRefererShown# páginas externas mais freqüentemente utilizadas são exibidas). Links utilizados pelos resultados de ferramentas de busca não são incluídos aqui pois já foram incluídos na linha anterior desta tabela.
    Esta tabela mostra a lista das mais freqüentes palavras-chave ou frases usadas para encontrar seu site a partir de Ferramentas de Busca da Internet e Diretórios. (Palavras-chave das #SearchEnginesArray# mais populares Ferramentas de Busca e Diretórios são reconhecidas pelo #PROG#, como Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Note que o número total de buscas por palavras-chave pode ser maior que o número total de buscas por frases (número real de buscas) porque quando 2 palavras-chave são usadas em uma mesma busca, a busca é contada em dobro para palavras-chave (uma para cada palavra).
    Robots (também chamados de Spiders) são computadores visitantes automáticos utilizados por várias ferramentas de busca que podem rastrear seu web site para indexá-lo e classificá-lo, coletar estatisticas em Web sites da Internet e/ou verificar se seu site ainda está disponível.
    #PROG# é capaz de reconhecer até #RobotArray# robots.
    Todas as estatíticas de tempo relatadas são baseadas no horário do servidor.
    Aqui os dados reportados são: valores médios (calculados a partir de todos os dados entre a primeira e última visitas no intervalo analisado)
    Aqui os dados reportados são: somas cumulativas (calculadas a partir de todos os dados entre a primeira e última visitas no intervalo analisado)
    Some Duraçãoes de visitas são 'desconhecidas' porque não podem ser sempre calculadas. Esta é a principal razão para isso:
    - A Visita não tinha sido encerrada quando a 'atualização' ocorreu.
    - Visitas iniciadas na última hora (depois de 23:00) do último dia do mês (Uma razão técnica previne #PROG# de calcular as durações destas sessões)
    Worms (vermes) são visitas automáticas de computadores que na realidade são servidores externos, infectados por um vírus, que tenta realizar hits específicos em seu site para infectá-lo. Na maioria dos casos, estes "vermes" exploram defeitos ("bugs") de servidores. Se o seu sistema não é o alvo sensível do worm, você pode simplesmente ignorar estes hits.
    Existem poucos 'vermes de servidor' no mundo, mas eles costumam ser muito ativos às vezes. #PROG# é capaz de reconhecer #WormsArray# assinaturas conhecidas de vermes (nimda,code red,...).
    Erro sem descrição.
    Requisição foi entendida pelo servidor, mas será processada depois.
    O servidor processou a requisição, mas não há documento a ser enviado.
    Conteúdo parcial.
    O documento requisitado foi movido e está agora em outro endereço fornecido como resposta.
    Erro sem descrição.
    erro de sintaxe, o servidor não entendeu a requisição.
    Tentou alcançar uma URL em que um par usuário/senha foi requisitado.
    Um grande número neste item pode significar que alguém (como um hacker) está tentando quebrar, ou entrar em seu site (esperando entrar em uma área segura tentando diferentes pares de usuários/senhas, por exemplo).
    Tentou alcançar uma URL não configurada como acessível, mesmo com um par userio/senha (por exemplo, uma URL com um diretório não definido como "navegável".).
    Tentou alcançar uma URL inexistente. Este erro freqüentemente significa que há um link inválido em algum ponto de seu site ou que um visitante errou a digitaço de uma URL.
    O servidor levou muito tempo para responder a requisição. Este erro freqüentemente indica ou um script CGI lento que o servidor teve que interromper ou um servidor Web extremamente congestionado.
    Erro interno. Este erro é freqüentemente causado por um programa CGI que terminou de forma anormal (por exemplo um coredump).
    Ação requisitada desconhecida.
    Código retornado pelo servidor HTTP que trabalha como proxy ou gateway quando um servidor real algo não respondeu com sucesso à requisição do cliente.
    Erro interno do servidor.
    Tempo esgotado no Gateway.
    Versão de HTTP Não Suportada.
    lang/tooltips_w/awstats-tt-jp.txt000064400000007723152532065620013172 0ustar00
    #VisitTimeOut# 分����訪�数。
    最低1ページを訪���クライアントホスト(IPアドレス)。
    �れ�訪�者�実数��。
    ページ�表示�れ�回数(����訪�者�訪���計)。
    ��データ�「件数������HTMLファイル���入�����。
    ページ�画��ファイル�表示�れ�回数。
    �照程度��使�����。
    ����ページ�画��ファイル�ダウンロード�よるデータ転��。
    ��� KB �MB ��� GB 。
    人気��る検索エンジン(Yahoo�Altavista�Lycos�Google�Voila��)��検索�よるアクセス。
    ユーザー(コンピュータ)���サイト�����情報を得�外部ページ。
    ��サイト�アクセス�る���検索エンジン�入力�れ�キーワード�リスト。
    ロボット(別�スパイダー)���ウェブ中を動�回��全��コンテンツを中央サー�ー上��存�るコンピューター・プログラム。
    �れら�データ�サー�ー時間�基������。
    最��ら最後���訪��集��データ�よ��計算��平�数。
    最��ら最後���訪��集��データ�よ��計算���数。
    POST ��功。���PUT �新��オブジェクトを作�。
    �求���付���処�未完了。
    サー�ー��求を�付����返�情報���。
    サー�ー��情報�一部を得�。
    �求�れ�情報���久的�移動��。
    �求�れ�情報��一時的�移動��。
    �求を実行����。(構文��正)
    情報��求��証を必���る。�����証�拒�。
    �求�拒�。�証��完全。
    �求�れ�情報(ファイル)���。
    サー�ー�待機時間内�クライアント��求を�れ����。
    予期���サー�ーエラー�����求を実行������。
    サー�ー���求�れ�機能をサ�ート�����。
    クライアントより見��ゲートウエイ���プロキシーサー��接続先サー��応答�妥当�����を示�。
    サービス(サー�ー)�高負�。Retry-Afterヘッダ�示�時間後��緩和�れる。応答文中�Retry-Afterヘッダ���れ��クライアント�応答を500番��等�扱�必���る。
    ゲートウエイ���プロキシ�応答�ゲートウエイ�指定時間内�得られ��。
    HTTP �ージョンをサ�ート�����。
    lang/tooltips_w/awstats-tt-fr.txt000064400000015055152532065620013165 0ustar00
    On considère une nouvelle visite pour chaque arrivée d'un visiteur consultant une page et ne s'étant pas connecté dans les dernières #VisitTimeOut# mn.
    Nombre de hotes (adresse IP) utilisés pour accéder au site (et voir au moins une page).
    Ce chiffre reflète le nombre de personnes physiques différentes ayant un jour accédées au site.
    Nombre de fois qu une page du site est vue (Cumul de tout visiteur, toute visite).
    Ce compteur différe des "hits" car il ne comptabilise que les pages HTML et non les images ou autres fichiers.
    Nombre de fois qu une page, image, fichier du site est vu ou téléchargé par un visiteur.
    Ce compteur est donné à titre indicatif, le compteur "pages" etant préféré.
    Nombre d'octets téléchargés lors des visites du site.
    Il s'agit aussi bien du volume de données du au chargement des pages et images que des fichiers téléchargés.
    #PROG# est capable de reconnaitre l'acces au site issu d'une recherche depuis les #SearchEnginesArray# moteurs de recherche Internet les plus connus (Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Liste des pages de sites externes contenant un lien suivi pour accéder à ce site (Seules les #MaxNbOfRefererShown# pages externes les plus utilisées sont affichées). Les liens issus du résultat d'un moteur de recherche connu n'apparaissent pas ici, car comptabilisés à part sur la ligne juste au-dessus.
    Ce tableau offre la liste des phrases ou mots clés les plus souvent utilisés pour retrouver et accéder au site depuis un moteur de recherche Internet (Les recherches depuis #SearchEnginesArray# moteurs de recherche parmi les plus populaires sont reconnues, comme Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Notez que le nombre total de recherche de mots clés peut être supérieur au nombre total de recherche de phrases clés (nombre réel de recherche) dans la mesure où une recherche est comptée 2 fois (1 pour chaque mot) si 2 mots furent utilisés comme critères.
    Les robots sont des automates visiteurs scannant le site dans le but de l'indexer, d'obtenir des statistiques sur les sites Web Internet ou de vérifier sa disponibilié.
    #PROG# reconnait #RobotArray# robots.
    Toutes les statistiques en rapport avec le temps sont basées sur les heures du serveur.
    Ici les données rapportées sont des: valeurs moyennes (calculées à partir des données entre la première et dernière visite de la période analysée)
    Ici les données rapportées sont des: sommes cumulées (calculées à partir des données entre la première et dernière visite de la période analysée)
    Certaines Durée de visites sont 'inconnues' car elles ne peuvent pas toujours etre calculées. En voici les raisons principales:
    - La visite n'étaient pas terminée lorsque la mise à jour eut lieu (Sera comptée à la prochaine mise à jour).
    - La visite a commencé la derniere heure (après 23:00) du dernier jour du mois (Un raison technique empêche #PROG# de calculer la durée des visites de telles sessions).
    Les Vers (Worms) sont des visiteurs automatiques qui sont en fait des serveurs externes infectés par un virus, réalisant des hits particuliers sur votre serveur afin de l'infecter à son tour. Dans la plupart des cas, de telles attacks exploitent des bugs des serveurs commerciaux et non à jour. Si votre system n'est pas celui indiqué comme cible sensible du vers, vous pouvez ignorer de tel hits.
    Il existe très peu de 'vers serveur' mais il sont très actifs à certaines période. #PROG# reconnait #WormsArray# signatures de vers connus (nimda,code red,...).
    Contenu partiel renvoyé.
    La requête a été enregistrée par le serveur mais sera exécutée plus tard.
    Le serveur a traité la demande mais il n'existe aucun document à renvoyer.
    Contenu partiel renvoyé.
    Le document réclamé a été déplacé et se trouve maintenant à une autre adresse mentionnée dans la réponse.
    Aucun descriptif pour cette erreur.
    Erreur de syntaxe, le serveur n'a pas compris la requête.
    Tentatives d'accès à une URL nécessitant identification avec un login/mot de passe invalide.
    Un nombre trop élévé peut mettre en évidence une tentative de crackage brute du site (par accès répété de différents logins/mots de passe).
    Tentatives d'accès à une URL non configurée pour etre accessible, même avec une identification (par exemple, une URL d'un répertoire non défini comme étant "listable").
    Tentatives d'accès à une URL inexistante. Il s'agit donc d'un lien invalide sur le site ou d'une faute de frappe d'un visiteur qui a saisie une mauvaise URL directement.
    Le serveur mis un temps trop important pour répondre à la requête. Il peut s'agir d'un script CGI trop lent sur le serveur forcé d'abandonner le traitement ou d'une saturation du site.
    Erreur interne au serveur. Cette erreur est le plus souvant renvoyé lors de l'arrêt anormal d'un script CGI (par exemple suite à un coredump du CGI).
    Le serveur ne prend pas en charge l'action demandée.
    Code renvoyé par un serveur HTTP qui fonctionne comme proxy ou gateway lorsque le serveur réel consulté ne réagit pas avec succès à la demande du client.
    Erreur interne au serveur.
    Gateway Time-out.
    Version HTTP non supporté.
    lang/tooltips_w/awstats-tt-es.txt000064400000014214152532065620013161 0ustar00
    Se considera un nueva vista por cada nuevo visitante que consulta una página y que no haya accedido al sitio en los últimos #VisitTimeOut# mins..
    Número de Servidores (direcciones IP) que entran a un sitio (y que por lo menos visitan una página).
    Esta cifra refleja el número de personas físicas diferentes que hayan accedido al sitio en un día.
    Número de ocasiones que una página del sitio ha sido vista (La suma de todos los visitantes incluyendo múltiples visitas).
    Este contador se distingue de "hits" porque cuenta sólo las páginas HTML y no los gráficos u otros archivos o ficheros.
    El número de ocasiones que una página, imagen, archivo o fichero de un sitio es visto o descargado por un visitante.
    Este contador sirve de referencia, pero el contador de "páginas" representa un dato mercadotécnico generalmente más útil y por lo tanto se recomienda.
    El número de kilo bytes descargados por los visitantes del sitio.
    Se refiere al volumen de datos descargados por todas las páginas, imágenes y archivos o ficheros medidos en kilo bytes.
    El programa #PROG# es capaz de reconocer una visita a su sitio luego de cada búsqueda desde cualquiera de los #SearchEnginesArray# motores de búsqueda y directorios Internet más populares (Yahoo, Altavista, Lycos, Google, Terra, etc...).
    Lista de páginas de sitios externos utilizadas para acceder o enlazarse con su sitio (Sólo las #MaxNbOfRefererShown# páginas más utilizadas se encuentras enumeradas). Los enlaces utilizados por los motores de búsqueda o directorios son excluidos porque ya han sido contabilizados en el rubro anterior.
    Esta tabla muestra la lista de las palabras clave más utilizadas en los motores de búsqueda y directorios Internet para encontrar su sitio. (El programa #PROG# reconoce palabras clave usadas en los #SearchEnginesArray# motores de búsqueda más populares, tales como Yahoo, Altavista, Lycos, Google, Voila, Terra etc...).
    Los Robots son visitantes automáticos que escanean o viajan por su sitio para indexarlo, o jerarquizarlo, para recopilar estadísticas de sitios Web, o para verificar si su sitio se encuentra conectado a la Red.
    El programa #PROG# reconoce hasta #RobotArray# robots.
    Todos los tiempos relacionados con las estadísticas están basados en tiempos de servidor.
    Aquí, las fechas reportadas son: valores medios (calculado desde todos los datos entre las primeras y los ultimas visitas en el rango analizado)
    Aquí, las fechas reportadas son: sumas acumulativas (calculado desde todos los datos entre las primeras y los ultimas visitas en el rango analizado)
    Algunas Duraciones de las visitas son 'desconocidas' porque no pueden ser calculadas siempre. La razón principal de esto es:
    - La visita no fue acabada cuando ocurrió la 'actualización'.
    - La visita comenzó en la hora anterior (después de las 23:00) del pasado día de un mes (la razón técnica de previene a #PROG# de la duración calculada de tales sesiones)
    Error sin descripción.
    La solicitud ha sido computada pero el servidor la procesará más tarde.
    El servidor ha procesado la solicitud pero no existen documentos para enviar.
    Contenido parcial.
    El documento solicitado ha sido reubicado y se encuentra en un URL proporcionado en la misma respuesta.
    Error sin descripción.
    Error de sintaxis, el servidor no ha comprendido su solicitud.
    Número de intentos por acceder un URL que exige una combinación usuario/contraseña que ha sido invalida..
    Un número de intentos muy elevado pudiera sugerir la posibilidad de que un hacker (o pirata) ha intentado entrar a una zona restringida del sitio (p.e., intentando múltiples combinaciones de usuario/contraseña).
    Número de intentos por acceder un URL configurado para no ser accesible, aún con una combinación usuario/contraseña (p.e., un URL previamente definido como "no navegable").
    Número de intentos por acceder un URL inexistente. Frecuentemente, éstos se refieren ya sea a un enlace (link) inválido o a un error mecanográfico cuando el visitante tecleó el URL equivocado.
    El servidor ha tardado demasiado tiempo para responder a una solicitud. Frecuentemente se debe ya sea a un programa CGI muy lento, el cual tuvo que ser abandonado por el servidor, o bien por un servidor sobre-saturado.
    Error interno. Este error generalmente es causado por una terminación anormal o prematura de un programa CGI (p.e., un CGI corrompido o dañado).
    Solicitud desconocida por el servidor.
    Código retornado por un servidor de protocolo HTTP el cual funciona como proxy o puente (gateway) cuando el servidor objetivo no funciona o no interpreta adecuadamente la solicitud del cliente (o visitante).
    Error interno del servidor.
    Pasarela fuera de linea.
    Versión de protocolo HTTP no soportada.
    lang/tooltips_w/awstats-tt-cn.txt000064400000005101152532065620013145 0ustar00
    ´Ë×Ö¶ÎΪ²Î¹ÛÍøÕ¾µÄ×ÜÈ˴Σ¬´ÓÏàͬµØÖ·À´ä¯ÀÀ±¾ÍøÕ¾£¬Ê±¼ä¼ä¸ôÐëÖÁÉÙ#VisitTimeOut#·ÖÖӲŻáÔټǼһ´Î¡£
    ´Ë×Ö¶ÎΪ²Î¹ÛÍøÕ¾µÄÈËÊý¡£ÒÔ´Ó²»Í¬µÄ¼ÆËã»úIPä¯ÀÀ±¾ÍøÕ¾µÄ¸öÊýÀ´¼ÆËãÍøÕ¾µÄÈËÊý¡£
    ´Ë×Ö¶ÎΪËùÓвιÛÕßËùÓвιÛÖÐÍøÒ³·ÃÎʵÄ×Ü´ÎÊý¡£Ö»¼ÇÂ¼ÍøÒ³(.html£¬²»°üÀ¨Í¼Æ¬£¬CSSµÈÎļþ)µÄ·ÃÎÊ´ÎÊý¡£
    ´Ë×Ö¶ÎΪÇëÇó¶ÁÈ¡µÄ×Ü´ÎÊý£¬°üº¬ÍøÒ³Îļþ£¬Í¼Æ¬Îļþ£¬Ó°ÏñÎļþµÈ¡£
    ÕâЩÊý¾Ý½öÓÃ×ö²Î¿¼£¬¡°ÍøÒ³·ÃÎÊÁ¿ Page View¡±¸ü¶àÓÃÓÚÉÌÒµÆÀ²â
    ´Ë×Ö¶ÎΪ·þÎñÆ÷ÎļþÄÚÈݵÄÊý¾ÝÁ÷Á¿£¬°üº¬ÍøÒ³Îļþ£¬Í¼Æ¬Îļþ£¬Ó°ÏñÎļþµÈ¡£
    ´Ë×Ö¶ÎΪ¼Ç¼ʹÓÃÕß´ÓÄÇЩËÑÑ°ÍøÕ¾½øÈë´ËÍøÕ¾¡£#PROG# »á×Ô¶¯·ÖÎö×ʹÓõÄ#SearchEnginesArray#¸öËÑË÷ÒýÇæ£¬Èç(Yahoo! Google...)¡£
    ÏÔʾÆäËüÍøÕ¾µÄÍøÒ³ÓÐÆäÄÚÈÝÁ¬½áÖÁ±¾Õ¾µÄÍøÒ³ÁÐ±í¡£ ϵͳ»áÁгö½Ï³£Á¬½áµÄǰ#MaxNbOfRefererShown#¸öÍøÒ³ÍøÖ·¡£
    Õâ¸ö±í¸ñÏÔʾʹÓÃÕßÔÚËÑÑ°ÍøÕ¾Öнϳ£Ê¹ÓõĹؼü´ÊÀ´µÇÈëÍøÕ¾¡£ÏµÍ³»á¼Ç¼×ʹÓõÄ#SearchEnginesArray#¸öËÑÑ°ÍøÕ¾¹Ø¼ü´Ê¡£
    ËÑÑ°ÍøÕ¾µÄ»úÆ÷ÈË(Robots)»á×Ô¶¯µÄÕÒÑ°ÍøÕ¾ÄÚµÄËùÓÐÄÚÈÝ¡£
    #PROG#¼Ç¼½Ï³£Ê¹ÓõÄ#RobotArray#¸ö»úÆ÷ÈËÕÒÑ°ÍøÕ¾µÄ¼Ç¼¡£
    ûÓйØÓÚÕâÏî´íÎóÂëµÄÃèÊö
    ÍøÒ³·þÎñÆ÷²»Á˽âʹÓÃÕßµÄÐèÇó
    ÍøÒ³·þÎñÆ÷ËÄ´¦ÀíÍêʹÓÃÕßµÄÐèÇ󣬵«ÊÇȴûÓÐÎļþ´«Ëͳö
    ÍøÒ³ÄÚÈݶÁÈ¡²»ÍêÈ«
    ÕÒѰµÄÍøÒ³ÒѾ­ÒƵ½ÆäËüµØ·½£¬¶øÇÒÒÔÒѾ­ÕÒѰµ½ÁË
    ÍøÒ³Ô­ÏÈÕÒ²»µ½£¬ÏÖÔÚÒѾ­ÔÚ±ðµÄµØ·½ÕÒµ½ÁË
    Óï·¨´íÎó£¬ÍøÒ³·þÎñÆ÷²»Á˽âʹÓÃÕßµÄÐèÇó
    ³¢ÊÔÁ¬½áÖÁÐèÊäÈëÃÜÂëµÄÍøÒ³ÍøÖ·¶ø·¢Éú´íÎó
    ³¢ÊÔÁ¬½áÖÁ먦·Åä¯ÀÀµÄÍøÒ³ÍøÖ·¶ø·¢Éú´íÎó
    ³¢ÊÔÁ¬½áÖÁ²»´æÔÚµÄÍøÒ³ÍøÖ·¶ø·¢Éú´íÎó
    ÍøÒ³·þÎñÆ÷»¨·ÑÌ«¶àʱ¼ä´¦ÀíÕâ¸öÐèÇó
    ÄÚ²¿·þÎñÆ÷·¢Éú´íÎó£¬Ò»°ãÊÇ CGI ³ÌÐò·¢ÉúÎÊÌâ
    ²»Á˽âÐèÇó
    ·¢¸ø´úÀí·þÎñÆ÷»òÍø¹Ø·þÎñÆ÷µÄÒ³ÃæÇëÇóûÓгɹ¦·µ»Ø¸ø¿Í»§¶Ë
    ÄÚ²¿·þÎñÆ÷·¢Éú´íÎó
    ͨѶ³¬Ê±
    Õâ¸ö HTTP µÄ°æ±¾Ã»ÓÐÖ§³Ö
    lang/tooltips_w/awstats-tt-ba.txt000064400000012235152532065620013135 0ustar00
    Novi posjet se defini¹e kao svaki novi dolazeæi posjetitelj (koji pregleda stranicu) koji se nije konektovao na va¹ sajt u toku posljednjih #VisitTimeOut# minuta.
    Broj korisnièkih raèunara (IP adresa) koji su posjeæivali sajt (i vidjeli najmanje jednu stranicu).
    Ovaj podatak govori o broju fizièki razlièitih osoba koji su posjetili sajt tokom jednog dana.
    Koliko puta je jedna stranica sajta bila pregledana (Suma za sve posjetitelje tokom svih posjeta).
    Ovaj podatak se razlikuje od "pogodaka" po tome ¹to broji samo HTML stranice za razliku od slika i drugih datoteka.
    Koliko puta je jedna stranica, slika, datoteka sajta bila pregledana ili downloadovana od strane nekoga.
    Ovaj podatak slu¾i samo kao referenca, po¹to je broj "stranica" znatno korisniji za razne marketin¹ke potrebe.
    Ova informacija govori o kolièini downloadiranih podataka za sve stranice, slike i datoteke u okviru va¹eg sajta.
    Jedinice su Kb, Mb ili Gb (kilobajti, megabajti ili gigabajti). Ovaj podatak je koristan kako biste pratili ostvareni transfer sa va¹e stranice.
    #PROG# prepoznaje svaki pristup va¹em sajtu nakon pretrage pomoæu #SearchEnginesArray# najpopularnijih Internet pretra¾ivaèa i direktorija (kao ¹to su Yahoo, Altavista, Lycos, Google, Voila, itd...).
    Lista svih vanjskih stranica na kojima se nalazi link koji je korisnik upotrijebio da bi do¹ao na va¹u stranicu (Samo #MaxNbOfRefererShown# najèe¹æih linkova je prikazano). Linkovi koji su rezultat pretra¾ivaèa su iskljuèeni jer smo ih veæ prikazali u prethodnom redu ove tabele.
    Ova tabela prikazuje listu kljuènih rijeèi koje se najèe¹æe koriste za pronala¾enje va¹eg sajta pomoæu Internet pretra¾ivaèa ili direktorija. (#PROG# prepoznaje kljuène rijeèi #SearchEnginesArray# najèe¹æih pretra¾ivaèa i direktorija, meðu kojima su i Yahoo, Altavista, Lycos, Google, Voila, itd...).
    Roboti (koji se ponekad nazivaju Spideri) su raèunarski programi koje koriste mnogi pretra¾ivaèi kako bi analizirali va¹u stranicu i time (1) indeksirali i rangirali va¹u stranicu, (2) prikupili statistike o Web stranicama i/ili (3) provjerili da li je va¹ sajt jo¹ uvijek online.
    #PROG# mo¾e prepoznati do #RobotArray# robota.
    Nema opisa za ovu gre¹ku.
    Server je razumio zahtjev, ali æe ga obraditi kasnije.
    Server je obradio zahtjev ali nema ¹ta da po¹alje korisniku.
    Djelomièan sadr¾aj (korisnik je prekinuo otvaranje stranice).
    Tra¾eni dokument je premje¹ten na novo mjesto i nova adresa je data korisniku (redirekcija).
    Tra¾eni dokument je premje¹ten na novo mjesto i nova adresa je data korisniku (redirekcija).
    Sintaksna gre¹ka, server nije razumio zahtjev.
    Korisnik je poku¹ao otvoriti URL za koji je potrebno dati login/¹ifru.
    Veliki broj pod ovom stavkom mo¾e znaèiti da neko (npr. hacker) poku¹ava provaliti u va¹ sajt (npr. isprobavajuæi razne kombinacije logina/¹ifre za ulazak).
    Korisnik je poku¹ao otvoriti URL koji je pode¹en da mu se ne mo¾e pristupiti, èak ni sa loginom/¹ifrom (npr. URL unutar direktorija koji nije definisan kao pristupaèan.).
    Korisnik je poku¹ao pristupiti nepostojeæem URLu. Ova gre¹ka obièno znaèi da negdje na va¹em sajtu postoji neispravan link ili da je korisnik neispravno ukucao odreðeni URL.
    Serveru je trebalo previ¹e vremena da odgovori na zahtjev. Kod ove gre¹ke se obièno radi ili o sporoj CGI skripti koju je server morao prekinuti, o sporoj konekciji korisnika ili o ekstremnom zagu¹enju saobraæaja na web serveru.
    Interna gre¹ka. Ovu gre¹ku uzrokuje CGI program koji sadr¾i neku gre¹ku te je prekinuo rad abnormalno.
    Zahtjevana je nepoznata akcija.
    Ovaj kod vraæa HTTP server koji radi kao proxy ili gateway, i to ako stvarni server ne odgovori uspje¹no na zahtjev klijenta.
    Interna gre¹ka na serveru.
    Ovaj kod vraæa HTTP server koji radi kao gateway, i to ako prilikom kontaktiranja stvarnog servera istekne predviðeno vrijeme (gateway timeout).
    Klijent zahtjeva verziju HTTPa koja nije podržana.
    lang/tooltips_w/awstats-tt-ca.txt000064400000013775152532065620013150 0ustar00
    Es considera una nova visita per cada nou visitant que consulta una pàgina i que hagi accedit al lloc en els últims #VisitTimeOut# mins..
    Nombre de clients (adreces IP) que entren a un lloc (i que com a mínim visiten una pàgina).
    Aquesta xifra reflecteix el nombre de persones físiques diferents que han accedit al lloc en un dia.
    Nombre de vegades que una pàgina del lloc ha estat visualitzada (La suma de tots els visitants inclouen visites múltiples).
    Aquest comptador es distingeix de "hits" perquè només conta les pàgines HTML, i no pas els gràfics o altres arxius o fitxers.
    El nombre de vegades que una pàgina, imatge, arxiu o fitxer d'un lloc és visualitzat o descarregat per visitant.
    Aquest comptador serveix de referència, però el comptador de "pàgines" representa una dada mercadotécnica generalment més útil, i per tant, més recomanada.
    El nombre de kilo bytes descagarregats pels visitants del lloc.
    Es refereix al volum de dades descarregades per totes les pàgines, imatges i arxius o fitxers mesurats en bytes.
    El programa #PROG# és capaç de reconèixer una visita a un lloc després de cadascuna de les cerques des de qualsevol dels #SearchEnginesArray# motors de cerca i directoris Internet més populars (Yahoo, Altavista, Lycos, Google, Terra, etc...).
    Llista de pàgines de llocs externs utilitzades para accedir o enllaçar-se amb el seu lloc (Només les #MaxNbOfRefererShown# pàgines més utilitzades es troben numerades). Els enllaços emprats pels motors de cerca o directoris són exclosos perquè ja han estat comptabilitzats a l'anterior apartat.
    Aquesta taula mostra la llista de les paraules clau més utilitzades en els motors de cerca i directoris Internet per trobar el seu lloc. (El programa #PROG# reconeix paraules claus util.litzades en els #SearchEnginesArray# motors de cerca més populars, com Yahoo, Altavista, Lycos, Google, Voila, Terra etc...).
    Els Robots son visitants automàtics que escanejan o viatgen pel seu lloc per a indexar-lo, o jerarquitzar-lo, per tal de recollir estadístiques de llocs Web, o per verificar si el seu lloc es troba connectat a la Xarxa.
    El programa #PROG# reconeix fins a #RobotArray# robots.
    Els temps relacionats amb les estadístiques estan basats en temps de servidor.
    Aquí, les dates reportades son: valors medis (calculat desde totes les dates entre les primeres y les ultimes visites en la franja analitzada)
    Aquí, les dates reportades son: sumes acumulatives (calculat desde totes les dates entre les primeres y les ultimes visites en la franja analitzada)
    Algunes Duracions de les visites son 'desconegudes' perquè no poden ser calculades sempre. La raó principal d'axó es:
    - La visita no va acabà quan es va fer 'l'actualizació'.
    - La visita va començar en la hora anterior (després de les 23:00) del passat dia de un mes (la raó tècnica de prevenir a #PROG# de la duració calculada de tales sessions)
    Error sense descripció.
    La petició ha estat computada però el servidor la processarà més tard.
    El servidor ha processat la petició però no existeixen documents per enviar.
    Contingut parcial.
    El document sol·licitat ha estat reubicat i es troba en una URL proporcionada en la mateixa resposta.
    Error sense descripció.
    Error de sintaxis, el servidor no ha entès la seva petició.
    Nombre d'intents per accedir a una URL que exigeix una combinació usuari/contrasenya que ha estat invàlida..
    Un nombre d'intents molt elevat pot suggerir la possibilitat que un hacker (o pirata) ha intentat entrar a una zona restringida del lloc (p.e., intentant múltiples combinacions de usuari/contrasenya).
    Nombre d'intents per accedir a una URL configurada per a no ser accessible ni amb una combinació usuari/contrasenya (p.e., una URL prèviament definida com a "no navegable").
    Nombre d'intents per accedir a una URL inexistent. Sovint, aquests es refereixen a un enllaç (link) no vàlid o a un error mecanogràfic quan el visitant tecleja una URL errònia.
    El servidor ha trigat massa temps a respondre a una petició. Sovint, és degut a un programa CGI molt lent, el qual ha estat abandonat pel servidor, o bé per un servidor molt saturat.
    Error intern. Aquest error generalment és provocat per una terminació anormal o prematura d'un programa CGI (p.e., un CGI corromput o malmès).
    Petició desconeguda pel servidor.
    Codi retornat per un servidor de protocol HTTP que funciona com a proxy o pont (gateway) quan el servidor objectiu no funciona o no interpreta correctament la petició del client (o visitant).
    Error intern del servidor.
    Passarel·la fora de línia.
    Versió de protocol HTTP no suportada.
    lang/tooltips_w/awstats-tt-ro.txt000064400000013105152532065620013170 0ustar00
    O noua vizita este definita ca fiind orice acces al unui vizitator care nu a fost conectat la site in ultimele #VisitTimeOut# mn.
    Numarul de masini client (adresa IP) care vin sa viziteze site-ul (si care au vizionat cel putin o pagina).
    Aceste date se refera la numarul de persoane fizice diferite care au ajuns pe site in oricare din zile.
    De cate ori o pagina a site-ului este vizionata (suma pentru toti vizitatorii si toate vizitele).
    Aceasta informatie difera de "Accesari" deoarece numara doar paginile HTML si nu si imaginile sau alte tipuri de fisiere.
    De cate ori o pagina, imagine, fisier de pe site a fost vizionata sau descarcata (download) de catre cineva.
    Aceasta informatie este furnizata doar ca referinta deoarece pentru marketing este de multe ori preferat numarul de "pagini" vazute.
    Aceasta informatie contine traficul total de date pentru toate paginile, imaginile si fisierele de pe site.
    Unitatea de masura este KB, MB sau GB (KiloBytes, MegaBytes sau GigaBytes)
    #PROG# recunoaste accesele la site rezultate dintr-o cautare efectuata cu ajutorul a #SearchEnginesArray# din cele mai cunoscute motoare de cautare si repertoare (ca Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Lista tuturor paginilor externe care au fost punctul de plecare (si de intrare) in site (sunt listate doar primele #MaxNbOfRefererShown# in ordinea numarului de utilizari). Intrarile pe site din rezultatul generat de motoarele de cautare sunt excluse aici deoarece ele au fost deja incluse in precedenta linie a acestui tabel.
    Acest tabel contine lista celor mai frecvente cuvinte cheie care au fost utilizate de motoarele de cautare sau repertoare pentru a gasi acest site. (Cuvintele cheie folosite de cele mai cunoscute #SearchEnginesArray# motoare de cautare sau repertoare - Yahoo, Altavista, Lycos, Google, Voila, etc... - sunt recunoscute de #PROG#).
    Robotii sunt programe vizitator automate utilizate de multe motoare de cautare si care scaneaza situl web pentru a-l indexa si evalua, pentru a colecta statistici despre siturile web din Internet si/sau pentru a verifica daca situl este online.
    #PROG# recunoaste #RobotArray# roboti.
    Toate statisticile referitoare la timp sunt bazate pe timpul din masina care gazduieste serverul web.
    Aici, datele listate sunt: valori medii (calculate din toate datele intre prima si ultima vizita)
    Aici, datele listate sunt: insumari cumulative (calculate din toate datele intre prima si ultima vizita)
    Nici o descriere pentru aceasta eroare.
    Cererea a fost inteleasa de server dar va fi procesata mai tarziu.
    Serverul a procesat cererea dar nu exista nici un document de trimis.
    Continut partial.
    Documentul cerut a fost mutat si este acum la o alta adresa continuta in raspuns.
    Nici o descriere pentru aceasta eroare.
    Eroare de sintaxa, serverul nu a inteles cererea.
    Incercare de a accesa un URL unde este necesara autentificarea cu user/parola.
    Un numar mare in acest loc poate insemna ca cineva (de exemplu un hacker) incearca sa sparga sau sa intre in site (sperand sa intre intr-o zona securizata incercand de exemplu diferite perechi user/parola).
    Incercare de a accesa un URL care nu a fost configurat sa fie atins, nici macar cu o autentificare user/parola (de exemplu un URL dintr-un director care nu este definit ca accesibil).
    Incercare de a accesa un URL inexistent. Aceasta eroare inseamna adesea ca exista o legatura invalida undeva pe site sau ca un vizitator a tastat gresit un URL.
    Serverul a consumat prea mult timp pentru a raspunde cererii. Aceasta eroare indica adesea un script CGI lent pe care serverul a incercat sa-l aborteze sau un server web extrem de incarcat.
    Eroare interna. Aceasta eroare este deseori cauzata de un program CGI care s-a terminat anormal (de exemplu prin coredump).
    Cerere de actiune necunoscuta.
    Cod returnat de un server HTTP care lucreaza ca un proxy sau gateway in cazul in care un server tinta real nu a raspuns cu succes cererii client.
    Eroare interna server.
    Depasire timp la Gateway.
    Versiune HTTP nesuportata.
    lang/tooltips_w/awstats-tt-se.txt000064400000011452152532065620013162 0ustar00
    Ett nytt besök är en besökare (som tittar på en sida) som inte varit inne på sajten på #VisitTimeOut# minuter.
    Antal besökare (IP-adresser) som besökte sajten (och som tittade på minst en sida).
    Detta värde anger antalet olika fysiska personer som nått siten på en dag.
    Antal gånger en sida på sajten har besökts (Summa för alla besökare för alla besök).
    Detta värde skiljer sig från "träffar" genom att det bara räknar HTML-sidor, ej bilder eller andra filer.
    Antal gånger en sida, bild eller fil från sajten har besökts eller laddats hem av någon.
    Detta värde finns bara med som referens eftersom antalet "sidor" som besökts oftast är bättre att titta på ur marknadsföringssynpunkt.
    Detta värde visar hur mycket data som har laddats hem genom alla sidor, bilder och filer på hela sajten.
    Enheterna är Kb, Mb or Gb (KiloByte, MegaByte eller GigaByte)
    #PROG# känner igen när besökare hittar din sajt genom en sökning i de #SearchEnginesArray# populäraste sökmotorerna och katalogerna (såsom Yahoo, Altavista, Lycos, Google, Voila, osv...).
    En lista på alla externa sidor som länkar till (och besökare använt för att komma till) din sida (Bara de #MaxNbOfRefererShown# mest använda länkarna visas). Länkar i sökresultaten från sökmotorerna tas inte med här eftersom de redan räknats in i föregående rad i tabellen.
    Denna tabell visar de vanligaste nyckelorden som använts för att hitta din sajt genom sökmotorer och kataloger. (#PROG# känner igen nyckelord från de #SearchEnginesArray# vanligaste sökmotorerna och katalogerna, såsom Yahoo, Altavista, Lycos, Google, Voila, osv...).
    Robotar (kallas också Spindlar) är automatiska datoriserade besökare som används av många sökmotorer som söker av din webbsajt för att indexera och rangordna den, samla statistik för webbsajter och/eller se om din sajt fortfarande finns kvar.
    #PROG# känner igen upp till #RobotArray# olika robotar.
    All tidsrelaterad statistik baseras på klockan på webbservern.
    Här visas medelvärden (beräknade för alla besök från det första till det sista)
    Här visas ackumulerade summor (beräknade för alla besök från det första till det sista)
    Ingen beskrivning finns för detta fel.
    Servern förstod begäran men kommer bearbeta den senare.
    Servern har bearbetat begäran men har inte genererat något svar.
    Endast en del av innehållet överfördes.
    Sidan har flyttats och ny adress finns i svaret.
    Ingen beskrivning finns för detta fel.
    Syntax fel, servern förstod inte begäran.
    Någon försökte komma åt en URL där inloggning krävdes.
    Ett högt värde här skulle kunna innebära att någon (t.ex. en hacker) försöker bryta sig in i din sajt (t.ex. genom att pröva sig fram tills de hittar rätt lösenord).
    Någon försökte komma åt en URL som är inställd så att man inte kommer åt den ens med rätt lösenord (till exempel en katalog som är inställd att inte tillåta bläddring.).
    Någon försökte nå en icke existerande URL. Detta betyder ofta att det finns en felaktig länk på din sajt eller att någon stavade fel till en URL.
    Servern har tagit för lång tid på sig att besvara en begäran. Detta beror ofta på ett långsamt cgi-skript eller att servern är överbelastad.
    Internt fel. Detta fel orsakas ofta av att ett cgi-skript går fel (t.ex. gör en coredump).
    Okänd begäran.
    Felkod som genereras då en HTTP-server som arbetar som proxy eller gatewayt ine får svar från den verkliga servern som skulle ha svarat på klientens begäran.
    Internt serverfel.
    Timeout i gateway
    HTTP-versionen stöds ej.
    lang/tooltips_w/awstats-tt-nn.txt000064400000012321152532065620013162 0ustar00
    Eit nytt besøk er ein ny gjest som ikkje har vore tilkopla nettstaden siste #VisitTimeOut# minutt.
    Talet på klientvertar (IP-adresser) som har besøkt nettstaden, og har sett minst éi side).
    Denne informasjonen gjeld talet på forskjellige personar som har besøkt sida.
    Talet på gongar ei side på nettstaden har blitt vist.
    Denne informasjonen skil seg frå «treff» ved å berre telja HTML-sider, og ikkje bilde og andre filer.
    Talet på gongar ei side, eit bilde eller ei fil på nettstaden har blitt vist eller lasta ned.
    Denne informasjonen viser kor mykje data som har blitt lasta ned totalt (sider, bilde eller andre filer).
    Einingane er KiB, MiB eller GiB (kibibyte, mebibyte eller gibibyte)
    #PROG# kan sjå når eit besøk på nettstaden din kjem frå eit søk på dei #SearchEnginesArray# mest populære søkjemotorane og emnekatalogane (f.eks. Yahoo, Altavista, Lycos, Google og Kvasir).
    Liste over alle eksterne sider som har lenkjer til nettstaden din (berre dei #MaxNbOfRefererShown# mest brukte eksterne sider blir vist). Lenkjer frå søkjemotorar er ikkje tatt med her, då desse allereie er oppført i tidlegare i tabellen.
    Denne tabellen viser dei mest brukte søkjeorda og søkjeuttrykka brukt til å finna nettstaden i søkjemotorar og emnekatalogar. (Søkjeord frå dei #SearchEnginesArray# mest populære søkjemotorane og emnekatalogane kan lesast av #PROG#, f.eks. Yahoo, Altavista, Lycos, Google, og Kvasir).
    Merk at talet på søkjeord kan vera høgare enn talet på søkjeuttrykk, for når to eller fleire søkjeord blir brukt i same søk, vil kvart ord telja med i oversikta over søkjeord.
    Robotar blir brukt av mange søkjemotorar som besøkjer nettstaden din for å indeksera og rangera han, samla statistikk om nettstader, og/eller sjå om nettstaden framleis er tilgjengeleg.
    #PROG# kjenner til #RobotArray# robotar.
    All tidsrelatert statistikk er basert på tenartida.
    Rapporterte tal er gjennomsnittsverdiar (rekna ut frå all data mellom første og siste besøk i analyseperioden)
    Rapporterte tal er kumulative summar (rekna ut frå all data mellom første og siste besøk i analyseperioden)
    Nokre besøkslengder er «ukjente» fordi dei ikkje kan reknast ut. Hovudgrunnane for dette er:
    – Besøket er ikkje ferdig når rapportoppdateringa skjer.
    – Besøket starta etter klokka 23:00 på den siste dagen i månaden. (Tekniske grunnar hindrar AWStats å rekna ut besøkslengda i desse tilfella.)
    Inga beskriving av denne feilen.
    Førespurnaden vart forstått av tenaren men vil bli prosessert seinare.
    Tenaren har prosessert førespurnaden men har ikkje noko innhald å senda.
    Delvis innhald.
    Det førespurte dokumentet er flytta, og finst no på ei anna sida. Brukaren blir auomatisk vidaresendt til den nye adressa.
    Inga beskriving av denne feilen.
    Syntaksfeil. Tenaren forsto ikkje førespurnaden.
    Prøvde å henta ei side som var passordsikra.
    Mange slike feilmeldingar kan tyda på at nokon prøver å bryta seg inn på nettstaden din.
    Prøvde å henta side som er utilgjengeleg (sjølv med passord) (for eksempel ein katalog som er definert som ikkje lesbar).
    Prøvde å henta ei ikkje-eksisterande side. Denne feilen tyder oftast at det er ei lenkje ein eller annan plass på nettstaden din (eller på ei ekstern side) som ikkje fungerer, og som må oppdaterast.
    Tenaren har brukt for mykje tid på å svara på ein førespurnad. Denne feilen gjeld enten eit treigt CGI-skript tenaren måtte avslutta, eller tungt trafikkert tenar.
    Intern feil. Denne feiled kjem ofte av CGI-skript som har blitt avslutta unormalt.
    Ukjent førespurnad.
    Kode returnert av ein HTTP-tenar som fungerer som proxy eller systemport når ein ekte tenar ikkje svarer på førespurnaden.
    Intern tenarfeil.
    Systemport tidsavbroten.
    Støttar ikkje HTTP-versjonen.
    lang/tooltips_w/awstats-tt-en.txt000064400000014446152532065620013163 0ustar00
    A new visits is defined as each new incoming visitor (viewing or browsing a page) who was not connected to your site during last #VisitTimeOut# mn.
    Number of client hosts (IP address) who came to visit the site (and who viewed at least one page).
    This data refers to the number of different physical persons who had reached the site.
    Number of times a page of the site is viewed (Sum for all visitors for all visits).
    This piece of data differs from "hits" in that it counts only HTML pages as oppose to images and other files.
    Number of times a page, image, file of the site is viewed or downloaded by someone.
    This piece of data is provided as a reference only, since the number of "pages" viewed is often prefered for marketing purposes.
    This piece of information refers to the amount of data downloaded by all pages, images and files within your site.
    Units are in KB, MB or GB (KiloBytes, MegaBytes or GigaBytes)
    #PROG# recognizes each access to your site after a search from the #SearchEnginesArray# most popular Internet Search Engines and Directories (such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
    List of all external pages which were used to link (and enter) to your site (Only the #MaxNbOfRefererShown# most often used external pages are shown). Links used by the results of the search engines are excluded here because they have already been included on the previous line within this table.
    This table shows the list of the most frequent keyphrases or keywords used to find your site from Internet Search Engines and Directories. (Keywords from the #SearchEnginesArray# most popular Search Engines and Directories are recognized by #PROG#, such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Note that total number of searches for keywords might be greater than total number of searches for keyphrases (real number of searches) because when 2 keywords were used on same search, search is counted twice for keywords (once for each word).
    Robots (sometimes refer to Spiders) are automatic computer visitors used by many search engines that scan your web site to index it and rank it, collect statistics on Internet Web sites and/or see if your site is still online.
    #PROG# is able to recognize up to #RobotArray# robots.
    All time related statistics are based on server time.
    Here, reported data are: average values (calculated from all data between the first and last visit in analyzed range)
    Here, reported data are: cumulative sums (calculated from all data between the first and last visit in analyzed range)
    Some Visits durations are 'unknown' because they can't always be calculated. This is the major reason for this:
    - Visit was not finished when 'update' occured.
    - Visit started the last hour (after 23:00) of the last day of a month (A technical reason prevents #PROG# from calculating duration of such sessions)
    Worms are automatic computer visitors that are in fact external servers, infected by a virus, that try to make particular hits on your server to infect it. In most cases, such worms exploit some bugs of not up to date or commercial servers. If your system is not the sensitive target of the worm, you can simply ignore those hits.
    There is very few 'server worms' in the world but they are very active at some times. #PROG# is able to recognize #WormsArray# known worm's signatures (nimda,code red,...).
    No description for this error.
    Request was understood by server but will be processed later.
    Server has processed the request but there is no document to send.
    Partial content.
    Requested document was moved and is now at another address given in answer.
    No description for this error.
    Syntax error, server didn't understand request.
    Tried to reach an URL where a login/password pair was required.
    A high number within this item could mean that someone (such as a hacker) is attempting to crack, or enter into your site (hoping to enter a secured area by trying different login/password pairs, for instance).
    Tried to reach an URL not configured to be reachable, even with an login/password pair (for example, an URL within a directory not defined as "browsable".).
    Tried to reach a non existing URL. This error often means that there is an invalid link somewhere in your site or that a visitor mistyped a certain URL.
    Server has taken too much time to respond to a request. This error frequently involves either a slow CGI script which the server was required to kill or an extremely congested web server.
    Internal error. This error is often caused by a CGI program that had finished abnormally (coredump for example).
    Unknown requested action.
    Code returned by a HTTP server that works as a proxy or gateway when a real, targeted server doesn't answer successfully to the client's request.
    Internal server error.
    Gateway Time-out.
    HTTP Version Not Supported.
    lang/tooltips_w/awstats-tt-ru.txt000064400000010655152532065620013205 0ustar00
    Íîâûì ïîñåòèòåëåì ñ÷èòàåòñÿ ïðèøåäøèé ïîñåòèòåëü, êîòîðîãî íå áûëî íà ñàéòå áîëåå #VisitTimeOut# ìèíóò.
    Êîëè÷åñòâî õîñòîâ (IP àäðåñîâ), êîòîðûå ïîñåòèëè ñàéò (êòî ïðîñìîòðåë êàê ìèíèìóì îäíó ñòðàíèöó).
    Äàííàÿ öèôðà îòðàæàåò êîëè÷åñòâî ðàçëè÷íûõ ïîñåòèòåëåé, çàøåäøèõ íà ñàéò â òå÷åíèè îäíîãî äíÿ.
    Êîëè÷åñòâî ïðîñìîòðåííûõ ñòðàíèö ñàéòà (ñóììà âñåõ ïîñåòèòåëåé).
    Ýòè äàííûå îòëè÷àþòñÿ îò "õèòîâ", òàê êàê çäåñü ó÷òåíû òîëüêî HTML-ñòðàíèöû áåç ó÷åòà ãðàôèêè è ïðî÷èõ ôàéëîâ.
    Êîëè÷åñòâî ñòðàíèö, èçîáðàæåíèé è ôàéëîâ ñàéòà, êîòîðûå áûëè ïðîñìîòðåíû èëè ñêà÷àíû ïîñåòèòåëÿìè.
    Ýòè äàííûå ïðèâåäåíû òîëüêî äëÿ ñðàâíåíèÿ, ò.ê. êîëè÷åñòâî ïðîñìîòðåííûõ "ñòðàíèö" êîðàçäî âàæíåå äëÿ èññëåäîâàíèÿ òðàôèêà ñàéòà.
    Çäåñü îòðàæåí îáúåì âñåõ ñòðàíèö, èçîáðàæåíèé è ôàéëîâ, ñêà÷àííûõ ñ ñàéòà.
    #PROG# ðàñïîçíàåò êàæäîå ïîñåùåíèå ïîñåòèòåëÿ ïîñëå ïîèñêà â #SearchEnginesArray# íàèáîëåå ïîïóëÿðíûõ ïîèñêîâûõ ñåðâåðàõ è êàòàëîãàõ (òàêèõ, êàê Yahoo, Altavista, Lycos, Google, Yandex, è ïð...).
    Ñïèñîê âñåõ âíåøíèõ ñòðàíèö, íà êîòîðûõ áûëà ðàçìåùåíà ññûëêà íà äàííûé ñàéò (ïîêàçàíî òîëüêî #MaxNbOfRefererShown# íàèáîëåå ïîïóëÿðíûõ âíåøíèõ ñòðàíèö). Ññûëêè ñ ïîèñêîâûõ ñåðâåðîâ çäåñü íå îòîáðàæåíû.
    Çäåñü óêàçàíû íàèáîëåå ðàñïðîñòðàíåííûå êëþ÷åâûå ñëîâà, èñïîëüçîâàííûå äëÿ ïîèñêà â ïîèñêîâûõ ìàøèíàõ è êàòàëîãàõ. (#PROG# ðàñïîçíàåò êëþ÷åâûå ñëîâà ñ #SearchEnginesArray# ïîèñêîâûõ ñåðâåðîâ è êàòàëîãîâ).
    Ðîáîòû (èíîãäà íàçûâàåìûå ïàóêàìè) - ýòî àâòîìàòè÷åñêèå êîìïüþòåðíûå ïîñåòèòåëè, èñïîëüçóåìûå ìíîãèìè ïîèñêîâûìè ñèñòåìàìè äëÿ òîãî, ÷òîáû (1) èíäåêñèðîâàòü è ðàíæèðîâàòü ñòðàíèöó, (2) ñîáèðàòü ñòàòèñòèêó ïî ñàéòàì è/èëè (3) ñìîòðåòü, äîñòóïíà ëè äî ñèõ ïîð âàøà ñòðàíèöà on-line.
    #PROG# ðàñïîçíàåò äî #RobotArray# ðîáîòîâ.
    Äëÿ äàííîé îøèáêè íåò îïèñàíèÿ.
    Äàííûé çàïðîñ áûë ïîíÿò ñåðâåðîì, íî áóäåò îáðàáîòàí ïîçäíåå.
    Ñåðâåð îáðàáîòàë çàïðîñ, íî íå îáíàðóæèë äàííûõ äëÿ îòïðàâêè ïîñåòèòåëþ.
    ×àñòè÷íîå ñîäåðæàíèå.
    Äîêóìåíò áûë ïåðåìåùåí è íàõîäèòñÿ ïî àäðåñó, íàõîäÿùåìóñÿ â îòâåòå.
    Äëÿ äàííîé îøèáêè íåò îïèñàíèÿ.
    Ñèíòàêñè÷åñêàÿ îøèáêà, ñåðâåð íå ìîæåò îáðàáîòàòü çàïðîñ.
    Ïîïûòêà äîñòóïà ê URL ãäå ëîãèí/ïàðîëü îáÿçàòåëüíû.
    Áîëüøîå êîëè÷åñòâî äàííûõ îøèáîê ãîâîðèò î òîì, ÷òî íåêòî (íàïðèìåð, õàêåð) ïûòàëñÿ ïðîíèêíóòü â çàêðûòóþ îáëàñòü ñàéòà ñ ïîìîùüþ ïåðåáîðà ðàçëè÷íûõ âàðèàíòîâ ëîãèíà è ïàðîëÿ.
    Ïîïûòêà äîñòóïà ê URL êîòîðûé íå áûë íàñòðîåí äëÿ äîñòóïà (äàæå ñ óêàçàíèåì ëîãèíà è ïàðîëÿ) (ê ïðèìåðó, äèððåêòîðèÿ, êîòîðàÿ íå áûëà ïîìå÷åíà êàê "browsable").
    Ïîïûòêà äîñòóïà ê íåñóùåñòâóþùåìó URL. Äàííàÿ îøèáêà ãîâîðèò î íåïðàâèëüíîì óêàçàíèè ññûëêè íà äàííîì ñàéòå èëè óñòàðåâøåé ññûëêå ñ âíåøíåãî ñàéòà.
    Ñåðâåð çàòðàòèë ñëèøêîì ìíîãî âðåìåíè íà ïîäãîòîâêó îòâåòà íà çàïðîñ. Ýòà îøèáêà âîçíèêàåò â ñëó÷àåò ëèáî ìåäëåííîãî CGI ñêðèïòà, êîòîðûé ñåðâåð çàâåðøàåò, íå äîæäàâøèñü îòâåòà, ëèáî ïðè ñèëüíî çàãðóæåííîì ñåðâåðå.
    Âíóòðåííÿÿ îøèáêà. Òàêàÿ îøèáêà ïîÿâëÿåòñÿ ïîñëå CGI ñêðèïòîâ, êîòîðûå çàâåðøàþòñÿ ñ îøèáêîé.
    Íåèçâåñòíîå òðåáóåìîå äåéñòâèå.
    Êîä, âîçâðàùåííûé HTTP ñåðâåðîì, êîòîðûé ðàáîòàåò â êà÷åñòâå proxy èëè øëþçà, êîãäà íàñòîÿøèé ñåðâåð íåïðàâèëüíî îòâåòèë íà çàïðîñ êëèåíòà
    Âíóòðåííÿÿ îøèáêà ñåðâåðà.
    Òàéì-àóò øëþçà.
    Äàííàÿ âåðñèÿ HTTP íå ïîääåðæèâàåòñÿ.
    lang/tooltips_w/awstats-tt-de.txt000064400000013413152532065620013142 0ustar00
    Ein neuer Besucher wird definiert als jeder neue Besucher, der eine Seite abgerufen hat und der auf Ihre Web Site in den letzten #VisitTimeOut# min. nicht zugegriffen hat.
    Anzahl der Rechner (IP-Adressen), die Ihre Web Site besuchten und mindestens eine Seite aufgerufen haben.
    Diese Anzahl entspricht der Zahl an unterschiedlichen physikalischen Personen, die Ihre Web Site an irgendeinem Tag besuchten.
    Anzahl der insgesamt angezeigten Seiten Ihrer Web Site (Summe aller Zugriffe von allen Besuchern).
    Diese Zahl unterscheidet sich von den "Zugriffen", da nur HTML Seiten und keine Grafiken oder andere Dateien gezählt werden.
    Anzahl der insgesamt angezeigten oder heruntergeladenen Seiten, Grafiken, Dateien Ihrer Web Site.
    Diese Zahl wird nur als Referenz angegeben, da meistens die Anzahl der angezeigten "Seiten" für Marketingzwecke bevorzugt wird.
    Dieser Wert entspricht der Menge an Daten, die aufgrund aller Seiten, Grafiken und Dateien Ihrer Web Site übertragen worden sind.
    Einheiten sind in Kb, Mb oder Gb (KiloBytes, MegaBytes oder GigaBytes)
    #PROG# erkennt jeden Zugriff auf Ihre Web Site aufgrund einer Suche von einer der #SearchEnginesArray# beliebtesten Internet-Suchmaschinen und -Verzeichnisse (wie z.B. Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Eine Liste aller externen Seiten, von denen ein Verweis auf Ihre Web Site erfolgte (nur die #MaxNbOfRefererShown# am häufigsten aufgetretenen externen Seiten werden angezeigt). Verweise aufgrund eines Suchergebnisses einer Suchmaschine werden hier nicht aufgeführt, da diese bereits in der vorherigen Tabellenzeile angegeben worden sind.
    Diese Tabelle zeigt die Liste der am häufigsten verwendeten Schlüsselwörter, um Ihre Web Site mit einer Internet-Suchmaschine bzw. -Verzeichnis zu finden. (#PROG# erkennt die Schlüsselwörter der #SearchEnginesArray# beliebtesten Internet-Suchmaschinen und -Verzeichnisse, wie z.B. Yahoo, Altavista, Lycos, Google, Voila, etc...).
    Robots (manchmal auch als Spider bezeichnet) sind automatische Computerbesucher, die von vielen Suchmaschinen eingesetzt werden, um Ihre Web Seite aufzunehmen und auszuwerten.
    #PROG# ist in der Lage, bis zu #RobotArray# Robots zu erkennen.
    Alle zeitbezogenen Statistiken basieren auf der Serverzeit.
    Die angezeigten Werte sind Durchschnittswerte (berechnet aus allen Werten zwischen dem ersten und letzten Besuch)
    Die angezeigten Werte sind Summenwerte (berechnet aus allen Werten zwischen dem ersten und letzten Besuch)
    Für diesen Fehler liegt keine Beschreibung vor.
    Die Anfrage wurde vom Server akzeptiert, aber sie wird erst später verarbeitet.
    Der Server hat die Anfrage verarbeitet, aber es wurde kein Ergebnis übertragen.
    Unvollständiger Inhalt.
    Das angeforderte Dokument wurde verschoben und ist nun unter der angegebenen Adresse erreichbar.
    Für diesen Fehler liegt keine Beschreibung vor.
    Syntaxfehler, der Server kann die Anfrage nicht verarbeiten.
    Es wurde versucht, auf eine URL zuzugreifen, für die eine Authentifizierung notwendig war.
    Eine hohe Anzahl kann darauf hindeuten, daß jemand (z.B. ein Hacker) vesucht, sich unerlaubten Zugang zu Ihrer Web Site zu verschaffen, indem er z.B. verschiedene Login/Passwort Kombinationen durchprobiert.
    Es wurde versucht, auf eine unerreichbare URL zuzugreifen, für die selbst eine Authentifizierung nicht ausreicht (z.B. eine URL innerhalb eines für Browserzugriffe gesperrten Verzeichnisses).
    Es wurde versucht, auf eine ungültige URL zuzugreifen. Dieser Fehler bedeutet meistens, daß es einen ungültigen Link irgendwo in Ihrer Web Site gibt oder daß ein Besucher einen Schreibfehler bei einer URL gemacht hat.
    Der Server benötigte zu viel Zeit, um auf eine Anfrage zu reagieren. Dieser Fehler bezieht sich meistens auf ein langsam arbeitendes CGI-Skript, welches durch den Server vorzeitig abgebrochen werden mußte, oder einen überlasteten Web Server.
    Interner Fehler. Dieser Fehler wird meist durch ein CGI-Skript verursacht, das z.B. durch einen Programmfehler unerwarteterweise beendet worden ist.
    Unbekannte Art der Anfrage.
    Dieser Fehler wird von einem HTTP-Server gemeldet, der als ein Proxy oder Gateway fungiert, wenn der eigentliche Zielserver auf die Anfrage nicht erfolgreich geantwortet hat.
    Interner Serverfehler.
    Gateway Zeitüberschreitung.
    HTTP-Version wird nicht unterstützt.
    lang/tooltips_w/awstats-tt-cz.txt000064400000010016152532065620013162 0ustar00
    Noví náv¹tìvníci jsou definováni jako ka¾dý pøicházející (prohlí¾ející si neboprocházející), kdo se na stránky nepøipojil posledních #VisitTimeOut# min.
    Poèet klientù (IP address), kteøí pøi¹li na stránky (a kteøí si prohlédli alespoò jednu stránku). Toto èíslo odpovídá èíslu rùzných fyzických osob, kteøí nav¹tívili stránky kterýkoli jeden den.
    Poèet kolikrát byla stránka na tomto serveru shlédnuta (Souèet za v¹echny nav¹tìvující a jejich náv¹tìvy). To se li¹í od Hitù tak, ¾e jsou zapoèítány jen stránky (ne obrázky a ostatní...).
    Poèet kolikrát byla stránka, obrázek, soubor na tomto serveru stáhnuta (Souèet za v¹echny nav¹tìvující a jejich náv¹tìvy). Toto èíslo je uvádìno kvùli porovnání se Stránkami.
    Velikost v¹ech stránek, obrázkù a souborù sta¾ených z tohoto serveru.
    #PROG# rozpozná pøístup na server od vyhledávání z #SearchEnginesArray# nejznámìj¹ích internetových vyhledávaèù a seznamù (jako je Yahoo, Altavista, Lycos, Google, Voila, atd...).
    Seznam v¹ech externích stránek (mimo server), které byly pou¾ity jako odkaz na tento server (Je zobrazeno jen #MaxNbOfRefererShown# nejèastìj¹ích). Odkazy pou¾ité z vyhledávaèù nejsou zaøazeny, nebo» je obsahuje jiný údaj.
    Tato tabulka zobrazuje seznam nejèastìji zadávaných výrazù, které byly zadávany ve vyhledávaèích k nalezení tohoto serveru. (Výrazy od #SearchEnginesArray# mnejznámìj¹ích vyhledávaèù a seznamù jsou #PROG# rozpoznány, jako je Yahoo, Altavista, Lycos, Google, Voila, atd...).
    Roboti (nìkdy oznaèováni jako pavouci nebo èmuchalové) jsou poèítaèoví automat. náv¹tìvníci pou¾ivaní mnoha vyhledávacími slu¾bami k (1) indexování a hodnocení, (2) sbírání statistik z webù a/nebo (3) k zji¹tìní, zda stránky stále existují.
    #PROG# je schopen rozpoznat #RobotArray# robotù.
    Bylo vytvoøeno nové místo s daty a odesláno.
    Po¾adavek byl rozeznán, ale bude vyøízen pozdìji.
    Po¾adavek byl rozeznán, ale není co odeslat zpìt.
    Dotaz byl zpracován jen èásteènì.
    Po¾adovaný dokument byl pøesunut a adresa byla odeslána.
    Dokument se doèasnì nachází na jiné adrese.
    Syntaktická chyba, chybný po¾adavek.
    Po¾adavek neobsahoval ¾ádanou autorizaci jméno/heslo pro vstup na stránky. Pokud se vyskytuje èasto pokou¹í se nìkdo o prùlom-hack.
    Po¾adavek byl odmítnut serverem (nepøístupná data, neviditelný adresáø...).
    Pokus o vstup na neexistující stránku nebo soubor.
    Celý po¾adavek nebyl serveru od klienta zaslán v po¾adovaném èase (chyba klienta nebo serveru nebo skriptu).
    Chyba serveru (èasto se vyskytuje pøi chybném zpracování skriptu).
    Po¾adavek, který byl zaslán není mo¾no vyøídit, nebo» ho server neumí zpracovat.
    Server pøijal ¹patný po¾adavek od jiného serveru (proxy nebo brány).
    Chyba serveru, slu¾ba není k dispozici.
    Vypr¹el èasový interval u proxy serveru nebo brány.
    Nepodporovaná verze protokolu HTTP.
    lang/tooltips_w/awstats-tt-bg.txt000064400000013436152532065620013147 0ustar00
    Íîâî ïîñåùåíèå ñå îò÷èòà ïðè âñåêè íîâ âõîäÿù ïîñåòèòåë (ðàçãëåæäàù ñòðàíèöà), êîéòî íå å ïîñåùàâàë ïðåç ïîñëåäíèòå #VisitTimeOut# min.
    Áðîÿò íà êëèåíòñêèòå õîñòîâå (IP àäðåñè), êîèòî ñà ïîñåòèëè ñàéòà (è ñà ðàçãëåäàëè ïîíå åäíà ñòðàíèöà).
    Òåçè äàííè ïîêàçâàò áðîÿ íà ðàçëè÷íèòå ôèçè÷åñêè ëèöà, ïîñåòèëè ñàéòà âúâ âñåêè åäèí äåí.
    Êîëêî ïúòè òàçè ñòðàíèöà îò ñàéòà å ðàçãëåäàíà (Îáùî çà âñè÷êè ïîñåòèòåëè çà âñè÷êè ïîñåùåíèÿ).
    Òåçè äàííè ñå ðàçëè÷àâàò îò "õèòîâå" ïî òîâà, ÷å îòáðîÿâàò ñàìî HTML ñòðàíèöè (áåç êàðòèíêèòå è äðóãèòå âèäîâå ôàéëîâå).
    Êîëêî ïúòè ñòðàíèöà, êàðòèíêà èëè äðóã ôàéë îò ñàéòà å ðàçãëåäàí èëè ñâàëåí îò ïîñåòèòåë.
    Òåçè äàííè ñà ñàìî ñïðàâî÷íè, òúé êàòî áðîÿ íà ðàçãëåäàíèòå "ñòðàíèöè" ÷åñòî ñà îáåêò íà ìàðêåòèíãîâà ïîëèòèêà.
    Òàçè èíôîðìàöèÿ ñå îòíàñÿ äî êîëè÷åñòâîòî äàííè ñâàëåíè ñ âñè÷êè ñòðàíèöè, êàðòèíêè è ôàéëîâå âúâ âàøèÿò ñàéò.
    Ìåðíèòå åäèíèöè ñà â KB, MB èëè GB (Êèëîáàéòè, Ìåãàáàéòè èëè Ãèãàáàéòè)
    #PROG# ðàçïîçíàâà âñåêè äîñòúï äî âàøèÿ ñàéò ñëåä ïðåòúðñâàíå îò #SearchEnginesArray# ïîïóëÿðíèòå òúðñà÷êè (êàòî Yahoo, Altavista, Lycos, Google, Voila, è ò.í....).
    Ñïèñúê íà âñè÷êè âúíøíè ñòðàíèöè èçïîëçâàíè çà âðúçêà (è âõîä) êúì âàøèÿò ñàéò (Ñàìî #MaxNbOfRefererShown#-òå íàé-÷åñòî èçïîëçâàíè âúíøíè ñòðàíèöè ñà ïîêàçàíè). Âðúçêèòå, èçïîëçâàíè êàòî ðåçóëòàò îò òúðñà÷êèòå ñà èçêëþ÷åíè, ò.ê. âå÷å ñà ïîêàçàíè â ïðåäèøíèÿ ðåä îò òàçè òàáëèöà.
    Òàáëèöàòà ïîêàçâà ñïèñúê ñ íàé-÷åñòî èçïîëçâàíèòå êëþ÷îâè ôðàçè èëè äóìè èçïîëçâàíè çà íàìèðàíå íà âàøèÿò ñàéò ñ ïîìîùòà íà èíòåðíåò òúðñà÷êè. (Êëþ÷îâèòå äóìè îò #SearchEnginesArray# íàé-ïîïóëÿðíèòå òúðñà÷êè ñà ðàçïîçíàòè îò #PROG#, êàòî Yahoo, Altavista, Lycos, Google, Voila, è ò.í...).
    Çàá.: îáùèÿò áðîé íà òúðñåíèÿòà ïî êëþ÷îâè äóìè ìîæå äà ïðåâèøàâà áðîÿ íà òúðñåíèÿòà ïî êëþ÷îâè ôðàçè (èñòèíñêèÿò áðîé íà òúðñåíèÿòà), çàùîòî àêî ñå èçïîëçâàò 2 êë. äóìè ïðè åäíî è ñúùî òúðñåíå ñå îòáðîÿâàò 2 òúðñåíèÿ ïî äóìè (ïî âåäíúæ çà âñÿêà äóìà).
    Ðîáîòèòå (èçâåñòíè è êàòî Ïàÿöè) ñà àâòîìàòèçèðàíè êîìïþòúðíè ïîñåòèòåëè èçïîëçâàíè îò òúðñà÷êèòå äà ñêàíèðàò ñàéòà âè çà èíäåêñèðàíå è êëàñèôèöèðàíå: òå ñúáèðàò èíôîðìàöèÿ çà Óåá ñàéòîâåòå è/èëè ïðîâåðÿâàò äàëè ñàéòúò âè å îíëàéí.
    #PROG# ìîæå äà ðàçïîçíàå äî #RobotArray# ðîáîòà.
    Âñè÷êè âðåìåâè ñòàòèñòèêè ñà áàçèðàíè íà ÷àñîâîòî âðåìå íà ñúðâúðà.
    Äîêëàäâàíèòå äàííè ñà: ïðèáëèçèòåëíè ñòîéíîñòè (èç÷èñëåíè îò âñè÷êè äàííè ìåæäó íà÷àëíîòî è ïîñëåäíîòî ïîñåùåíèå)
    Äîêëàäâàíèòå äàííè ñà: íàðàñòâàùè ñóìè (èç÷èñëåíè îò âñè÷êè äàííè ìåæäó íà÷àëíîòî è ïîñëåäíîòî ïîñåùåíèå)
    Íÿêîè ñòîéíîñòè íà Ïðîäúëæèòåëíîñò íà ïîñåùåíèÿòà ñà 'íåèçâåñòíè' çàùîòî íåâèíàãè ìîãàò äà áúäàò èç÷èñëåíè. Îñíîâíàòà ïðè÷èíà çà òîâà å:
    - Ïîñåùåíèåòî îùå íå å ïðèêëþ÷èëî, êîãàòî å ïðåäèçâèêàíî 'îáíîâÿâàíå'.
    - Ïîñåùåíèåòî å çàïî÷íàëî â ïîñëåäíèÿò ÷àñ (ñëåä 23:00) îò ïîñëåäíèÿò äåí íà ìåñåöà (ïî òåõíè÷åñêè ïðè÷èíè #PROG# å âúçïðåïÿòñòâàí äà èç÷èñëè ïðîäúëæèòåëíîñòòà íà òàêèâà ñåñèè).
    Íÿìà îïèñàíèå íà òàçè ãðåøêà.
    Çàÿâêàòà ùå áúäå îáðàáîòåíà ïî-êúñíî îò ñúðâúðà.
    Ñúðâúðúò îáðàáîòè çàÿâêàòà, íî òÿ íå ñúäúðæà íèùî.
    ×àñòè÷íî ñúäúðæàíèå
    Â îòãîâîðà íà çàÿâêàòà ìîæåòå äà âèäèòå íîâèÿò àäðåñ íà ïîèñêàíèÿò äîêóìåíò.
    Íÿìà îïèñàíèå íà òàçè ãðåøêà.
    Ñèíòàêòè÷íà ãðåøêà, ñúðâúðúò íå ðàçáèðà âàøàòà çàÿâêà.
    Îïèòâàòå ñå äà äîñòèãíåòå URL çàùèòåí ñ èìå/ïàðîëà.
    Ìíîãîêðàòíè òàêèâà ñúîáùåíèÿ ìîãàò äà îçíà÷àâàò îïèò çà íåîòîðèçèðàí è/èëè çëîíàìåðåí äîñòúï äî âàøèÿò ñàéò.
    Îïèòâàòå ñå äà äîñòèãíåòå URL íåäîñòúïåí è çà îòîðèçèðàíè ïîòðåáèòåëè (íàïðèìåð, URL àäðåñ â äèðåêòîðèÿ, êîÿòî íå å äåôèíèðàíà çà "ïðåãëåä".).
    Îïèòâàòå ñå äà äîñòèãíåòå íåñúùåñòâóâàù URL. Òîâà ïîêàçâà ñúùåñòâóâàíåòî íà íåâàëèäíà âðúçêà â ñàéòà èëè ïîãðåøíî íàïèñàí îò ïîñåòèòåëÿ URL àäðåñ.
    Ñúðâúðúò å îòäåëèë òâúðäå ìíîãî âðåìå çà äà îòãîâîðè íà çàÿâêàòà. Òàçè ãðåøêà îáèêíîâåíî îçíà÷àâà èëè áàâåí CGI ñêðèïò, êîéòî ñúðâúðúò ñå å ïðèíóäèë äà ïðåêðàòè èëè èçâúíðåäíî ïðåòîâàðåí ñúñ çàÿâêè ñúðâúð.
    Âúòðåøíà ãðåøêà. Òàçè ãðåøêà îáèêíîâåíî å ïðè÷èíåíà îò CGI ïðîãðàìà êîÿòî å ïðåêðàòèëà äåéñòâèåòî ñè àáíîðìàëíî(coredump íàïðèìåð).
    Èñêàíîòî äåéñòâèå å íåïîçíàòî.
    Êîä çà ãðåøêà, âúðíàò îò HTTP ñúðâúð, ðàáîòåù êàòî ïðîêñè èëè gateway, êîãàòî ñúðâúðúò-öåë íå å îòãîâîðèë óñïåøíà íà êëèåíòñêàòà çàÿâêà.
    Âúòðåøíà ãðåøêà íà ñúðâúðà.
    Ïîðòàëíî(Gateway) ïðåêúñâàíå.
    HTTP âåðñèÿòà íå ñå ïîääúðæà.
    lang/awstats-pl.txt000064400000012061152532065620010333 0ustar00# Polish message file (review: momat@users.sourceforge.net) # $Revision: 1.11 $ - $Date: 2005/11/03 22:29:21 $ PageCode=iso-8859-2 message0=Nieznane message1=Nieznane (brak odwzorowania IP w DNS) message2=Inne message3=Szczegó³y... message4=Dzieñ message5=Miesi±c message6=Rok message7=Statystyki dla message8=Pierwsza wizyta message9=Ostatnia wizyta message10=Liczba wizyt message11=Unikatowych go¶ci message12=Wizyt message13=ró¿ne s³owa kluczowe message14=Szukane message15=Procent message16=Ruch message17=Domeny/Kraje message18=Go¶cie message19=Strony message20=Rozk³ad godzinny message21=Przegl±darki message22=B³êdy HTTP message23=Referenci message24=Nie uaktualniany (zobacz 'Build/Update' na stronie awstats_setup.html) message25=Domeny/Kraje go¶ci message26=hosty message27=strony message28=ró¿nych stron message29=Odwiedziny message30=Inne s³owa message31=Nie znalezione strony message32=Kody b³êdów HTTP message33=Wersje Netscape'a message34=Wersje IE message35=Ostatnia aktualizacja message36=¬ród³a po³±czeñ message37=Pochodzenie message38=Bezpo¶redni adres / Zak³adki(Ulubione) message39=Nieznane Pochodzenie message40=Odno¶nik z wyszukiwarki internetowej message41=Odno¶nik ze strony zewnêtrznej (innej ni¿ strona wyszukiwarki) message42=Odno¶nik ze strony wewnêtrznej (inna strona w tym samym serwisie) message43=Frazy u¿yte w wyszukiwarkach internetowych message44=S³owa kluczowe u¿yte w wyszukiwarkach internetowych message45=Nieznane (brak odwzorowania IP w DNS) message46=Nieznany system operacyjny message47=Nie znaleziony (B³±d HTTP 404) message48=Adres IP message49=B³êdne ¿±dania message50=Nieznane przegl±darki message51=ró¿ne roboty sieciowe message52=wizyt/go¶ci message53=Roboty sieciowe message54=Analizator logów on-line message55=z message56=Strony message57=¯±dania message58=Wersje message59=Systemy operacyjne message60=Sty message61=Lut message62=Mar message63=Kwi message64=Maj message65=Cze message66=Lip message67=¦ie message68=Wrz message69=Pa¼ message70=Lis message71=Gru message72=Nawigacja message73=Typ pliku message74=Aktualizuj message75=Pasmo message76=Z powrotem message77=Pierwsze message78=dd mmm yyyy - HH:MM message79=Filtr message80=Pe³na lista message81=Hosty message82=Znane message83=Roboty sieciowe message84=Ni message85=Pn message86=Wt message87=¦r message88=Cz message89=Pt message90=So message91=Dni tygodnia message92=Kto message93=Kiedy message94=Uwierzytelnieni u¿ytkownicy message95=Min message96=¦rednio message97=Max message98=Kompresja message99=Pasmo zaoszczêdzone message100=Przed skompresowaniem message101=Po skompresowaniu message102=Razem message103=ró¿ne frazy message104=Strona wej¶ciowa message105=Kod message106=¦rednia wielko¶æ message107=Linki z grup dyskusyjnych message108=KB message109=MB message110=GB message111=Grabber message112=Tak message113=Nie message114=Informacja Whois message115=OK message116=Strona wyj¶ciowa message117=Czasy wizyt message118=Zamknij okno message119=Bajtów message120=Poszukiwane frazy message121=Poszukiwane s³owa kluczowe message122=ró¿ne wyszukiwarki message123=ró¿ne strony message124=Inne frazy message125=U¿ytkownicy anonimowi message126=Linkuj±ce wyszukiwarki internetowe message127=Linkuj±ce strony message128=Podsumowanie message129=Dok³adna warto¶æ nie jest dostêpna w widoku rocznym message130=Tablice z warto¶ciami danych message131=Nadawca wiadomo¶ci pocztowych message132=Odbiorca wiadomo¶ci pocztowych message133=Raportowany okres message134=Extra/Marketing message135=Rozmiary ekranów message136=Ataki robaków/wirusów internetowych message137=Dodaj do ulubionych (szacunkowo) message138=Dni miesi±ca message139=Rozmaito¶ci message140=Przegl±darki z obs³ug± Java message141=Przegl±darki z obs³ug± Macromedia Director message142=Przegl±darki z obs³ug± Flash message143=Przegl±darki z obs³ug± odtwarzacza Real audio message144=Przegl±darki z obs³ug± odtwarzacza Quicktime audio message145=Przegl±darki z obs³ug± odtwarzacza Windows Media audio message146=Przegl±darki z obs³ug± PDF message147=Kody b³êdów SMTP message148=Kraje message149=Wiadomo¶ci pocztowe message150=Rozmiar message151=Pierwszy message152=Ostatni message153=Filtr wykluczaj±cy message154=Pokazane tutaj kody dotycz± ¿±dañ lub ruchu "nieogl±danego" przez go¶ci, dlatego nie s± zawarte w innych zestawieniach. message155=Klaster message156=Pokazane tutaj roboty sieciowe generuj± ruch "nieogl±dany" przez go¶ci, dlatego nie s± zawarte w innych zestawieniach. message157=Liczby po + dotycz± udanych odwo³añ do plików "robots.txt". message158=Pokazane tutaj robaki internetowe generuj± ruch "nieogl±dany" przez go¶ci, dlatego nie s± zawarte w innych zestawieniach. message159=Ruch nieogl±dany zawiera ruch generowany przez roboty, robaki internetowe lub odpowiedzi ze specjalymi kodami statusu HTTP. message160=Ruch ogl±dany message161=Ruch nieogl±dany message162=Historia miesiêczna message163=Robaki internetowe message164=ró¿ne robaki internetowe message165=Wiadomo¶ci pocztowe wys³ane prawid³owo message166=Wiadomo¶ci pocztowe nie wys³ane/odrzucone message167=Wra¿liwe cele message168=Javascript wy³±czony message169=Wygenerowane przez message170=wtyczkilang/awstats-is.txt000064400000011173152532065620010336 0ustar00# Icelandic message file (throstur@bylur.net) # $Revision: 1.4 $ - $Date: 2004/09/19 11:05:54 $ message0=Óþekkt message1=óþekktar (ekki tókst að fletta upp IP-vistfangi) message2=Annað message3=Nánari upplýsingar message4=Dagur message5=Mánuður message6=Árið message7=Tölfræði fyrir message8=Fyrsta innlit message9=Síðasta innlit message10=Fjöldi innlita message11=Fjöldi gesta message12=Innlit message13=mismunandi leitarorð message14=Leit message15=Hlutfall message16=Umferð message17=Lén/lönd message18=Gestir message19=Vefsíður-URL message20=Klukkustundir message21=Vafrar message22= message23=Tilvísandi slóð message24=Aldrei verið uppfært (Sjá 'Build/update' á awstats_setup.html síðunni) message25=Lén/land gesta message26=vélar message27=síður message28=mismunandi síður message29=Skoðað message30=Önnur orð message31=Síða fannst ekki message32=HTTP villuboð message33=Netscape útgáfur message34=IE útgáfur message35=Síðast uppfært message36=Tengdist vefsvæði frá message37=Uppruni message38=Beinar tengingar / Bókamerki message39=Uppruni óþekktur message40=Tilvísanir frá leitarvélum message41=Tilvísanir utan vefs (önnur vefsvæði fyrir utan leitarvélar) message42=Tilvísanir innan vefs (önnur síða innan þessa vefsvæðis) message43=Setningar notaðar á leitarvélum message44=Leitarorð notuð á leitarvélum message45=Óþekkt IP vistfang message46=Óþekkt stýrikerfi (useragent reitur) message47=Skrár sem óskað var eftir en fundust ekki (HTTP kóði 404) message48=IP-vistfang message49=Villa Sótt message50=Óþekktir vafrar (useragent reitur) message51=mismunandi leitarormar message52=innlit/gest message53=Heimsóknir leitarorma message54=Ókeypis rauntíma annálagreinir fyrir veftölfræði message55=af message56=Síður message57=Skrár message58=Útgáfur message59=Stýrikerfi message60=jan message61=feb message62=mar message63=apr message64=maí message65=jún message66=júl message67=ágú message68=sep message69=okt message70=nóv message71=des message72=Vafur message73=Tegundir skráa message74=Uppfæra núna message75=Bandvídd message76=Til baka á aðalsíðu message77=efstu message78=dd mmm yyyy - HH:MM message79=Sía message80=Heildarlisti message81=Vélar message82=þekktar message83=leitarormar message84=sun message85=mán message86=þri message87=mið message88=fim message89=fös message90=lau message91=Vikudagar message92=Hver message93=Hvenær message94=Innskráðir notendur message95=Lægsta message96=Meðaltal message97=Hæsta message98=Þjöppun vefs message99=Spöruð bandvídd message100=Kveikt á þjöppun message101=Útkoma þjöppunar message102=Samtals message103=mismunandi leitarsetningar message104=Fyrsta síða message105=Kóði message106=Meðalstærð message107=Tilvísanir frá fréttahópum message108=KB message109=MB message110=GB message111=Þjófur message112=Já message113=Nei message114=Upplýsingar um lén message115=Í lagi message116=Síðasta síða message117=Lengd innlits message118=Loka glugga message119=bæti message120=Leitarsetningar message121=Leitarorð message122=mismunandi tilvísandi leitarvélar message123=mismunandi tilvísandi vefir message124=Aðrar setningar message125=Aðrar innskráningar (og/eða gestir) message126=Tilvísandi leitarvélar message127=Tilvísandi vefsvæði message128=Samantekt message129=Nákvæmur fjöldi ekki mögulegur þegar heilt ár er birt message130=Gildisfylki gagna message131=Netföng sendanda message132=Netföng viðtakanda message133=Skýrslutímabil message134=Annað/markaðsmál message135=Skjástærðir message136=Ormar og vírusar message137=Bætt við sem bókamerki (áætlun) message138=Mánaðardagar message139=Ýmislegt message140=Vafrar með Java stuðning message141=Vafrar með Macromedia Director stuðning message142=Vafrar með Flash stuðning message143=Vafrar með Real audio stuðning message144=Vafrar með Quicktime hljóðspilunarstuðning message145=Vafrar með Windows Media hljóðspilunarstuðning message146=Vafrar með PDF stuðning message147=SMTP villuboð message148=Lönd message149=Bréf message150=Stærð message151=Fyrsta message152=Síðasta message153=Útilokunarsía message154=Þessi villuboð þýða að gestir hafi í raun ekki séð síðurnar, svo þeir eru ekki taldir annars staðar en hér. message155=Klasi message156=Þessar heimsóknir komu ekki frá raunverulegum gestum, svo þær eru ekki taldar með annars staðar en hér. message157=Tölur eftir + tákna hversu oft "robots.txt" skrár voru sóttar. message158=Þessar heimsóknir komu ekki frá raunverulegum gestum, svo þær eru ekki taldar með annars staðar en hér. message159=""Engin augu" tákna umferð leitarorma, vírusa og sérstakra HTTP kóða. message160=Augu message161=Engin augu message162=Mánaðarleg saga message163=Ormar message164=mismunandi ormar message165=Send bréf message166=Höfnuð bréf message167=Sýkjanlegt message168=Slökkt á Javascript lang/awstats-lv.txt000064400000012033152532065620010340 0ustar00# Latvieðu valodas ziòojumu fils (madmaster@gobbo.caves.lv) # Updated by edvinsma@inbox.lv 2004/01/24 00:40:00 # $Revision: 1.5 $ - $Date: 2006/01/25 00:07:59 $ PageCode=windows-1257 message0=Nezinâms message1=Nezinâms (neatpazîts ip) message2=Citi message3=Apskatît izvçrsti message4=Diena message5=Mçnesis message6=Gads message7=Statistika message8=Pirmais apmeklçjums message9=Pçdçjais apmeklçjums message10=Vizîðu skaits message11=Unikâlie apmeklçtâji message12=Apmeklçjums message13=atðíirîgi(s) atslçgvârdi(s) message14=Meklçt message15=Procenti message16=Trafiks message17=Domaini/Valstis message18=Apmeklçtâji message19=Lapas-URL message20=Stundas message21=Pârlûkprogrammas message22=HTTP Kïûdas message23=Norâdîtâji message24=Meklçt Atslçgvârdus message25=Apmeklçtâju domaini/valstis message26=hosti message27=lapas message28=atðíirîgas lapas message29=Skatîtas lapas message30=Citi vârdi message31=Neatrastas lapas message32=HTTP Kïûdu kodi message33=Netscape versijas message34=IE versijas message35=Pçdçjais jauninâjums message36=Pievienoties saitei no message37=Oriìinâli message38=Tieðâ adrese / Grâmatzîmes message39=Orìinâls nezinâms message40=Norâdes no Interneta Meklçðanas Saitçm message41=Norâdes no ârçjâm lapâm (citas web lapas izòemot meklçðanas saites) message42=Links from an internal page (cita lapa ðajâ paðâ saitç) message43=Atslçgvârdi kas lietoti meklçðanas saitçs message44=Kb message45=Neatpazîtas IP Addreses message46=Nezinâms OS (Norâdes Lauks) message47=Pieprasîts bet neatrasts URLs (HTTP kods 404) message48=IP Addrese message49=Kïuda Trâpîjumi message50=Nezinâmi pârlûki (Norâdes lauks) message51=Apmeklçjuðie roboti message52=apmeklçjumi/apmeklçtâji message53=Roboti/Zirnekïi apmeklçtâji message54=Brîvs reâlâ laika logfailu analizators advancçtai web statistikai message55=no message56=Lapas message57=Trâpîjumi message58=Versijas message59=Operçtâjsistçmas message60=Jan message61=Feb message62=Mar message63=Apr message64=Mai message65=Jûn message66=Jûl message67=Aug message68=Sep message69=Okt message70=Nov message71=Dec message72=Navigâcija message73=Failu tips message74=Atjaunot message75=Baiti message76=Atpakaï uz galveno lapu message77=Augða message78=dd mmm yyyy - HH:MM message79=Filtrs message80=Pilns saraksts message81=Hosti message82=Zinâms message83=Roboti message84=Sv message85=Pir message86=Ot message87=Tr message88=Ce message89=Pkt message90=Se message91=Nedçïas dienas message92=Kas message93=Kad message94=Autentificçtie lietotâji message95=Min message96=Vid message97=Maks message98=Web salîdzinâjums message99=saglabâtais joslas platums message100=Pirms kompresijas message101=Pçc kompresijas message102=Kopâ message103=Atðíirîgi atslçgvârdi message104=Iejas lapas message105=Kods message106=Vidçjais izmçrs message107=Saites no Ziòu grupâm message108=KB message109=MB message110=GB message111=Savâcçjs message112=Jâ message113=Nç message114=WhoIs informâcija message115=OK message116=Izejas pages message117=Apmeklçjuma ilgums message118=Aizvçrt logu message119=Baiti message120=Meklçðanas atslçgfrâzes message121=Meklçðanas atslçgvârdi message122=Citas meklçtâju lapas ar atsaucçm message123=Citas lapas ar atsaucçm message124=Citas frâzes message125=Anonîmie lietotâji message126=Meklçtâju lapas ar atsaucçm message127=Lapas ar atsaucçm message128=Kopsavilkums message129=Precîza vçrtîba sadaïâ "Gads" nav pieejama message130=Datu vçrîbu kopnes message131=Sûtîtâja adrese message132=Saòçmçja adrese message133=Atskaites periods message134=Papildus/Mârketings message135=Ekrâna izðíirðanas spçja message136=Vîrusu uzbrukumi message137=Pievienots izlasei message138=Mçneða dienas message139=Daþâdi message140=Pârlûkprogrammas ar Java atbalstu message141=Pârlûkprogrammas ar Macromedia Director atbalstu message142=Pârlûkprogrammas ar Flash atbalstu message143=Pârlûkprogrammas ar RealAudio atbalstu message144=Pârlûkprogrammas ar QuickTime atbalstu message145=Pârlûkprogrammas ar Windows Media atbalstu message146=Pârlûkprogrammas ar PDF atbalstu message147=SMTP kïûdu kodi message148=Valstis message149=E-pasti message150=Izmçrs message151=Sâkums message152=Beigas message153=Izslçgðanas filtrs message154=Ðeit kodi parâda ðâvienus vai trafiku, ko nav apskatîjuði lietotâji, tâpçc viòi nav iekïauti citâs diagrammâs. message155=Puduris message156=Ðeit uzrâdîtie roboti ir radîjuði trâpijumus vai "nepskatîto" trafiku, tâpçc tie nav iekïauti citâs diagrammâs. message157=Skaitlis pçc "+" ir veiksmîgo ðâvienu skaits robots.txt failam. message158=Ðie ir uzrâdîti trâpijumi vai trafiks ko radîja tîkla târpi vai arî "neapskatîtâs" lapas, tâpçc tie nav iekïauti citâs diagrammâs. message159="Neapskatîto" trafiku ìenerç roboti, tîkla târpi, vai arî atbildes ar specialo HTTP statusa kodu. message160=Apskatîts trafiks message161=Nav apskatîts trafiks message162=Mçneða atskaite message163=Tîkla târpi message164=Daþâdi tîkla târpi message165=Veiksmîgi nosûtîti e-pasti message166=Neveiksmîgas e-pasta sûtîðanas message167=Ievainojamîba message168=Atslçgtsw Javascript message169=Izveidojis message170=spraudòi message171=Reìioni message172=Pilsçtaslang/awstats-sk.txt000064400000011275152532065620010343 0ustar00# Slovak message file (lecram@lecram.sk) # $Revision: 1.4 $ - $Date: 2004/08/20 01:01:54 $ PageCode=windows-1250 message0=Neznámy message1=Neznámy (nepreložená IP) message2=Ostatné message3=Prehliadnu� detaily message4=Deò message5=Mesiac message6=Rok message7=Štatistika pre message8=Prvá návšteva message9=Posledná návšteva message10=Poèet návštev message11=Unikátne návštevy message12=Návšteva message13=Výrazy message14=Hladánie message15=Percenta message16=Traffic message17=Domény/krajina message18=Návštevy message19=Stránky/URL message20=Hodiny message21=Browsery (prehliadaèe) message22=HTTP Chyby message23=Referencie message24=H¾adané výrazy message25=Návštevy domény/krajiny message26=hosts message27=stránok message28=rôzne stránky message29=Prístup message30=Iné slová message31=Nenájdené stránky message32=Chybové kódy HTTP message33=Verzie Netscape message34=Verzie MS Internet Explorer message35=Posledná aktualizácia message36=Konekcia z message37=Pôvod message38=Piama adresa / Oblúbené (Bookmark) message39=Neznámý pôvod message40=Odkaz z Internetového vyhladávaèa message41=Odkaz z inej stránky (ine stránky ako vyhladávaèe) message42=Odkaz z vlastnej stránky (iná stránka na servery) message43=Výrazy použité vo vyhladávaèi message44=Vyhladávané slová message45=Nepreložená IP adresa message46=Neznámý OS (položka Referer) message47=Požadované, ale nenájdené URL (HTTP 404) message48=IP Addresa message49=Chyba Dotazov message50=neznámý browser (prehliadaè) (položka Referer) message51=Návštevnos� robotov message52=návštev/návštevníka message53=Roboti message54=Volne širitelný nástroj pre analýzu web štatistík message55=z message56=Stránok message57=Hity message58=Verzia message59=OS message60=Jan message61=Feb message62=Mar message63=Apr message64=Maj message65=Jun message66=Jul message67=Aug message68=Sep message69=Okt message70=Nov message71=Dec message72=Navigácia message73=Typy súborov message74=Aktualizova� message75=Bajtov message76=Spä� na hlavnú stránku message77=Hore message78=dd mmm yyyy - HH:MM message79=Filter message80=Úplny výpis message81=Hosts message82=Známe message83=Roboti message84=Ned message85=Pon message86=Uto message87=Str message88=Štv message89=Pia message90=Sob message91=Dni v tyždni message92=Kto message93=Kedy message94=Prihlásení uživatelia message95=Min message96=Priemer message97=Max message98=Web kompresia message99=úsporená šírka pásma message100=Pred kompresiou message101=Po kompresii message102=Celkom message103=different keyphrases message104=Vsupná stránky message105=Kód message106=Priemerná velkos� message107=Linky z NewsGroup message108=KB message109=MB message110=GB message111=Zachycovaè message112=Áno message113=Nie message114=WhoIs informácie message115=OK message116=Exit stránky message117=Trvanie návštevy message118=Zavrie� okno message119=Bytov message120=H¾adaj Klúèové frázy message121=H¾adaj Klúèové slová message122=odkazy z rôznych vyhladávaèov message123=odkazy z rôznych stránok message124=Iné frázy message125=Anonymný užívatel message126=Odkazy z vyh¾adávaèov message127=Odkazy zo stránok message128=Súhrn message129=V zobrazení 'Rok' nie je dostupná presná hodnota message130=Data value arrays message131=E-mail odosielatela message132=E-mail prijemcu message133=Zobrazený èasový úsek message134=Extra/Marketing message135=Ve¾kosti obrazovky message136=Worm/Virus napadnutia message137=Prida� do ob¾úbených message138=Dni v mesiaci message139=Rôzne message140=Prehliadaèe s Java podporou message141=Prehliadaèe s Macromedia Director podporou message142=Prehliadaèe s Flash podporou message143=Prehliadaèe s Real audio playing podporou message144=Prehliadaèe s Quictime audio playing podporou message145=Prehliadaèe s Windows Media audio playing podporou message146=Prehliadaèe s PDF podporou message147=SMTP Error kódy message148=Krajiny message149=E-maily message150=Ve¾kos� message151=Prvý message152=Posledný message153=Filter výnimiek message154=Zobrazené kódy generovali hity a ruch bez uživate¾ských prehliadnutí, takže nebudú zahrnuté v ostatných grafoch message155=Cluster (Zoskupenie) message156=Zobrazení roboti generovali hity a ruch bez uživate¾ských prehliadnutí, takže nebudú zahrnuté v ostatných grafoch message157=Èísla za + zobrazujú úspešné hity na súbory "robots.txt". message158=Zobrazené èervy generovali hity a ruch bez uživate¾ských prehliadnutí, takže nebudú zahrnuté v ostatných grafoch message159=Neprehliadajúce hity a ruch zahàòajú hity generované robotmi, èervami alebo špecifikými HTTP kódmi message160=Prehliadajúci ruch message161=Neprehliadajúci ruch message162=Mesaèná história message163=Èervy message164=iné èervy message165=Úspešne odoslané e-maily message166=Chybné/Odmietnuté e-maily message167=Citlivé ciele message168=Vypnutý JavaScriptlang/awstats-nb.txt000064400000011315152532065620010320 0ustar00# Norwegian Bokmål message file (by Vemund F Jensen ) # $Revision: 1.8 $ - $Date: 2004/04/09 19:18:33 $ PageCode=iso-8859-1 message0=Ukjent message1=Ukjente (fant ikke vertsnavn) message2=Andre message3=Vis detaljer message4=Dag message5=Måned message6=År message7=Statistikk for message8=Første besøk message9=Siste besøk message10=Antall besøk message11=Unike gjester message12=Besøk message13=forskjellige søkeord message14=Søk message15=Prosent message16=Trafikk message17=Domene/land message18=Gjester message19=Sider/url-er message20=Timefordeling message21=Nettlesere message22= message23=Referenter message24=Aldri oppdatert message25=Besøkendes domener/land message26=verter message27=sider message28=forskjellige sider/url-er message29=Viste sider message30=Andre ord message31=Manglende sider message32=HTTP statuskoder message33=Netscape-versjoner message34=IE-versjoner message35=Siste oppdatering message36=Koblet til siden fra message37=Opphav message38=Direkteadresse/bokmerke message39=Ukjent opphav message40=Lenker fra søkemotorer message41=Lenker fra eksterne sider (andre nettsteder unntatt søkemotorer) message42=Lenker fra interne sider (andre sider på samme nettsted) message43=Søkeuttrykk brukt i søkemotorer message44=Søkeord brukt i søkemotorer message45=Ukjent vertsnavn message46=Ukjent operativsystem (referentfelt) message47=Dokument ikke funnet (HTTP feilkode 404) message48=IP-adresse message49=Feiltreff message50=Ukjent nettleser (referentfelt) message51=ulike roboter message52=besøk/gjest message53=Robotbesøk message54=Gratis sanntids logganalysator for avansert webstatistikk message55=av message56=Sider message57=Treff message58=Versjoner message59=Operativsystemer message60=Jan message61=Feb message62=Mar message63=Apr message64=Mai message65=Jun message66=Jul message67=Aug message68=Sep message69=Okt message70=Nov message71=Des message72=Navigasjon message73=Filtype message74=Oppdater nå message75=Datamengde message76=Tilbake til hovedsiden message77=øverste message78=yyyy-mm-dd - HH:MM message79=Filter message80=Full liste message81=Verter message82=kjente message83=Roboter message84=Søn message85=Man message86=Tir message87=Ons message88=Tor message89=Fre message90=Lør message91=Ukedagsfordeling message92=Hvem message93=Når message94=Autentiserte brukere message95=Min. message96=Snitt message97=Maks. message98=Komprimering message99=Båndbredde spart message100=Komprimering på message101=Komprimeringsresultat message102=Total message103=forskjellige søkeuttrykk message104=Inngangssider message105=Kode message106=Gjennomsnittstørrelse message107=Lenker fra diskusjonsgrupper message108=KB message109=MB message110=GB message111=Grabber message112=Ja message113=Nei message114=Info message115=OK message116=Utgangssider message117=Besøkslengde message118=Lukk vindu message119=Bytes message120=Søkeuttrykk message121=Søkeord message122=forskjellige refererende søkemotorer message123=forskjellige refererende nettsteder message124=Andre uttrykk message125=Andre pålogginger (og/eller anonyme brukere) message126=Refererende søkemotorer message127=Refererende nettsteder message128=Sammendrag message129=Nøyaktig antall ikke tilgjengelig i årssammendraget message130=Verditabeller message131=E-post (avsender) message132=E-post (mottaker) message133=Rapportperiode message134=Ekstra message135=Skjermstørrelser message136=Orm-/virusangrep message137=Lagt til favoritter (estimat) message138=Månedsoversikt message139=Forskjellig message140=Nettlesere med støtte for Java message141=Nettlesere med støtte for Macromedia Director message142=Nettlesere med støtte for Flash message143=Nettlesere med støtte for Real lydavspilling message144=Nettlesere med støtte for Quicktime lydavspilling message145=Nettlesere med støtte for Windows Media lydavspilling message146=Nettlesere med støtte for PDF message147=SMTP feilkoder message148=Land message149=Meldinger message150=Størrelse message151=Første message152=Siste message153=Sperrefilter message154=Disse kodene gav treff eller trafikk som ikke ble vist i nettleseren, og er ikke inkludert i andre oversikter. message155=Klynge message156=Roboter vist her gav treff eller trafikk som ikke ble vist i nettleseren, og er ikke inkludert i andre oversikter. message157=Antall etter + er treff på "robots.txt"-filer. message158=Ormer vist her gav treff eller trafikk som ikke ble vist i nettleseren, og er ikke inkludert i andre oversikter. message159=Ikke-vist trafikk er trafikk generert av roboter, ormer eller HTTP-trafikk med spesielle statuskoder. message160=Vist trafikk message161=Ikke-vist trafikk message162=Årsoversikt message163=Ormer message164=Ulike ormer message165=Vellykkede e-postforsendelser message166=Mislykkede/avviste e-postforsendelser message167=Sensitive mållang/awstats-fi.txt000064400000011624152532065620010322 0ustar00# Finnish message file (skyde@welho.com) # Original by (zebi@kanetti.com) # $Revision: 1.3 $ - $Date: 2004/06/07 11:09:33 $ message0=Tuntematon message1=Tuntematon (Selvittämätön IP) message2=Muut message3=Katso tiedot message4=Päivä message5=Kuukausi message6=Vuosi message7=Statistiikat: message8=Ensimmäinen vierailu message9=Viimeisin vierailu message10=Vierailujen määrä message11=Uniikkia vierailijaa message12=Vierailu message13=eri hakusanaa message14=Hakuja message15=Prosentti message16=Liikenne message17=Domainit/maat message18=Vierailija message19=Sivujen URL message20=Tunnit message21=Selaimet message22=HTTP Virheet message23=Viittaajat message24=Päivittämätön message25=Vierailijoiden domainit/maat message26=hostit message27=sivut message28=eri sivua message29=Ladatut sivut message30=Muut sanat message31=Sivuja ei löytynyt message32=HTTP-virhekoodit message33=Netscapen versiot message34=IE:n versiot message35=Edellinen päivitys message36=Sivuille saavuttu osoitteesta: message37=Alkuperä message38=Suora osoite / Kirjanmerkit message39=Tuntematon alkuperä message40=Linkit Internetin hakukoneista message41=Linkit ulkopuolisilta sivuilta (poislukien hakukoneet) message42=Linkit sisäisiltä sivuilta (omasta domainista) message43=Hakukoneissa käytetyt hakulauseet message44=Hakukoneissa käytetyt hakusanat message45=Selvittämätön IP-osoite message46=Tuntematon käyttöjärjestelmä (käyttäjän mukana lähetetty tieto) message47=Pyydetyt, mutta ei löytyneet osoitteet (HTTP virhekoodi 404) message48=IP-osoite message49=Virheosumat message50=Tuntemattomia selaimia (käyttäjän mukana lähetetty tieto) message51=Vierailleet robotit message52=käyntiä/vierailija message53=Robotteja/"Spider" -vierailijoita message54=Ilmainen reaaliaikainen lokitiedoston analysoija kehittyneiden web-tilastojen laadintaan message55=josta message56=Sivuja message57=Osumia message58=Versiot message59=Käyttöjärjestelmät message60=Tammi message61=Helmi message62=Maalis message63=Huhti message64=Touko message65=Kesä message66=Heinä message67=Elo message68=Syys message69=Loka message70=Marras message71=Joulu message72=Navigaatio message73=Tiedostotyyppi message74=Päivitä nyt message75=Kaista message76=Takaisin pääsivulle message77=Yleisimmät message78=dd.mm.yyyy - HH:MM message79=Filtteri message80=Täysi lista message81=Hosteja message82=Tunnettuja message83=Robotteja message84=Su message85=Ma message86=Ti message87=Ke message88=To message89=Pe message90=La message91=Viikonpäivät message92=Kuka message93=Milloin message94=Kirjautuneet käyttäjät message95=Minimi message96=Keskiarvo message97=Maksimi message98=Pakkaus message99=Kaistaa säästetty message100=Pakkaus käytössä message101=Pakattuna message102=Yhteensä message103=eri hakulausetta message104=Saapumissivu message105=Koodi message106=Keskimääräinen koko message107=Linkit uutisryhmistä message108=Kt message109=Mt message110=Gt message111=Grabber message112=Kyllä message113=Ei message114=WhoIs -tiedot message115=OK message116=Poistumissivu message117=Vierailujen kestot message118=Sulje ikkuna message119=Tavua message120=Hakulauseet message121=Hakusanat message122=eri viittaavaa hakukonetta message123=eri viittaavaa sivustoa message124=Muut lausekkeet message125=Anonyymit käyttäjät message126=Viittaavat hakukoneet message127=Viittaavat sivustot message128=Yhteenveto message129=Tarkkaa arvoa ei saatavilla vuosinäkymässä message130=Data value arrays message131=Lähettäjän EMail-osoite message132=Vastaanottajan EMail-osoite message133=Raportin aikaväli message134=Extra/Markkinointi message135=Näytön resoluutiot message136=Mato-/Virushyökkäykset message137=Lisätty suosikkeihin (arvio) message138=Kuukausi päivittäin message139=Sekalaista message140=Selaimet Java -tuella message141=Selaimet Macromedia Director -tuella message142=Selaimet Flash -tuella message143=Selaimet Real audio -tuella message144=Selaimet Quicktime audio -tuella message145=Selaimet Windows Media audio -tuella message146=Selaimet PDF -tuella message147=SMTP-virhekoodit message148=Maat message149=Viestiä message150=Koko message151=Ensimmäinen message152=Viimeinen message153=Exclude filter message154=Tässä luetellut koodit luetaan "ei näytetty" -liikenteeksi, eikä niitä ole näinollen sisällytetty muihin tilastoihin. message155=Rypäs message156=Tässä luetellut robotit luetaan "ei näytetty" -liikenteeksi, eikä niitä ole näinollen sisällytetty muihin tilastoihin. message157=Luvut + -merkin jälkeen ovat onnistuneita osumia "robots.txt"-tiedostoihin. message158=Tässä luetellut madot luetaan "ei näytetty" -liikenteeksi, eikä niitä ole näinollen sisällytetty muihin tilastoihin. message159="Ei näytetty"-liikenne sisältää hakurobottien, matojen ja poikkeavien HTTP-tilakoodien aiheuttaman liikenteen. message160=Näytetty liikenne message161=Ei näytetty liikenne message162=Kuukausittaittaiset tilastot message163=Matoja message164=erilaista matoa message165=Viestiä lähetetty onnistuneesti message166=Viestiä epäonnistunut/torjuttu message167=Herkkiä kohteita lang/awstats-it.txt000064400000012471152532065620010341 0ustar00# Italian message file # $Revision: 1.16 $ - $Date: 2006/01/04 18:52:44 $ # PaniC! - panic@freemail.it # Francesco Potorti - pot@gnu.org # iDave - idave@idave.it # Salvo - salvo@scicli.com # CereS - ceres@divxmania.it # StarKnight - starknight@starkingdom.it message0=Sconosciuti message1=Sconosciuti (ip non risolto) message2=Altri message3=Mostra dettagli message4=Giorno message5=Mese message6=Anno message7=Statistiche di message8=Prima visita message9=Ultima visita message10=Numero di visite message11=Visitatori diversi message12=Visita message13=parole chiave diverse message14=Ricerche message15=Percentuale message16=Traffico message17=Domini/Nazioni message18=Visitatori message19=Pagine-URL message20=Ore message21=Browser message22= message23=Provenienza message24=Non aggiornato (Vedi 'Build/Update' sulla pagina awstats_setup.html) message25=Domini o nazioni dei visitatori message26=host message27=pagine message28=pagine-url diverse message29=Accessi message30=Altre parole message31=Pagine non trovate message32=Codici di errore HTTP message33=Versioni di Netscape message34=Versioni di Internet Explorer message35=Ultimo Aggiornamento message36=Provenienza delle connessioni message37=Provenienza message38=Accessi diretti o via segnalibro message39=Accessi di origine sconosciuta message40=Accessi da motore di ricerca message41=Accessi da pagina esterna (altri siti eccetto i motori di ricerca) message42=Accessi da pagina interna (altra pagina dello stesso sito) message43=Frasi usate nei motori di ricerca message44=Parole usate nei motori di ricerca message45=Indirizzi IP non risolti message46=Sistemi operativi sconosciuti (campo 'useragent') message47=URL richieste ma non trovate (codice HTTP 404) message48=Indirizzo IP message49=Accessi con errore message50=Browser sconosciuti (campo 'useragent') message51=robot diversi message52=visite/visitatore message53=Accessi di robot e spider message54=Analizzatore in tempo reale di log gratuito per statistiche web avanzate message55=su message56=Pagine message57=Accessi message58=Versioni message59=Sistemi operativi message60=Gen message61=Feb message62=Mar message63=Apr message64=Mag message65=Giu message66=Lug message67=Ago message68=Set message69=Ott message70=Nov message71=Dic message72=Navigazione message73=Tipi di file message74=Aggiorna message75=Banda usata message76=Pagina principale message77=Prime message78=dd mmm yyyy / HH:MM message79=Filtro message80=Elenco completo message81=Host message82=Conosciuti message83=Robot message84=Dom message85=Lun message86=Mar message87=Mer message88=Gio message89=Ven message90=Sab message91=Giorni della settimana message92=Chi message93=Quando message94=Utenti autenticati message95=Min message96=Media message97=Max message98=Compressione Web message99=Banda risparmiata message100=Prima della compressione message101=Dopo la compressione message102=Totale message103=frasi chiave diverse message104=Pagine iniziali message105=Codice message106=Dimensione media message107=Accessi da un NewsGroup message108=KB message109=MB message110=GB message111=Grabber message112=Si message113=No message114=Informazioni message115=OK message116=Pagine d'uscita message117=Durata delle visite message118=Chiudi questa finestra message119=Byte message120=Frasi cercate message121=Parole cercate message122=differenti motori di ricerca message123=differenti siti message124=Altre frasi message125=Altre login (e/o utenti anonimi) message126=Motori di ricerca message127=Siti message128=Sommario message129=Valori esatti non disponibili nella vista 'Anno' message130=Tabelle dei valori message131=EMail del mittente message132=EMail del ricevente message133=Periodo di riferimento message134=Extra/Marketing message135=Risoluzione video message136=Worm/Attacchi di virus message137=Aggiungi a preferiti (stimato) message138=Giorni del mese message139=Informazioni varie message140=Browser con supporto per Java message141=Browser con supporto per Macromedia Director message142=Browser con supporto per Flash message143=Browser con supporto audio per Real Player message144=Browser con supporto audio per Quicktime Player message145=Browser con supporto audio per Windows Media Player message146=Browser con supporto PDF message147=Codici di errore SMTP message148=Nazioni message149=Mail message150=Dimensione message151=Prima message152=Ultima message153=Escludi message154=I codici elencati hanno generato accessi o traffico "non visualizzato" dai visitatori, pertanto non vengono inclusi negli altri grafici. message155=Raggruppato message156=I robot elencati hanno generato accessi o traffico "non visualizzato" dai visitatori, pertanto non vengono inclusi negli altri grafici. message157=I numeri dopo il + rappresentano gli accessi effettuati verso i file "robot.txt". message158=I worm elencati hanno generato accessi o traffico "non visualizzato" dai visitatori, pertanto non vengono inclusi negli altri grafici. message159=Il traffico "non visualizzato" è il traffico generato da robot, worm oppure da risposte con codici di errore HTTP speciali. message160=Traffico visualizzato message161=Traffico non visualizzato message162=Riepilogo mensile message163=Worm message164=worm diversi message165=Mail inviate correttamente message166=Mail fallite/rifiutate message167=Obiettivi sensibili message168=Javascript disabilitato message169=Creato da message170=plugin message171=Regioni message172=Cittàlang/d2utmpkdanJP000064400000006566152532065620007736 0ustar00# Indonesian message file (oleh Steven Haryanto) # $Revision: 1.6 $ - $Date: 2002/10/29 19:14:33 $ message0=Tidak Diketahui message1=Tidak Diketahui (IP tidak teresolve) message2=Lainnya message3=Lihat Rincian message4=Hari message5=Bulan message6=Tahun message7=Statistik untuk message8=Kunjungan Pertama message9=Kunjungan Terakhir message10=Jumlah Kunjungan message11=Pengunjung Unik message12=Kunjungan message13=Kata Kunci message14=Pencarian message15=Persen message16=Trafik message17=Domain/Negara message18=Pengunjung message19=Halaman-URL message20=Jam (Waktu Server) message21=Browser message22=Error HTTP message23=Referer message24=Tidak pernah diupdate message25=Domain/negara pengunjung message26=host message27=halaman message28=halaman-url unik message29=Halaman yang Dilihat message30=Kata lain message31=Halaman tidak ditemukan (not found) message32=Kode error HTTP message33=Versi Netscape message34=Versi IE message35=Terakhir diupdate message36=Asal koneksi dari message37=Asal message38=Direct address / Bookmark message39=Asal tidak diketahui message40=Link dari Search Engine message41=Link dari situs lain (yang bukan search engine) message42=Link dari situs sendiri (situs yang sama dengan halaman yang diakses) message43=Frase yang dipakai di search engine message44=Kata kunci yang dipakai di search engine message45=Alamat IP yang tidak teresolve message46=OS tidak diketahui (field useragent) message47=URL tidak ditemukan (kode HTTP 404) message48=Alamat IP message49=Jumlah Hit Error message50=Browser tidak diketahui (field useragent) message51=robot unik message52=kunjungan/pengunjung message53=Robot/Spider message54=Tool gratis penganalisis log realtime dan penghasil statistik web advanced message55=dari message56=Halaman message57=Hit message58=Versi message59=Sistem Operasi message60=Jan message61=Feb message62=Mar message63=Apr message64=Mei message65=Jun message66=Jul message67=Agu message68=Sep message69=Okt message70=Nov message71=Des message72=Navigasi message73=Jenis File message74=Update Sekarang message75=Bandwidth message76=Kembali ke halaman utama message77=Kembali Ke Atas message78=dd mmm yyyy - HH:MM message79=Filter message80=Daftar Lengkap message81=Host message82=Diketahui message83=Robot message84=Min message85=Sen message86=Sel message87=Rab message88=Kam message89=Jum message90=Sab message91=Hari message92=Siapa message93=Kapan message94=User yang memiliki password message95=Min message96=Rata-Rata message97=Maks message98=Kompresi web message99=Penghematan bandwidth message100=Sebelum kompresi message101=Sesudah kompresi message102=Total message103=Frase unik message104=Halaman masuk (entry page) message105=Kode message106=Ukuran rata-rata message107=Link dari newsgroup message108=KB message109=MB message110=GB message111=Grabber message112=Ya message113=Tidak message114=Info WhoIs message115=OK message116=Halaman keluar (exit page) message117=Lama kunjungan message118=Tutup window message119=Byte message120=Frase Pencarian message121=Kata Kunci Pencarian message122=search engine referer unik message123=situs referer unik message124=Frase lain message125=Login lain (dan/atau user anonim) message126=Search engine referer message127=Situs referer message128=Ringkasan message129=Nilai pasti tidak tersedia di tampilan 'Tahunan' message130=Array nilai data message131=Email Pengirim message132=Email Penerima message133=Periode Laporanlang/awstats-ko.txt000064400000012520152532065620010331 0ustar00# Korean message file (translator unknown in previous R1.6/ currently power@k-june.com after 1.7) # $Revision: 1.1 $ - $Date: 2005/09/30 22:12:38 $ PageCode=UTF-8 message0=미확ì�¸ message1=알수없는 ì ‘ì†�ìž�(알수없는 ip) message2=기타 message3=ìž�세히 보기 message4=ì�¼ message5=ì›” message6=ë…„ message7=통계 message8=처ì�Œ ì ‘ì†� message9=마지막 ì ‘ì†� message10=ì ‘ì†� 회수 message11=ì ‘ì†�ìž�수 message12=ì ‘ì†� message13=단어를 검색했습니다 message14=검색어 message15=비율 message16=Traffic message17=ë�„ë©”ì�¸/êµ­ê°€ message18=방문ìž� message19=페ì�´ì§€/URL message20=시간별 통계 message21=브ë�¼ìš°ì € message22=HTTP ì—�러 message23=참조한 경로 message24=ì—…ë�°ì�´íЏë�œì � ì—†ì�Œ(awstats_setup.htmlì�˜ Build/Update를 참고하세요) message25=방문ìž� ë�„ë©”ì�¸/êµ­ê°€ message26=호스트 message27=페ì�´ì§€ message28=다른 페ì�´ì§€ message29=ì�½ê¸° 회수 message30=다른 단어 message31=페ì�´ì§€ì—†ì�Œ message32=HTTP ì—�러 코드 message33=넷스케ì�´í”„ 버전 message34=MS ì�¸í„°ë„· ì�µìŠ¤í”Œë¡œëŸ¬ 버전 message35=마지막 ì—…ë�°ì�´íЏ message36=ì ‘ì†� 사ì�´íŠ¸ë³„ 통계 message37=주소 message38=ì§�ì ‘ 주소 ìž…ë ¥ / ì¦�겨찾기 message39=알수없ì�Œ message40=ë‚´ë¶€ 검색 엔진ì—�서 ì—°ê²° message41=외부페ì�´ì§€ì—�서 ì—°ê²° (검색엔진ì�„ 제외한 다른 웹사ì�´íЏ) message42=내부페ì�´ì§€ì—�서 ë§�í�¬(ê°™ì�€ 사ì�´íЏì�˜ 다른 페ì�´ì§€) message43=검색엔진ì—�서 사용한 문장(문구) message44=검색엔진ì—�서 사용한 단어 message45=알수없는 IP 주소 message46=알수없는 OS (페러í�¼ 필드) message47=존재하지 않는 URL ì ‘ì†�시ë�„ (HTTP 코드 404) message48=IP 주소 message49=ì ‘ì†�오류 회수 message50=알수없는 브ë�¼ìš°ì € (ë ˆí�¼ëŸ¬ 필드) message51=종류ì�˜ 검색엔진ì�´ 방문하였습니다. message52=ì ‘ì†�/방문ìž� message53=검색로봇/스파ì�´ë�” 방문 message54=ì§„ë³´ì �ì�¸ 웹 통계를 위한 ìž�유로운 실시간 로그파ì�¼ message55=- message56=ì�½ì�€ 페ì�´ì§€ message57=조회수 message58=버전별 보기 message59=ìš´ì˜�ì²´ì œ message60=1ì›” message61=2ì›” message62=3ì›” message63=4ì›” message64=5ì›” message65=6ì›” message66=7ì›” message67=8ì›” message68=9ì›” message69=10ì›” message70=11ì›” message71=12ì›” message72=방문종류/ë°©ì‹� 통계 message73=파ì�¼ 종류 message74=Update now message75=전송량 message76=처ì�Œìœ¼ë¡œ ë�Œì•„가기 message77=ìƒ�위 message78=yyyyë…„ mmì›” ddì�¼ - HH시 MMë¶„ message79=찾기 message80=전체보기 message81=호스트 message82=알려진 ì ‘ì†�ìž� message83=검색엔진 message84=ì�¼ message85=ì›” message86=í™” message87=수 message88=목 message89=금 message90=토 message91=ìš”ì�¼ë³„ 통계 message92=방문ìž� 통계 message93=방문시간 통계 message94=ì�¸ì¦�ë�œ 사용ìž� message95=최소 message96=í�‰ê·  message97=최대 message98=ì••ì¶• message99=압축으로 절약 message100=ì••ì¶•ì „ message101=압축후 message102=합계 message103=문장(문구)ì�„ 검색했습니다 message104=ì ‘ì†�횟수 message105=코드 message106=í�‰ê· í�¬ê¸° message107=뉴스그룹ì—�서 ë§�í�¬ message108=KB message109=MB message110=GB message111=Grabber message112=예 message113=아니오 message114=ì •ë³´. message115=OK message116=마지막 ì ‘ì†� message117=머무른 시간 message118=ì°½ 닫기 message119=Bytes message120=검색한 문장 message121=검색한 단어 message122=different refering search engines message123=different refering sites message124=그외 message125=다른 로그ì�¸ (그리고/ë˜�는 ì�µëª…ì�˜ 사용ìž�) message126=참조한 검색엔진 message127=참조한 사ì�´íЏ message128=ì „ì²´ 요약 message129=Exact value not available in 'Year' view message130=Data value arrays message131=Sender EMail message132=Receiver EMail message133=기간 message134=Extra/Marketing message135=화면해ìƒ�ë�„ message136=웜/ë°”ì�´ëŸ¬ìФì�˜ 공격 message137=ì¦�겨찾기ì—� 추가 (추정값) message138=ì�´ë²ˆë‹¬ ì ‘ì†�통계 message139=기타 ì •ë³´ message140=Javaì§€ì›� 브ë�¼ìš°ì € message141=Macromedia Directorì§€ì›� 브ë�¼ìš°ì € message142=Flashì§€ì›� 브ë�¼ìš°ì € message143=Real audio 재ìƒ� ì§€ì›� 브ë�¼ìš°ì € message144=Quicktime audio 재ìƒ� ì§€ì›� 브ë�¼ìš°ì € message145=Windows Media audio 재ìƒ� ì§€ì›� 브ë�¼ìš°ì € message146=PDFì§€ì›� 브ë�¼ìš°ì € message147=SMTP ì—�러코드 message148=êµ­ê°€ message149=편지 message150=í�¬ê¸° message151=처ì�Œ message152=마지막 message153=제외할 단어 message154=ì�´ê³³ì—� 표시ë�œ 코드는 기타접ì†�ì—� 해당하므로,다른 통계ì—�는 í�¬í•¨ë�˜ì§€ 않았습니다. message155=Cluster message156=ì�´ê³³ì—� 표시ë�œ 검색로봇ì�˜ 방문ì�€ 기타접ì†�ì—� 해당하므로,다른 통계ì—�는 í�¬í•¨ë�˜ì§€ 않았습니다. message157= + 표시 ë’¤ì�˜ 숫ìž�는 robots.txt파ì�¼ì�„ ì •ìƒ�ì �으로 확ì�¸í•œ 숫ìž�입니다. message158=ì�´ê³³ì—� 표시ë�œ 웜바ì�´ëŸ¬ìФì�˜ 방문ì�€ 기타접ì†�ì—� 해당하므로,다른 통계ì—�는 í�¬í•¨ë�˜ì§€ 않았습니다. message159=기타 ì ‘ì†�ì�€ 검색엔진,웜바ì�´ëŸ¬ìФ,특수한HTTP코드ì—� ì�˜í•œ ì ‘ì†�ì�„ ë§�합니다. message160=ì ‘ì†� 현황 message161=기타 ì ‘ì†� message162=올해ì�˜ ì ‘ì†�통계 message163=웜바ì�´ëŸ¬ìФ message164=웜바ì�´ëŸ¬ìФ message165=편지가 ì •ìƒ�ì �으로 발송ë�˜ì—ˆì�Œ message166=편지 보내기가 실패함/ê±°ë¶€ë�¨ message167=Sensitive targets message168=Javascript disabled message169=제작 message170=플러그ì�¸ lang/awstats-sr.txt000064400000016411152532065620010347 0ustar00# Serbian message file (Tomislav Loncar, tomo@inecco.net; Bojan Suzic, bojans@teol.net; Mihailo Stefanović, mst@mikis.org) # $Revision: 1.5 $ - $Date: 2004/01/17 02:25:04 $ PageCode=utf-8 message0=Ð�епознато message1=непознатих (IP адреÑ�а није разрешена) message2=ОÑ�тало message3=Види детаље message4=Дан message5=МeÑ�ец message6=Година message7=СтатиÑ�тике за message8=Прва поÑ�ета message9=ПоÑ�ледња поÑ�ета message10=Број поÑ�ета message11=ЈединÑ�твених поÑ�етилаца message12=поÑ�ета message13=кључних речи message14=Претрага message15=Проценат message16=Саобраћај message17=Домени/земље message18=поÑ�етилаца message19=Странице/URL message20=ЧаÑ�ова (Ñ�ерверÑ�ко време) message21=Прегледници message22=HTTP грешке message23=Везе message24=Ð�ије ажурирано message25=Домени/земље поÑ�етилаца message26=рачунара message27=Ñ�траница message28=различитих Ñ�траница message29=ПриÑ�туп message30=ОÑ�тале речи message31=Ð�епронађене Ñ�транице message32=HTTP кодови грешака message33=Верзије Netscape-a message34=Верзије IE-a message35=Ð�журирано message36=Спољне везе: message37=Како је кориÑ�ник дошао message38=Директан приÑ�туп message39=Ð�епознато порeкло message40=Везе Ñ�а интернет претраживача message41=Везе Ñ�а Ñ�пољних Ñ�траница (оÑ�им интернет претраживача) message42=Везе Ñ�а влаÑ�титих Ñ�траница (оÑ�тале Ñ�транице унутар вашег Ñ�ајта) message43=Фраза коришћених на претраживачима message44=Кључне речи коришћене на претраживачима message45=Ð�еразрешена IP адреÑ�а message46=Ð�епознат оперативни Ñ�иÑ�тем message47=Захтевана локација није пронађена (HTTP грешка 404) message48=IP адреÑ�а message49=Погодака Ñ�а грешкама message50=Ð�епознат интернет прегледник message51=робота поÑ�етилаца message52=ПоÑ�ета по поÑ�етиоцу message53=ПоÑ�етиоци роботи message54=БеÑ�платни анализатор поÑ�ета за напредне веб Ñ�татиÑ�тике message55=од message56=Страница message57=Погодака message58=Верзије message59=Оперативни Ñ�иÑ�тем message60=Јан message61=Феб message62=Мар message63=Ð�пр message64=Мај message65=Јун message66=Јул message67=Ð�вг message68=Сеп message69=Окт message70=Ð�ов message71=Дец message72=Ð�авигација message73=Ð’Ñ€Ñ�те датотека message74=Ð�журирај Ñ�ада message75=Проток message76=Ð�азад на главну Ñ�трану message77=првих message78=dd mmm yyyy - HH:MM message79=Филтер message80=Пуна лиÑ�та message81=Рачунари message82=познатих message83=Роботи message84=Ð�ед message85=Пон message86=Уто message87=Сре message88=Чет message89=Пет message90=Суб message91=Дани у недељи message92=Ко message93=Када message94=Пријављени кориÑ�ници message95=Минимално message96=проÑ�ечно message97=МакÑ�имално message98=Веб компреÑ�ија message99=Уштеда Ñ�аобраћаја message100=Пре компреÑ�ије message101=Ð�акон компреÑ�ије message102=Укупно message103=различитих кључних фраза message104=Улазне Ñ�транице message105=Код message106=ПроÑ�ечна величина message107=Везе Ñ�а диÑ�куÑ�ионих група message108=KB message109=MB message110=GB message111=МаÑ�овно преузимање Ñ�трана (grabber) message112=Да message113=Ð�е message114=WhoIs информације message115=У реду message116=Излаз message117=Трајање поÑ�ета message118=Затвори прозор message119=Бајтова message120=Фразе Ð·Ð° претрагу message121=Кључне Ñ€ÐµÑ‡Ð¸ за претрагу message122=различитих претраживача Ñ�а везом message123=различитих Ñ�ајтова Ñ�а везом message124=ОÑ�тале фразе message125=ОÑ�тале пријаве (и/или анонимни кориÑ�ници) message126=Претраживачи Ñ�а везама message127=Сајтови Ñ�а везама message128=Преглед message129=Тачна вредноÑ�Ñ‚ није доÑ�тупна у годишњем прегледу message130=ВредноÑ�ти поља message131=Е-пошта пошиљаоца message132=Е-пошта примаоца message133=Период обухваћен извештајем message134=Додатно/маркетинг message135=Величине екрана message136=Ð�апади црва/вируÑ�а message137=Додавања у омиљене локације (оквирно) message138=Дани у меÑ�ецу message139=Разно message140=Прегледници Ñ�а Java подршком message141=Прегледници Ñ�а Macromedia Director подршком message142=Прегледници Ñ�а Flash подршком message143=Прегледници Ñ�а Real audio подршком message144=Прегледници Ñ�а Quicktime audio подршком message145=Прегледници Ñ�а Windows Media audio подршком message146=Прегледници Ñ�а PDF подршком message147=SMTP кодови грешака message148=Земље message149=Порука message150=Величина message151=Први message152=ПоÑ�ледњи message153=Exclude filter message154=Овде приказани кодови Ñ�у направили поÑ�ете или Ñ�аобраћај који кориÑ�ници ниÑ�у видели, па зато ниÑ�у укључени у оÑ�тале извештаје. message155=КлаÑ�тер message156=Овде приказани роботи Ñ�у направили поÑ�ете или Ñ�аобраћај који кориÑ�ници ниÑ�у видели, па зато ниÑ�у укључени у оÑ�тале извештаје. message157=Бројеви приказани иза + Ñ�у уÑ�пешни погодци на "robots.txt" датотеке. message158=Овде приказани црви Ñ�у направили поÑ�ете или Ñ�аобраћај који кориÑ�ници ниÑ�у видели, па зато ниÑ�у укључени у оÑ�тале извештаје. message159=Ð�еприказан Ñ�аобраћај је Ñ�аобраћај који Ñ�у направили роботи, црви, или одговори Ñ�а Ñ�пецијалним HTTP Ñ�татуÑ� кодовима. message160=Приказаног Ñ�аобраћаја message161=Ð�еприказаног Ñ�аобраћаја message162=МеÑ�ечне Ñ�татиÑ�тике message163=Црви message164=различитих црва lang/awstats-lt.txt000064400000012667152532065620010353 0ustar00# Lithuanian message file (varas@lzuu.lt) # $Revision: 1.1 $ - $Date: 2006/01/20 20:28:43 $ PageCode=windows-1257 message0=Neþinomas message1=Neþinomas (negali iðriðti ip) message2=Kita message3=Plaèiau apie tai message4=Diena message5=Mënuo message6=Metai message7=Statistika message8=Pirmas apsilankymas message9=Paskutinis apsilankymas message10=Viso vizitø message11=Unikalûs lankytojai message12=Apsilankymas message13=skirtingas(-i) raktinis(-iai) þodis(-þiai) message14=Paieðka message15=Procentai message16=Srautas message17=Domenai/Ðalys message18=Lankytojai message19=Puslapiai-URL message20=Valandos message21=Narðyklës message22= message23=Nukreipëjai (Referers) message24=Duomenø bazëje nëra áraðø (Skaitykite 'Build/Update' skyriø awstats_setup.html puslapyje) message25=Lankytojai domenai/ðalys message26=ðaltiniai(hosts) message27=puslapiai message28=skirtingas(-i) puslapis(-ai)-url'as(-ai) message29=Perþiørëta message30=Kiti þodþiai message31=Nerasti puslapiai message32=HTTP statusas message33=Netscape versijos message34=IE versijos message35=Paskutiná kartà atnaujinta message36=Prisijungta prie svetainës ið message37=Kilmës ðalis message38=Tiesioginis adresas / Þymës message39=Neþinoma kilmë message40=Nuorodos ið interneto paieðkos sistemø message41=Nuorodos ið iðorinø puslapiø (kitos interneto svetainë iðskyrus paieðkos sistemas) message42=Nuorodos ið vidiniø puslapiø (kiti puslapiai ið tos paèios svetainës) message43=Raktinës frazës naudotos paieðkos sistemose message44=Raktiniai þodþiai naudoti paieðkos sistemose message45=Neiðriðti IP adresai message46=Neþinoma OS (narðyklës laukas) message47=Ieðkoti bet nerasti URL'ai (HTTP kodas 404) message48=IP adresas message49=Klaida Kreipimosi skaièius message50=Neþinoma narðyklë (narðyklës laukas) message51=skirtingas(-i) robotas(-ai) message52=apsilankymai/lankytojai message53=Robotai/Paieðkos sistemø botai message54=Nemokamas log failø analizatorius skirtas iðplëstinei web statistikai kaupti ir iðvesti message55=ið message56=Puslapiai message57=Apsilankymai message58=Versijos message59=Operacinës sistemos message60=Sau message61=Vas message62=Kov message63=Bal message64=Geg message65=Bir message66=Lie message67=Rgp message68=Rgs message69=Spa message70=Lap message71=Gru message72=Valdymo panelë message73=Failo tipas message74=Atnaujinti dabar message75=Srautas message76=Atgal á pagrindinæ svetainæ message77=TOP message78=yyyy mmm dd - HH:MM message79=Filtras message80=Visas sàraðas message81=Ðaltiniai (hosts) message82=Þinoma message83=Robotai message84=Sek message85=Pir message86=Ant message87=Tre message88=Ket message89=Pen message90=Ðeð message91=Savaitës dienos message92=Kas message93=Kada message94=Prisijungæ vartotojai message95=Minimaliai message96=Vidutiniðkai message97=Maksimaliai message98=Web suspaudimo bûdas message99=Bandwidth saved message100=Suspaudimas ájungtas on message101=Compression result message102=Viso message103=skirtingos raktinës frazës message104=Áraðas message105=Kodas message106=Vidutinis dydis message107=Nuorodos ið naujenø grupiø message108=KB message109=MB message110=GB message111=Grabber message112=Taip message113=Ne message114=Info. message115=Gerai message116=Iðeiti message117=Apsilankymo trukmë message118=Uþdaryti langà message119=Baitai message120=Paieðka Raktinës frazës message121=Paieðka Raktiniai þodþiai message122=skirtingos nukreipianèios paieðkos sistemos message123=skirtingi nukreipiantys puslapiai message124=Kitos frazës message125=kiti prisijungimai (ir/arba anoniminiai vartotojai) message126=Nukreipianèios paieðkos sistemos message127=Nukreipiantys puslapiai message128=Bendra informacija message129=Tiksliø duomenø nerasta 'Metinëje' ataskaitoje message130=Duomenø tipø masyvai message131=Siuntëjo el. paðto adresas message132=Gavëjo el. paðto adresas message133=Praneðimo periodas message134=Papildomai/Marketing message135=Ekrano dydþiai message136='Kirminø'/Virusø atakos message137=Pridëta á mëgstamiasiø sàraðà (apytikslis skaièiavimas) message138=Mënesio dienos message139=Ávairûs message140=Narðyklës su Java palaikymu message141=Narðyklës su Macromedia Director palaikymu message142=Narðyklës su Flash palaikymu message143=Narðyklës su Real audio palaikymu message144=Narðyklës su Quicktime audio palaikymu message145=Narðyklës su Windows Media audio palaikymu message146=Narðyklës su PDF palaikymu message147=SMTP klaidø kodai message148=Ðalys message149=Paðtai message150=Dydis message151=Pirmas message152=Paskutinis message153=Iðjungi filtrà message154=Vartotojø uþklausos paþymëtos ðiais kodais - "nematomos", taigi jie nëra pateikti kituose grafikuose. message155=Klasteris (Cluster) message156=Robotø uþklausos paþymëtos ðiais kodais - "nematomos" ið vartotojø pusës, taigi jie nëra pateikti kituose grafikuose. message157=Sakièiai uþ + yra sëkmingø uþklausø á "robots.txt" filà suma. message158="Kirminø"/virusø uþklausos paþymëtos ðiais kodais - "nematomos" ið vartotojø pusës, taigi jie nëra pateikti kituose grafikuose. message159=Nematomas srautas - srautas generuojamas robotø, "kirminø", arba serverio atsakymø su specialiais HTTP statuso kodais. message160=Matomas srautas message161=Nematomas srautas message162=Mënesio istorija message163=Kirminai (worms) message164=skirtingi kirminai message165=Sëkmingai iðsiøsti el. laiðkai message166=Atmesti (failed/refused) el. laiðkai message167="Jautrûs taikiniai" (Sensitive targets) message168=Javascript palaikymas iðjungtas message169=Sukurta su message170=Pluginai message171=Regionai message172=Miestai lang/awstats-se.txt000064400000012237152532065620010334 0ustar00# Swedish message file # $Revision: 1.13 $ - $Date: 2004/09/14 13:01:31 $ message0=Okänd message1=Okända (ip-adress ej uppslagen) message2=Övriga message3=Visa detaljer message4=Dag message5=Månad message6=År message7=Statistik för message8=Första besök message9=Senaste besök message10=Antal besök message11=Unika besökare message12=Besök message13=Nyckelord message14=Sök message15=Procent message16=Trafik message17=Domäner/Länder message18=Besökare message19=Sidor/URL message20=Tidpunkt (Servertid) message21=Webbläsare message22=HTTP-fel message23=Refererande sidor message24=Söktermer message25=Besökandes domäner/länder message26=hosts message27=sidor message28=olika sidor message29=Besökta sidor message30=Övriga ord message31=Sidan hittades inte message32=HTTP-felmeddelanden message33=Netscape-versioner message34=IE-versioner message35=Senaste uppdatering message36=Besökarna nådde siten genom message37=Ursprung message38=Direkt adress / Bokmärken message39=Okänt ursprung message40=Länkar från sökmotorer message41=Länkar från externa sidor (andra webbsidor med undantag för sökmotorer) message42=Länkar från interna sidor (annan sida på samma sajt) message43=Nyckelfraser som använts på sökmotorer message44=Nyckelord som använts på sökmotorer message45=Ip-adress ej uppslagen message46=Okänt operativsystem (Referer-fält) message47=Efterfrågade men ej funna URL:er (HTTP fel 404) message48=IP-adress message49=Fel träffar message50=Okända webbläsare (Referer-fält) message51=Besökande webbrobotar/spindlar message52=besök/besökare message53=Besökande webbrobotar/spindlar message54=Gratis loggfilsanalysator för avancerad realtids webbstatistik message55=av message56=Sidor message57=Träffar message58=Versioner message59=Operativsystem message60=Jan message61=Feb message62=Mar message63=Apr message64=Maj message65=Jun message66=Jul message67=Aug message68=Sep message69=Okt message70=Nov message71=Dec message72=Navigering message73=Filtyper message74=Uppdatera nu message75=Byte message76=Tillbaka till första sidan message77=Topp message78=dd mmm yyyy - HH:MM message79=Filter message80=Fullständig lista message81=Besökare message82=Kända message83=Robotar message84=Sön message85=Mån message86=Tis message87=Ons message88=Tor message89=Fre message90=Lör message91=Veckodagar message92=Vem message93=När message94=Verifierade användare message95=Min message96=Medel message97=Max message98=Webbkomprimering message99=Sparad bandbredd message100=Före komprimering message101=Efter komprimering message102=Totalt message103=olika söksträngar message104=Entrésidor message105=Kod message106=Medelstorlek message107=Länkar från en Nyhetsgrupp message108=KB message109=MB message110=GB message111=Grabber message112=Ja message113=Nej message114=WhoIs information message115=OK message116=Avslut message117=Besökets Längd message118=Stäng Fönster message119=Bytes message120=Söknyckelfraser message121=Söknyckelord message122=olika refererande sökmotorer message123=olika refererande siter message124=Andra fraser message125=Andra logins (och/eller anonyma användare) message126=Refererande sökmotorer message127=Refererande siter message128=Summering message129=Exakt värde inte tillgängligt i 'År' vy message130=Datavärde vektor message131=Avsändare E-post message132=Mottagare E-post message133=Rapporterad period message134=Extra/Marknadsföring message135=Skärmstorlekar message136=Maskar/Virus attacker message137=Lägg till i Favoriter (estimerat) message138=Dag i månad message139=Diverse message140=Webbläsare med Java stöd message141=Webbläsare med Macromedia Director stöd message142=Webbläsare med Flash stöd message143=Webbläsare som kan spela upp Real audio message144=Webbläsare som kan spela upp Quicktime audio message145=Webbläsare som kan spela upp Windows Media audio message146=Webbläsare med PDF stöd message147=SMTP Felkoder message148=Länder message149=E-postmeddelanden message150=Storlek message151=Första message152=Sista message153=Exclude filter message154=Koder som visas i detta diagram anger automatisk trafik. message155=Kluster message156=De robotar som visas här orsakade automatisk trafik som ej är inkluderad i de övriga resultaten. message157=Siffror efter + anger träffar på "robots.txt" filer. message158=De maskar som visas här orsakade automatisk trafik som ej är inkluderad i de övriga resultaten. message159=Automatisk trafik betyder trafik orsakad av robotar, maskar och svar med särskilda HTTP statuskoder. message160=Manuell trafik message161=Automatisk trafik message162=Månatlig statistik message163=Maskar message164=olika maskar message165=E-post sänd ok message166=E-post misslyckad/nekad message167=Känsliga mållang/awstats-mk.txt000064400000012151152532065620010327 0ustar00# Ìàêåäîíñêè ïðåâîä çà awstats (editor@alibi.com.mk) # $Ðåâèçè¼à: 1.12 $ - $Äàòóì: 2005/06/01 00:40:00 $ message0=Íåïîçíàòè message1=Íåïîçíàòè (áåç îòêðèåíà ip àäðåñà) message2=Îñòàíàòè message3=Âèäè äåòàëè message4=Äåí message5=Ìåñåö message6=Ãîäèíà message7=Ñòàòèñòèêà çà message8=Ïðâà ïîñåòà message9=Ïîñëåäíà ïîñåòà íà message10=Áðî¼ íà ïîñåòè message11=Unique ïîñåòè message12=Ïîñåòè message13=ðàçëè÷íè êëó÷íè çáîðîâè message14=Ïðåáàðóâ༠message15=Ïðîöåíò message16=Ñîîáðà�༠message17=Äîìåèíè/Çåì¼è message18=Ïîñåòèòåëè message19=Ñòðàíèöè-URL message20=×àñîâè message21=Áðàóñåðè message22= message23=Ðåôåðåíòè message24=Íèêîãàø íå å àïäå¼òèðàíî (Âèäè âî 'Build/Update' âî awstats_setup.html ñòðàíàòà) message25=Ïîñåòèòåëè îä äîìåèíè/çåì¼è message26=õîñòîâè message27=ñòðàíè message28=ðàçëè÷íè ñòðàíè-url message29=Ïðåãëåäàíî message30=Îñòàíàòè çáîðîâè message31=Ñòðàíàöè êîè íå ñå íà¼äåíè message32=HTTP Ñòàòóñ êîäîâè message33=Netscape âåðçèè message34=IE âåðçèè message35=Ïîñëåäåí àïäå¼ò message36=Ëèíê äî ñà¼òîò îä message37=Ïîòåêëî message38=Äèðåêòíà àäðåñà / Áóêìàðê message39=Íåïîçíàòî ïîòåêëî message40=Ëèíêîâè îä ïðåáàðóâà÷êè ñà¼òîâè message41=Ëèíêîâè îä åêñòåðíè ñòðàíèöè (ñèòå îñòàíàòè âåá ñà¼òîâè, áåç ïðåáàðóâà÷êèòå) message42=Ëèíêîâè îä âíàòðåøíè ñòðàíè (äðóãè ñòðàíè íà èñòèîò âåá ñà¼ò) message43=Êëó÷íè ôðàçè êîðèñòåíè âî ïðåáàðóâà÷êè ñà¼òîâè message44=Êëó÷íè çáîðîâè êîðèñòåíè âî ïðåáàðóâà÷êè ñà¼òîâè message45=Íåîòêðèåíè IP Àäðåñè message46=Íåïîçíàò Îïåðàòèâåí Ñèñòåì (ãðåøêà ïðè äåòåêöè¼à) message47=Ãðåøêà ïðè ïðåáàðóâàœå íà URL (HTTP êîä 404) message48=IP Àäðåñè message49=Ãðåøêà Õèòîâè message50=Íåïîçíàòè áðàóñåðè (ãðåøêà ïðè äåòåêöè¼à) message51=ðàçëè÷íè ðîáîòè message52=ïîñåòè/ïîñåòèòåëè message53=Ðîáîò/Ñïà¼äåð ïîñåòèòåëè message54=Áåñïëàòåí ïðîãðàì çà àíàëèçà íà ëîã ôà¼ëîâè âî ðåàëíî âðåìå. Ãåíåðèðà íàïðåäíà ñòàòèñòèêà message55=îä message56=Ñòðàíè message57=Õèòîâè message58=Âåðçèè message59=Îïåðàòèâíè Ñèñòåìè message60=£àí message61=Ôåâ message62=Ìàð message63=Àïð message64=Ì༠message65=£óí message66=£óë message67=Àâã message68=Ñåï message69=Îêò message70=Íîå message71=Äåê message72=Íàâèãàöè¼à message73=Òèï íà ôà¼ë message74=Îñâåæè ¼à ñòàòèñòèêàòà message75=Bandwidth message76=Íàçàä íà ïî÷åòíà ñòðàíà message77=Ãîðå message78=dd mmm yyyy - HH:MM message79=Ôèëòåð message80=Öåëà ëèñòà message81=Õîñòîâè message82=Ïîçíàòè message83=Ðîáîòè message84=Íåä message85=Ïîí message86=Âòî message87=Ñðå message88=×åò message89=Ïåò message90=Ñàá message91=Äåíîâè âî íåäåëàòà message92=Êîè message93=Êîãà message94=Àâòîðèçèðàíè êîðèñíèöè message95=Ìèí message96=Ñðåäíà âðåäíîñò message97=Ìàêñ message98=Âåá êîìïðåñè¼à message99=Çà÷óâàí bandwidth message100=Ñî êîìïðåñè¼à message101=Ðåçóëòàòè îä êîìïðåñè¼à message102=Âêóïíî message103=ðàçëè÷íè êëó÷íè ôðàçè message104=Ïî÷åòíà message105=Êîä message106=Ñðåäíà ãîëåìèíà message107=Ëèíêîâè îä œóç ãðóïè message108=KB message109=MB message110=GB message111=Grabber message112=Äà message113=Íå message114=Èíôî. message115=Âî ðåä message116=Èçëåç message117=Âðåìåòðàåœå íà ïîñåòèòå message118=Çàòâîðè ãî ïðîçîðîò message119=Bytes message120=Áàð༠êëó÷íè ôðàçè message121=Áàð༠êëó÷íè çáîðîâè message122=ðàçëè÷íè ïðåáàðóâà÷êè ñà¼òîâè message123=ðàçëè÷íè ñà¼òîâè message124=Îñòàíàòè ôðàçè message125=Îñòàíàòè ëîãèðàœà (è/èëè àíîíèìíè êîðèñíèöè) message126=Ïîâðçàíè ïðåáàðóâà÷êè ñà¼òîâè message127=Ïîâðçàíè ñà¼òîâè message128=Ñòàòèñòèêà message129=Òî÷íàòà âðåäíîñò íå å âîçìîæíà âî ïðåãëåäîò çà 'Ãîäèíà' message130=Data value arrays message131=EMail íà èñïðà�à÷îò message132=EMail íà ïðèìà÷îò message133=Çà ïåðèîä message134=Åêñòðà/Ìàðêåòèíã message135=Ãîëåìèíà íà åêðàíîò message136=Öðâè(Worm)/Âèðóñè message137=Êîëêó ïàòè ñà¼òîò å äîäàäåí âî îìèëåíè (îòïðèëèêà) message138=Äåíîâè âî ìåñåöîò message139=Ðàçíî message140=Áðàóñåð ñî Java ïîääðøêà message141=Áðàóñåð ñî Macromedia Director ïîääðøêà message142=Áðàóñåð ñî Flash ïîääðøêà message143=Áðàóñåð ñî Real audio playing ïîääðøêà message144=Áðàóñåð ñî Quicktime audio playing ïîääðøêà message145=Áðàóñåð ñî Windows Media audio playing ïîääðøêà message146=Áðàóñåð ñî PDF ïîääðøêà message147=SMTP Error êîäîâè message148=Çåì¼è message149=Ìå¼ëîâè message150=Ãîëåìèíà message151=Ïðâ message152=Ïîñëåäåí message153=Îòñòðàíè ãî ôèëòåðîò message154=Êîäîâèòå ïîêàæàíè îâäå ãî äàâààò áðî¼îò íà ïîñåòè èëè ñîîáðà�à¼îò êîè íå ñå "ïðåãëåäàíè" îä ïîñåòèòåëèòå, ïà çàòîà íå ñå âêëó÷åíè âî îñòàíàòèòå òàáåëè. message155=Êëàñòåð message156=Ðîáîòèòå ïðèêàæàíè âî ëèñòàòà íå ñå "ïðåãëåäàíè" îä ïîñåòèòåëèòå, ïà çàòîà íå ñå âêëó÷åíè âî îñòàíàòèòå òàáåëè. message157=Áðîåâèòå ïî çíàêîò + ñå óñïåøíè ïîñåòè íà ôà¼ëîò "robots.txt". message158=Öðâèòå (Worms) èçëèñòàíè âî òàáåëàòà íå ñå "ïðåãëåäàíè" îä ïîñåòèòåëèòå, ïà çàòîà íå ñå âêëó÷åíè âî îñòàíàòèòå òàáåëè. message159=Ñîîáðà�à¼îò êî¼ íå å ïðåãëåäàí ãî âêëó÷óâà è ñîîáðà�à¼îò îä ðîáîòè, öðâè, èëè ïðåáàðóâàœà ñî ñïåöè¼àëíè HTTP ñòàòóñíè êîäîâè. message160=Ïðåãëåäàí ñîîáðà�༠message161=Íå ïðåãëåäàí ñîîáðà�༠message162=Ìåñå÷íà àðõèâà message163=Öðâè message164=ðàçëè÷íè öðâè message165=Óñïåøíî èñïðàòåíè ìå¼ëîâè message166=Íåóñïåøíè/îäáèåíè ìå¼ëîâè message167=Îñåòëèâè öåëè message168=Áåç Java ïîääðøêà message169=Èçðàáîòåíî îä message170=Plugins lang/tooltips_f/.DS_Store000064400000014004152532065620011337 0ustar00Bud1eslg1Scomp_noteslg1Scompn_notesmoDDdutcÏ J_notesmodDdutcÏ J_notesph1Scomp  @€ @€ @€ @ EDSDB `€ @€ @€ @lang/tooltips_f/awstats-tt-it.txt000064400000002310152532065620013137 0ustar00
    Numero di client host diversi (indirizzi IP) che si sono connessi.
    Questo valore indica la quantità totale di dati trasferita dai download ftp.
    Le unità di misura sono espresse in KB, MB o GB (KiloByte, MegaByte o GigaByte)
    Gli orari visualizzati sono basati sul fuso orario del server.
    I dati qui riportati sono valori medi (calcolati su tutti i dati tra il primo e l'ultimo accesso nel periodo di tempo analizzato)
    I dati qui riportati sono somme cumulative (calcolate su tutti i dati tra il primo e l'ultimo accesso nel periodo di tempo analizzato)
    lang/tooltips_f/awstats-tt-is.txt000064400000002166152532065620013147 0ustar00
    Fjöldi mismunandi véla (IP-vistfanga) sem notaðar voru til að tengjast.
    Þetta er heildargagnamagn sem halað var niður með ftp.
    Einingar eru í KB, MB eða GB (KílóBæti, MegaBæti eða GígaBæti)
    Öll tímatengd tölfræði er byggð á klukku netþjóns.
    Gögn í þessari skýrslu eru: meðalgildi (reiknuð út frá öllum gögnum milli fyrsta og síðasta bréfs á greindu tímabili)
    Gögn í þessari skýrslu eru: samtölur (reiknuð út frá öllum gögnum milli fyrsta og síðasta bréfs á greindu tímabili)
    lang/tooltips_f/awstats-tt-gr.txt000064400000003164152532065620013143 0ustar00
    Α�ιθμός από διαφο�ετικο�ς πελάτες (IP διευθ�νσεις) που χ�ησιμοποιήθηκαν για σ�νδεση.
    Αυτό είναι το συνολικό μέγεθος δεδομένων που μεταφέ�θηκαν μέσω ftp.
    Οι μονάδες είναι σε KB, MB ή GB (KiloBytes, MegaBytes ή GigaBytes)
    Όλα τα στατιστικά που συσχετίζονται με χ�όνο είναι βάση της ώ�ας του διακομιστή.
    Εδώ, τα δεδομένα που αναφέ�ονται είναι: μέσος ό�ος τιμών (έχουν υπολογιστεί από όλα τα δεδομένα μεταξ� του π�ώτου και του τελευταίου e-mail στο ε��ος της ανάλυσης)
    Εδώ, τα δεδομένα που αναφέ�ονται είναι: συγκεντ�ωτικά σ�νολα (έχουν υπολογιστεί από όλα τα δεδομένα μεταξ� του π�ώτου και του τελευταίου e-mail στο ε��ος της ανάλυσης)
    lang/tooltips_f/awstats-tt-br.txt000064400000002337152532065620013137 0ustar00
    Número de hosts (endereços IP) clientes diferentes utilizados para conectar.
    Esta é a quantidate total de dados transferidos por download de ftp.
    Unidades estão em KB, MB ou GB (KiloBytes, MegaBytes ou GigaBytes)
    Todas estatísticas relacionadas a tempo são baseadas no horário do servidor.
    Aqui os dados reportados são: valores médios (calculados a partir de todos os dados na faixa analisada)
    Aqui os dados reportados são: somas cumulativas (calculados a partir de todos os dados na faixa analisada)
    lang/tooltips_f/awstats-tt-en.txt000064400000002201152532065620013124 0ustar00
    Number of different client hosts (IP addresses) used to connect.
    This is the total amount of data transfered by ftp downloads.
    Units are in KB, MB or GB (KiloBytes, MegaBytes or GigaBytes)
    All time related statistics are based on server time.
    Here, reported data are: average values (calculated from all data between the first and last email in analyzed range)
    Here, reported data are: cumulative sums (calculated from all data between the first and last email in analyzed range)
    lang/tooltips_f/awstats-tt-cz.txt000064400000001731152532065620013145 0ustar00
    Poèet rùyných hostù (IP addresa), kteøí se pøipojili.
    Celkový souèet dat pøenesených po ftp.
    Jednotky jsou v KB, MB or GB (KiloBytes, MegaBytes or GigaBytes)
    V¹echny èasové statistiky vycházejí z èasu na serveru.
    Tato data jsou: prùmìrné hodnoty (vychází z dat mezi prvním a posledním emailem).
    Tato data jsou: souèty (vychází z dat mezi prvním a posledním emailem)
    lang/awstats-et.txt000064400000007562152532065620010342 0ustar00# Estonian message file Andrei Kolu(antik@nek.ee) # $Revision: 1.2 $ - $Date: 2003/04/11 23:37:06 $ message0=Tundmatu message1=Tundmatut (domeeninimeta ip-d) message2=Teised message3=Täpsem ülevaade message4=Päev message5=Kuu message6=Aasta message7=Statistika message8=Esimene Külastus message9=Viimane Külastus message10=Külastuste arv message11=üksik-külastajat message12=Külastus message13=erinevat märksõna message14=Otsi message15=Protsent message16=Traffik message17=Domeenid/Riigid message18=Külastajaid message19=Lehekülgi-URL-e message20=Tunnid message21=Brauserid message22=HTTP Vead message23=Referers message24=Pole varem uuendatud message25=Külastajaid domeenis/riike message26=Külastajaid message27=lehekülgi message28=erinevat lehekülge- url-i message29=Vaadatud message30=Muud sõnad message31=Lehekülgi mida pole leitud message32=HTTP veakoodid message33=Netscape versioonid message34=IE versioonid message35=Viimati Uuendatud message36=Lingitud teise kodulehekülje kaudu message37=Päritolu message38=Otsene aadress / Järjehoidjad message39=Tundmatu päritolu message40=Lingid Interneti otsingusüsteemidelt message41=Lingid välistelt lehekülgedelt (muud koduleheküljed väljaarvatud otsingusüsteemid) message42=Lingid sisemistelt lehekülgedelt (muud koduleheküljed samalt serverilt) message43=Otsingusüsteemides kasutatud märgulaused message44=Otsingusüsteemides kasutatud märgusänad message45=Domeeninimeta IP Aadress message46=Tundmatu OS (useragent field) message47=Nõutud, kuid leidmata URL-id (HTTP kood 404) message48=IP Aadress message49=Vigaseid tabamusi message50=Tundmatud brauserid (useragent field) message51=erinevad robotid message52=külastust/külastaja kohta message53=Robotid message54=Tasuta reaalajas Weebiserveri logifailide statistika analüüsija message55=millest message56=Lehekülgi message57=Tabamusi message58=Versioone message59=Operatsioonisüsteemid message60=Jaan message61=Veeb message62=Märt message63=Apr message64=Mai message65=Juun message66=Juul message67=Aug message68=Sept message69=Okt message70=Nov message71=Dets message72=Navigatsioon message73=Failitüübid message74=Uuendada message75=Läbilase message76=Tagasi pealehele message77=TOP message78=dd mmm yyyy - HH:MM message79=Filter message80=Täisnimekiri message81=Külastajad message82=Teada message83=Robotid message84=Püh message85=Esm message86=Tei message87=Kol message88=Nel message89=Ree message90=Lau message91=Nädalapäevad message92=Kes message93=Millal message94=Autoriseerinud kasutajad message95=Min. message96=Keskmine message97=Maks. message98=Pakkimine message99=Salvestatud läbilase message100=Enne pakkimist message101=Pärast pakkimist message102=Kokku message103=erinevat märksõna message104=Esimesena läbi vaadatud message105=Kood message106=Keskmine suurus message107=Lingid UudisteGruppidest message108=KB message109=MB message110=GB message111=Allalaadija message112=Jah message113=Ei message114=WhoIs info message115=OK message116=Väljumisi message117=Külastuste kestvus message118=Sulge aken message119=Baiti message120=Otsitavad märklaused message121=Otsitavad märksõnad message122=erinevad suunavad otsingusüsteemid message123=erinevad suunavad leheküljed message124=Muud märksõnad message125=Muud logimised (ja/või anonüümsed kasutajad) message126=Suunavad otsingusüsteemid message127=Suunavad leheküljed message128=Kokkuvõte message129=Täpne väärtus 'Aasta' ülevaates pole saadaval message130=Andmete massiiv message131=Saatja EMail message132=Vastuvötja EMail message133=Perioodi aruanne message134=Lisa lang/awstats-he.txt000064400000007732152532065620010325 0ustar00# Hebrew message file (shimi@shimi.net) # $Revision: 1.2 $ - $Date: 2003/11/21 01:06:18 $ PageCode=iso-8859-8-i PageDir=rtl message0=ìà éãåò message1=ìà éãåòéí (IP ìà îôåòðç) message2=àçøéí message3=äöâ ôøèéí message4=éåí message5=çåãù message6=ùðä message7=ñèèéñèé÷ä message8=áé÷åø øàùåï message9=áé÷åø àçøåï message10=îñôø äáé÷åøéí message11=îá÷øéí ééçåãééí (Unique) message12=áé÷åø message13=îéìåú îôúç ùåðåú message14=çôù message15=àçåæéí message16=úðåòä message17=ãåîééðéí/îãéðåú message18=îá÷øéí message19=ëúåáåú-ãôéí message20=ùòåú message21=ãôãôðéí message22= message23=îôðéí (Referers) message24=îòåìí ìà òåãëï message25=ãåîééðéí/îãéðåú äîá÷øéí message26=îàøçéí (hosts) message27=ãôéí message28=ãôé ëúåáú ùåðéí message29=ðöôå message30=îéìéí àçøåú message31=ãôéí ùìà ðîöàå message32=÷åãé ñèèåñ HTTP message33=âéøñàåú ðèñ÷ééô message34=âéøñàåú à÷ñôìåøø message35=òãëåï àçøåï message36=äúçáøåú ìàúø ãøê message37=î÷åø message38=âéùä éùéøä / áå÷îø÷éí message39=î÷åø ìà éãåò message40=÷éùåøéí îîðåò çéôåù message41=÷éùåøéí îãôéí çéöåðééí (àúøéí àçøéí - ìîòè îðåòé çéôåù) message42=÷éùåøéí îãôéí ôðéîééí (ãôéí àçøéí áàúø) message43=áéèåééí ùäùúîùå áäí áîðåòé çéôåù message44=îéìåú îôúç ùäùúîùå áäí áîðåòé çéôåù message45=ëúåáú IP ìà îôåòðçú message46=îòøëú äôòìä ìà éãåòä (áùãä UserAgent) message47=Required but not found URLs (HTTP code 404) message48=ëúåáú IP message49=äéèé ùâéàä message50=ãôãôðéí ìà éãåòéí (áùãä UserAgent) message51=øåáåèéí ùåðéí message52=áé÷åøéí/îá÷ø message53=áé÷åøé øåáåèéí/ñôééãøéí message54=îðúç æîï-àîú ùì ÷áöé ìåâ òáåø ñèèéñèé÷åú âìéùä îú÷ãîåú message55=of message56=ãôéí message57=äéèéí message58=âéøñàåú message59=îòøëåú äôòìä message60=éðåàø message61=ôáøåàø message62=îøõ message63=àôøéì message64=îàé message65=éåðé message66=éåìé message67=àåâåñè message68=ñôèîáø message69=àå÷èåáø message70=ðåáîáø message71=ãöîáø message72=âìéùä message73=ñåâé ä÷áöéí message74=òãëï òëùéå message75=øåçá ôñ message76=çæøä ìãó äøàùé message77=äâãåìéí message78=dd mmm yyyy - HH:MM message79=ôéìèø message80=øùéîä îìàä message81=îàøçéí message82=éãåòéí message83=øåáåèéí message84=øàùåï message85=ùðé message86=ùìéùé message87=øáéòé message88=çîéùé message89=ùéùé message90=ùáú message91=éîé äùáåò message92=îé message93=îúé message94=îùúîùéí îæåäéí message95=îéðéîåí message96=îîåöò message97=î÷ñéîåí message98=ãçéñú Web message99=øåçá ôñ ðçñê message100=ãçéñä ôòéìä message101=úåöàú äãçéñä message102=ñê äëì message103=áéèåéé îôúç ùåðéí message104=ãó ëðéñä message105=÷åã message106=âåãì îîåöò message107=÷éùåøéí îðéåæâøåôñ message108=÷éìåáééè message109=îâäáééè message110=âéâäáééè message111=çåèó message112=ëï message113=ìà message114=îéãò message115=OK message116=ãó éöéàä message117=ú÷åôú áé÷åøéí message118=ñâåø çìåï message119=áúéí message120=áéèåéé îôúç áçéôåùéí message121=îéìåú îôúç áçéôåùéí message122=äôðéåú îîðåòé çéôåù ùåðéí message123=äôðéåú îàúøéí ùåðéí message124=áéèåééí àçøéí message125=ëðéñåú àçøåú (å/àå îùúîùéí àðåðéîééí) message126=äôðéåú îðåòé çéôåù message127=äôðéåú îàúøéí àçøéí message128=ñéëåí message129=òøê îãåéé÷ ìà îåôéò áúöåâú 'ùðä' message130=Data value arrays message131=ëúåáú äàé-îééì ùì äùåìç message132=ëúåáú äàé-îééì ùì äî÷áì message133=ú÷åôä îãååçú message134=ðåñó/ùéåå÷ message135=âãìé îñê message136=äú÷ôåú åéøåñéí/úåìòéí message137=äåñôä ìîåòãôéí (äùòøä) message138=éîé äçåãù message139=ùåðåú message140=ãôãôðéí òí úîéëä á Java message141=ãôãôðéí òí úîéëä á Macromedia Director message142=ãôãôðéí òí úîéëä áôìàù message143=ãôãôðéí òí úîéëä á Real audio message144=ãôãôðéí òí úîéëä á Quicktime audio message145=ãôãôðéí òí úîéëä á Windows Media audio message146=ãôãôðéí òí úîéëä á PDF message147=÷åãé ùâéàåú SMTP message148=îãéðåú message149=àé-îééìéí message150=âåãì message151=øàùåï message152=àçøåï message153=ôéìèø ðôåé message154=÷åãéí äîåôéòéí ëàï ðúðå äéèéí àå úòáåøä "ùìà ðøàúä" òì éãé îá÷øéí, åìëï äí îåôøãéí áèáìä æå. message155=Cluster message156=øåáåèéí äîåöâéí ëàï ðúðå äéèéí àå úòáåøä ù"ìà ðöôúä" òì éãé âåìùéí àîéúééí, ëê ùäí ìà îçåùáéí áøéùåîéí äàçøéílang/awstats-ua.txt000064400000010227152532065620010327 0ustar00# Ukrainian message file (roman@elsyst.km.ua) # $Revision: 1.13 $ - $Date: 2003/08/16 21:35:08 $ PageCode=windows-1251 message0=Íåâiäîìèé message1=Íåâiäîìèõ (íå âäàëîñü ïåðåòâîðèòè IP) message2=Iíøi message3=Äåòàëüíiøå... message4=Äåíü message5=Ìiñÿöü message6=Ðiê message7=Ñòàòèñòèêà ñàéòó message8=Ïåðøèé âiçèò message9=Îñòàííié âiçèò message10=Êiëüêiñòü âiçèòiâ message11=Óíiêàëüíèõ âiäâiäóâà÷iâ message12=Âiçèò message13=ðiçíèõ êëþ÷îâèõ ñëiâ message14=Ïîøóê message15=Âiäñîòîê message16=Ñóìàðíèé òðàôiê message17=Äîìåíè/êðà¿íè message18=Âiäâiäóâà÷i message19=Ñòîðiíêè-URLè message20=Ãîäèíè äîáè message21=Ïðîãðàìè ïåðåãëÿäó message22=Ïîìèëêè HTTP message23=Ïîñèëà÷i message24=Íå îíîâëþâàëîñü message25=Äîìåíè/êðà¿íè âiäâiäóâà÷iâ message26=õîñòiâ message27=ñòîðiíîê message28=ðiçíèõ ñòîðiíîê-URLiâ message29=Ïåðåãëÿíóòî message30=Iíøi ñëîâà message31=Íå çíàéäåíi ñòîðiíêè message32=Êîäè ïîìèëîê HTTP message33=Âåðñi¿ Netscape message34=Âåðñi¿ IE message35=Îñòàííº îíîâëåííÿ message36=Øëÿõè, ÿêèìè âiäâiäóâà÷i ïîòðàïëÿëè íà ñàéò message37=Ïîõîäæåííÿ message38=Ïðÿìèé äîñòóï / Çàêëàäêè message39=Äæåðåëî ïîñèëàíü íå âñòàíîâëåíî message40=Ïîñèëàííÿ ç ïîøóêîâèõ ìàøèí message41=Ïîñèëàííÿ ç çîâíiøíiõ ñòîðiíîê (ç iíøèõ ñàéòiâ çà âèíÿòêîì ïîøóêîâèõ ìàøèí) message42=Ïîñèëàííÿ ç âíóòðiøíiõ ñòîðiíîê (iíøèõ ñòîðiíîê íà öüîìó æ ñàéòi) message43=Êëþ÷îâi ôðàçè, çà ÿêèìè çäiéñíþâàâñÿ ïîøóê íà ïîøóêîâié ìàøèíi message44=Êëþ÷îâi ñëîâà, çà ÿêèìè çäiéñíþâàâñÿ ïîøóê íà ïîøóêîâié ìàøèíi message45=IP-àäðåñè, ÿêi íå âäàëîñü ïåðåòâîðèòè â iìåíà message46=Íåâiäîìà ÎÑ message47=Çàïèòàíi, àëå íåçíàéäåíi URL-è (HTTP êîä 404) message48=IP-àäðåñà message49=Ïîìèëêà Ïîïàäàííÿ message50=Íåâiäîìi ïåðåãëÿäà÷i message51=ðiçíèõ ðîáîòiâ message52=Âiçèò/âiäâiäóâà÷ message53=Ðîáîòè àáî ïàâóêè-âiäâiäóâà÷i message54=Áåçêîøòîâíèé àíàëiçàòîð ïðîòîêîëiâ äëÿ ðîçâèíóòî¿ ñòàòèñòèêè ñàéòiâ message55=ç message56=Ñòîðiíîê message57=Ïîïàäàíü message58=Âåðñi¿ message59=Îïåðàöiéíi ñèñòåìè message60=Ñi÷ message61=Ëþò message62=Áåð message63=Êâi message64=Òðà message65=×åð message66=Ëèï message67=Ñåð message68=Âåð message69=Æîâ message70=Ëèñ message71=Ãðó message72=Íàâiãàöiÿ message73=Òèïè ôàéëiâ message74=Îíîâèòè message75=Ðîçìið message76=Íàçàä äî ãîëîâíî¿ ñòîðiíêè message77=Íàéóæèâàíiøi message78=dd mmm yyyy - HH:MM message79=Ôiëüòð message80=Âåñü ñïèñîê message81=Õîñòè message82=Âiäîìèõ message83=Ðîáîòè message84=Íä message85=Ïí message86=Ââ message87=Ñð message88=×ò message89=Ïò message90=Ñá message91=Äíi òèæíÿ message92=Õòî message93=Êîëè message94=Àâòîðèçîâàíi êîðèñòóâà÷i message95=Ìií. message96= ñåðåäíüîìó message97=Ìàêñ. message98=Ñòèñíåííÿ message99=Åêîíîìiÿ message100=Ñòèñêàëîñü message101=Ðåçóëüòàò ñòèñíåííÿ message102=Çàãàëîì message103=ðiçíèõ ôðàç message104=Âõiä message105=Êîä message106=Ñåðåäíié ðîçìið message107=Ïîñèëàííÿ ç ãðóï íîâèí message108=êÁ message109=ÌÁ message110=ÃÁ message111=Õàïóãà message112=Òàê message113=Íi message114=Iíôîðìàöiÿ ç áàçè WhoIs message115=OK message116=Âèõiä message117=Òðèâàëiñòü âiçèòiâ message118=Çà÷èíèòè âiêíî message119=áàéòiâ message120=Ïîøóê: Êëþ÷îâi ôðàçè message121=Ïîøóê: Êëþ÷îâi ñëîâà message122=ðiçíèõ ïîøóêîâèõ ìàøèí-ïîñèëà÷iâ message123=ðiçíèõ ñàéòiâ-ïîñèëà÷iâ message124=Iíøi ôðàçè message125=Iíøi iìåíà êîðèñòóâà÷iâ (i/àáî àíîíiìíi êîðèñòóâà÷i) message126=Ïîøóêîâi ìàøèíè-ïîñèëà÷iâ message127=Ñàéòè-ïîñèëà÷i message128=Ïiäñóìîê message129=Òî÷íå çíà÷åííÿ íåäîñòóïíå â ði÷íié ñòàòèñòèöi message130=Ìàñèâè çíà÷åíü äàíèõ message131=Åëåêòðîííà àäðåñà âiäïðàâíèêà message132=Åëåêòðîííà àäðåñà îòðèìóâà÷à message133=Çâiòíèé ïåðiîä message134=Äîäàòêîâî/Ìàðêåòèíã message135=Ðåæèìè åêðàíó message136=Àòàêè âiðóñiâ/÷åðâ'ÿêiâ message137=Äîäàííÿ äî 'Âèáðàíîãî' message138=Äíi ìiñÿöÿ message139=Ðiçíå message140=Áðîóçåðè ç ïiäòðèìêîþ Java message141=Áðîóçåðè ç ïiäòðèìêîþ Macromedia Director message142=Áðîóçåðè ç ïiäòðèìêîþ Flash message143=Áðîóçåðè ç ïiäòðèìêîþ ïðîãðàâàííÿ Real audio message144=Áðîóçåðè ç ïiäòðèìêîþ ïðîãðàâàííÿ Quicktime audio message145=Áðîóçåðè ç ïiäòðèìêîþ ïðîãðàâàííÿ Windows Media audio message146=Áðîóçåðè ç ïiäòðèìêîþ PDF message147=Êîäè ïîìèëîê SMTP message148=Êðà¿íè message149=Ëèñòè message150=Ðîçìið message151=Ïåðøèé message152=Îñòàííié message153=Ôiëüòð âèêëþ÷åííÿlang/awstats-cy.txt000064400000007326152532065620010343 0ustar00# Welsh message file (jim@hebffinia.com) # Cyfieithiad gan Maredudd ap Rheinallt # $Revision: 1.1 $ - $Date: 2004/06/28 02:49:28 $ message0=Anhysbys message1=Anhysbys (cyfeiriad IP heb ei ganfod) message2=Eraill message3=Gweld manylion message4=Dydd message5=Mis message6=Blwyddyn message7=Ystadegau o message8=Ymweliad cyntaf message9=Ymweliad diwethaf message10=Cyfanswm ymweliadau message11=Ymwelwyr unigryw message12=Ymweliad message13=allweddeiriau gwahanol message14=Chwilio message15=Y Cant message16=Traffig message17=Parthau/Gwledydd message18=Ymwelwyr message19=Tudalennau-URL message20=Oriau message21=Poryddion message22=Gwallau HTTP message23=Atgyfeirwyr message24=Byth wedi'i diweddaru message25=Parthau/Gwledydd Ymwelwyr message26=gwesteiwyr message27=tudalennau message28=Gwahanol dudalennau-URL message29=Tudalennau a welwyd message30=Geiriau eraill message31=Tudalennau heb eu canfod message32=Codau gwallau HTTP message33=Fersiynau Netscape message34=Fersiynau IE message35=Diweddariad diwethaf message36=Cyswllt i'r wefan o message37=Tardd message38=Cyfeiriad uniongyrchol / Nodau tudalen message39=Tardd anhysbys message40=Cysylltau o Beiriant Chwilio message41=Cysylltau o dudalen allanol (gwefannau eraill ac eithrio peiriannau chwilio) message42=Cysylltau o dudalen fewnol (tudalen arall ar yr un wefan) message43=Allweddfrawddegau a ddefnyddiwyd mewn periannau chilio message44=Allweddeiriau a ddefnyddiwyd mewn periannau chilio message45=Cyfeiriad IP heb ei ganfod message46=System Weithredu anhysbys (maes Atgyfeiriwr) message47=URLau a geisiwydwyd ond na chanfuwyd (côd HTTP 404) message48=Cyfeiriad IP message49=Gwall Trawiad message50=Poryddion anhysbys (maes Atgyfeiriwr) message51=Robotiaid ar ymweliad message52=Ymweliadau/ymwelydd message53=Ymwelwyr robot a phry cop message54=Yn Rhad ac am Ddim: Dadansoddydd Ffeiliau Log Amser Real ar gyfer Ystadegau Gwe Uwch message55=o message56=Tudalennau message57=Trawiadau message58=Fersiynau message59=Systemau Gweithredu message60=Ion message61=Chwef message62=Mawrth message63=Ebr message64=Mai message65=Meh message66=Gorff message67=Awst message68=Medi message69=Hydref message70=Tach message71=Rhagfyr message72=Gwe-lywio message73=Math o ffeil message74=Diweddaru yn awr message75=Beitiau message76=Yn ôl i'r brif dudalen message77=Pwysicach hyd at message78=dd mmm bbbb - AA:MM message79=Hidlydd message80=Rhestr Lawn message81=Gwesteiwyr message82=Hysbys message83=Robotiaid message84=Sul message85=Llun message86=Mawrth message87=Mercher message88=Iau message89=Gwe message90=Sad message91=Diwrnodau'r wythnos message92=Pwy message93=Pryd message94=Defnyddwyr Dilys message95=Lleiafswm message96=Cyfartaledd message97=Mwyafswm message98=Cywasgedd GWe message99=Lled band a arbedwyd message100=Cyn cywasgu message101=Wedi Cywasgu message102=Cyfanswm message103=allweddfrawddegau gwahanol message104=Tudalennau mynediad message105=Côd message106=Maint ar gyfartaledd message107=Cysylltau oddi wrth Grŵp Newyddion message108=KB message109=MB message110=GB message111=Grabwr message112=Yes message113=No message114=Gwybodaeth Dynodi message115=Iawn message116=Gadael message117=Parhau ag Ymweliadau message118=Cau ffenest message119=Beitiau message120=Allweddfrawddegau Chwilio message121=Allweddeiriau Chwilio message122=peiriannau chwilio gwahanol yn atgyfeirio message123=gwefannau gwahanol yn atgyfeirio message124=Brawddegau Eraill message125=Mewnbynnau eraill (ac/neu ddefnyddwyr di-enw) message126=Peiriannau Chwilio Atgyfeirio message127=Gwefannau Atgyfeirio message128=Crynodeb message129=Union werth ddim ar gael tra'n defnyddio modd gweld 'Blwyddyn' message130=Araeau gwerthoedd data message131=Ebost yr anfonydd message132=Ebost y derbynnydd message133=Cyfnod adroddlang/awstats-hr.txt000064400000012023152532065620010327 0ustar00# Croatian message file (coolbiza@yahoo.com) # $Revision: 1.1 $ - $Date: 2005/06/12 13:59:40 $ PageCode=iso-8859-2 message0=Nepoznat message1=nepoznatih (IP adresa nije razrije¹ena) message2=Ostalo message3=Vidi detalje message4=Dan message5=Mjesec message6=Godina message7=Statistika za message8=Prvi posjet message9=Zadnji posjet message10=Broj posjeta message11=Jedinstvenih posjetitelja message12=Posjet message13=Kljuèna rijeè message14=Potraga message15=Postotak message16=Promet message17=Domene/Zemlje message18=Posjetitelji message19=Stranice-URL message20=Sati (Serversko vrijeme) message21=Browseri (preglednici) message22=HTTP Gre¹ke message23=Refereri (linkovi) message24=Nikad nije osvje¾eno (Pogledaj 'Build/Update' na awstats_setup.html stranici) message25=Domene/zemlje posjetitelja message26=raèunala message27=stranica message28=razlièite stranice-url message29=Viðeno message30=Ostale rijeèi message31=Nepronaðene stranice message32=HTTP Kodovi gre¹ke message33=Verzije Netscape-a message34=Verzije IE-a message35=Posljednje osvje¾avanje message36=Link na sajt sa: message37=Odakle je korisnik do¹ao message38=Direktan pristup / Bookmarks message39=Nepoznato porijeklo message40=Posjeta sa Internet pretra¾ivaèa message41=Posjeta sa druge stranice (drugi web sajtovi osim pretra¾ivaèa) message42=Posjeta sa vlastite stranice (druga stranica unutar istog sajta) message43=Fraze kori¹tene na pretra¾ivaèima message44=Rijeèi kori¹tene na pretra¾ivaèima message45=Nerazrije¹ena IP Adresa message46=Nepoznat OS (useragent field) message47=Zahtjevan URL koji nije pronaðen (HTTP kod 404) message48=IP Adresa message49=Gre¹ke Pogodci message50=Nepoznat preglednik (useragent field) message51=Roboti posjetitelji message52=posjeta/posjetitelju message53=Posjetitelji roboti/spideri message54=Besplatan analizator logova za napredne web statistike message55=od message56=Stranica message57=Pogodaka message58=Verzije message59=Operativni susutav message60=Sij message61=Velj message62=O¾u message63=Tra message64=Svi message65=Lip message66=Srp message67=Kol message68=Ruj message69=Lis message70=Stu message71=Pro message72=Navigacija message73=Tip datoteka message74=Osvje¾i sada! message75=Bajta message76=Nazad na glavnu stranicu message77=Prvih message78=dd mmm yyyy - HH:MM message79=Filter message80=Puna lista message81=Raèunala message82=Poznatih message83=Roboti message84=Ned message85=Pon message86=Uto message87=Sri message88=Èet message89=Pet message90=Sub message91=Dani tjedna message92=Tko message93=Kada message94=Prijavljenih korisnika message95=Min message96=Prosjeèno message97=Max message98=Web sa¾imanje message99=Saèuvani promet message100=Before compression message101=After compression message102=Ukupno message103=razlièitih kluènih fraza message104=Ulaz message105=Kod message106=Prosjeèna velièina message107=Dolazaka sa NewsGroupa message108=KB message109=MB message110=GB message111=Grabber message112=Da message113=Ne message114=Info. message115=OK message116=Izlaz message117=Trajanje posjeta message118=Zatvori prozor message119=Bajta message120=Tra¾ene Fraze message121=Tra¾ene Rijeèi message122=razlièitih tra¾ilica message123=razlièitih sajtova message124=Ostale fraze message125=Ostali posjeti (i/il anonimni korisnici) message126=Sa kojih tra¾ilica message127=Sa kojih stranica message128=Sa¾etak message129=Toèan broj nije dostupan u godi¹njen pregledu message130=Data value arrays message131=EMail po¹iljaoca message132=EMail primatelja message133=Period izvje¹taja message134=Extra/Marketing message135=Velièine ekrana message136=Worm/Virus napadi message137=Stavljeno u favorite (procjenjeno) message138=Dani u mjesecu message139=Razno message140=Preglednici sa podr¹kom za javu message141=Preglednici sa podr¹kom za Macromedia Directora message142=Preglednici sa podr¹kom za Flash message143=Preglednici sa podr¹kom za sviranje Real audia message144=Preglednici sa podr¹kom za sviranje Quicktime audia message145=Preglednici sa podr¹kom za sviranje Windows Media audia message146=Preglednici sa podr¹kom za PDF message147=SMTP kodovi gre¹ka message148=Dr¾ave message149=Mails message150=Velièina message151=Prvi message152=Posljednji message153=Exclude filter message154=Ovdje prikazani podaci svrstani su pod "neviðeno" od ¾ivih korisnika, tako da nisu ukljuèeni u ostale rezultate. message155=Cluster message156=Promet ovdje prikazanih robota svrstan je pod "neviðeno" od ¾ivih korisnika, tako da ti podaci nisu ukljuèeni u ostale rezultate. message157=Broj nakon + je broj uspje¹nih pogodaka na "robots.txt" datoteku. message158=Promet ovdje prikazanih crva svrstan je pod "neviðeno" od ¾ivih korisnika, tako da ti podaci nisu ukljuèeni u ostale rezultate. message159=Neviðen promet ukljuèuje promet stvoren robotima, crvima, ili kao odgovor specijalnim HTTP status kodovima. message160=Viðen promet message161=Neviðen promet message162=Mjeseèni promet message163=Crv message164=Razlièitih crva message165=Uspje¹no poslanih mailova message166=Mails failed/refused message167=Sensitive targets message168=Onemoguèen Javascript message169=Napravio message170=plugins lang/awstats-bg.txt000064400000010437152532065620010315 0ustar00# Bulgarian message file translated by Aryan(aryan@bgns.net) # $Revision: 1.3 $ - $Date: 2003/11/21 01:07:33 $ PageCode=windows-1251 message0=Íåïîçíàòè message1=Íåïîçíàòè (íåïðåîáðàçóâàíè ip-àäðåñè) message2=Äðóãè message3=Äåòàéëè message4=Äåí message5=Ìåñåö message6=Ãîäèíà message7=Ñòàòèñòèêè çà message8=Ïúðâîíà÷àëíî ïîñåùåíèå message9=Ïîñë. ïîñåùåíèå message10=Áðîé ïîñåùåíèÿ message11=Óíèêàëíè ïîñåòèòåëè message12=Ïîñåùåíèe message13=ðàçëè÷íè êëþ÷îâè äóìè message14=Òúðñåíå message15=Ïðîöåíò message16=Òðàôèê message17=Äîìåéíè/Äúðæàâè message18=Ïîñåòèòåëè message19=Ñòðàíèöè-URL message20=Ïî ÷àñîâå message21=Áðàóçúðè message22=HTTP Ãðåøêè message23=Ïðåïðàòêè message24=Íèêîãà íå å îáíîâÿâàíî message25=Ïîñåòèòåëè ïî äîìåéíè/äúðæàâè message26=õîñòîâå message27=ñòðàíèöè message28=ðàçëè÷íè ñòðàíèöè-url message29=Ðàçãëåæäàíè message30=Äðóãè êëþ÷îâè äóìè message31=Íåîòêðèòè ñòðàíèöè message32=HTTP êîäîâå çà ãðåøêà message33=Netscape âåðñèè message34=IE âåðñèè message35=Ïîñëåäíî îáíîâÿâàíå message36=Âðúçêà êúì ñàéòà îò message37=Ïðîèçõîä message38=Äèðåêòíè àäðåñè / Bookmarks message39=Íåèçâåñòåí ïðîèçõîä message40=Âðúçêè îò Èíòåðíåò Òúðñà÷êè message41=Âðúçêè îò âúíøíè ñòðàíèöè (äðóãè ñàéòîâå îñâåí òúðñà÷êè) message42=Âðúçêè îò âúòðåøíè ñòðàíèöè (äðóãè ñòðàíèöè îò ñàéòà) message43=Êëþ÷îâè ôðàçè èçïîëçâàíè â òúðñà÷êèòå message44=Êëþ÷îâè äóìè èçïîëçâàíè â òúðñà÷êèòå message45=Íåïðåîáðàçóâàíè IP àäðåñè message46=Íåïîçíàòà ÎÑ (ïîëå "useragent") message47=Ïîñî÷åíè, íî íåîòêðèòè URL-è (HTTP êîä 404) message48=IP Àäðåñ message49=Ãðåøíè Õèòîâå message50=Íåïîçíàòè áðàóçúðè (ïîëå "useragent") message51=ðàçëè÷íè ðîáîòè message52=ïîñåùåíèÿ/ïîñåòèòåë message53=Ïðåòúðñâàùè ðîáîòè message54=Áåçïëàòåí ëîãôàéë-àíàëèçàòîð çà ðàçøèðåíè óåá ñòàòèñòèêè â ðåàëíî âðåìå message55=îò message56=Ñòðàíèöè message57=Õèòà message58=Âåðñèè message59=Îïåðàöèîííè Ñèñòåìè (ÎÑ) message60=ßíó message61=Ôåâ message62=Ìàð message63=Àïð message64=Ìàé message65=Þíè message66=Þëè message67=Àâã message68=Ñåï message69=Îêò message70=Íîå message71=Äåê message72=Íàâèãàöèÿ message73=Ôàéëîâ òèï message74=Îáíîâè ñåãà message75=Èçïîëçâàí òðàôèê message76=Îáðàòíî â ãëàâíàòà message77=Òîï message78=dd mmm yyyy - HH:MM message79=Ôèëòúð message80=Ïúëåí ñïèñúê message81=Õîñòîâå message82=Èçâåñòíè message83=Ðîáîòè message84=Íåä message85=Ïîí message86=Âòî message87=Ñðÿ message88=×åò message89=Ïåò message90=Ñúá message91=Ïî äåí îò ñåäìèöàòà message92=Êîé message93=Êîãà message94=Îòîðèçèðàíè ïîòðåáèòåëè message95=Ìèí. message96=Ñðåäíî message97=Ìàêñ. message98=Óåá êîìïðåñèÿ message99=Ñïåñòåí òðàôèê message100=Êîìïðåñèÿ íà message101=Ðåçóëòàò îò êîìïðåñèÿòà message102=Îáùî message103=ðàçëè÷íè êëþ÷îâè ôðàçè message104=Âõîäÿùè message105=Êîä message106=Ïðèáëèçèòåëåí ðàçìåð message107=Âðúçêè îò Íîâèíàðñêè ãðóïè message108=KB message109=MB message110=GB message111=Ñàéò ðèïúð(Grabber) message112=Äà message113=Íå message114=WhoIs èíôî message115=OK message116=Èçõîäÿùè message117=Ïðîäúëæ. íà ïîñåùåíèåòî message118=Çàòâîðè ïðîçîðåöà message119=Áàéòà (Bytes) message120=Òúðñåíè êëþ÷îâè ôðàçè message121=Òúðñåíè êëþ÷îâè äóìè message122=ðàçëè÷íè íàñî÷âàùè òúðñà÷êè message123=ðàçëè÷íè íàñî÷âàùè ñàéòîâå message124=Äðóãè ôðàçè message125=Äðóãè âêëþ÷âàíèÿ (è/èëè àíîíèìíè ïîòðåáèòåëè) message126=Íàñî÷âàùè òúðñà÷êè message127=Íàñî÷âàùè ñàéòîâå message128=Ñóìàðíî message129=Íå å âúçìîæíà òî÷íà ñòîéíîñò íà 'Ãîäèøåí' ïðåãëåä message130=Ìàñèâè îò äàííè message131=EMail íà Èçïðàùà÷à message132=EMail íà Ïîëó÷àòåëÿ message133=Äîêëàäâàí ïåðèîä message134=Äîïúëíèòåëíî/Òúðãîâñêè message135=Ðàçìåðè íà äèñïëåÿ message136=Worm/Âèðóñ àòàêè message137=Äîáàâÿíå êúì ëþáèìè (ïðèáëèçèòåëíî) message138=Ïî äíè îò ìåñåöà message139=Ðàçíè message140=Áðàóçúðè ñ ïîääðúæêà íà Java message141=Áðàóçúðè ñ ïîääðúæêà íà Macromedia Director message142=Áðàóçúðè ñ ïîääðúæêà íà Flash message143=Áðàóçúðè ñ ïîääðúæêà íà Real audio playing message144=Áðàóçúðè ñ ïîääðúæêà íà Quicktime audio playing message145=Áðàóçúðè ñ ïîääðúæêà íà Windows Media audio playing message146=Áðàóçúðè ñ ïîääðúæêà íà PDF message147=SMTP êîäîâå çà ãðåøêè message148=Äúðæàâè message149=Ïîùè message150=Ðàçìåð message151=Ïúðâè message152=Ïîñëåäåí message153=Èçêëþ÷âàù ôèëòúð message154=Êîäîâåòå ïîêàçàíè òóê ïîêàçâàò õèòîâå èëè òðàôèê, "íåçàáåëåæèì" çà ïîñåòèòåëèòå, è ïîðàäè òîâà ñà îòäåëåíè â òàçè òàáëèöà. message155=Êëúñòúðlang/awstats-nl.txt000064400000011572152532065620010337 0ustar00# Dutch message file (door Amedee Van Gasse - amedee.be) # Addon by Marcel Huijkman - marcel.huijkman@raketnet.nl # $Revision: 1.16 $ - $Date: 2005/01/03 20:22:17 $ message0=Onbekend message1=Onbekend (Onbekend ip) message2=Andere message3=Bekijk details message4=Dag message5=Maand message6=Jaar message7=Statistieken van message8=Eerste bezoek message9=Laatste bezoek message10=Aantal bezoeken message11=Unieke bezoekers message12=Bezoek message13=Trefwoorden message14=Zoek message15=Procent message16=Verkeer message17=Domeinen/Landen message18=Bezoekers message19=Pagina´s/URL message20=Uren message21=Browsers message22=HTTP Foutmeldingen message23=Verwijzing message24=Zoek trefwoorden message25=Bezoekers domeinen/landen message26=hosts message27=pagina´s message28=verschillende pagina´s message29=Toegang message30=Andere woorden message31=Niet gevonden pagina´s message32=HTTP foutmelding codes message33=Netscape versies message34=MS Internet Explorer versies message35=Laatste Update message36=Verbinding naar site vanaf message37=Herkomst message38=Direkt adres / Bookmarks message39=Herkomst onbekend message40=Link vanuit een Internet Zoek Machine message41=Link vanuit een externe pagina (andere web sites behalve zoek machines) message42=Link vanuit een interne pagina (andere pagina van dezelfde site) message43=gebruikte trefwoorden bij zoek machines message44=XXXX44 message45=niet vertaald IP Adres message46=Onbekend OS (Referer veld) message47=Verplicht maar niet gevonden URLs (HTTP code 404) message48=IP Adres message49=Fout Hits message50=Onbekende browsers (Referer veld) message51=Bezoekende robots message52=bezoeken/bezoeker message53=Robots/Spiders bezoekers message54=Gratis realtime logbestand analyzer voor geavanceerde web statistieken message55=van message56=Pagina´s message57=Hits message58=Versies message59=OS message60=Jan message61=Feb message62=Mrt message63=Apr message64=Mei message65=Jun message66=Jul message67=Aug message68=Sep message69=Okt message70=Nov message71=Dec message72=Navigatie message73=Bestandstypen message74=Nu verversen message75=Bytes message76=Terug naar hoofdpagina message77=Top message78=dd mmm yyyy - HH:MM message79=Filter message80=Volledige lijst message81=Hosts message82=Bekend message83=Robots message84=Zon message85=Maa message86=Din message87=Woe message88=Don message89=Vrij message90=Zat message91=Weekdagen message92=Wie message93=Wanneer message94=Ingelogde bezoekers message95=Min message96=Gemiddeld message97=Max message98=Web compressie message99=Bespaarde bandbreedte message100=Voor compressie message101=Na compressie message102=Totaal message103=verschillende trefzinnen message104=Binnenkomst pagina´s message105=Code message106=Gemiddelde grootte message107=Links vanuit een Nieuwsgroep message108=KB message109=MB message110=GB message111=Grabber message112=Ja message113=Nee message114=WhoIs info message115=OK message116=Uitgang message117=Duur bezoeken message118=Sluit venster message119=Bytes message120=Zoek Trefzinnen message121=Zoek Trefwoorden message122=verschillende verwijzende zoekmachines message123=verschillende verwijzende sites message124=Andere zinnen message125=Andere logins (en/of anonieme gebruikers) message126=Verwijzende zoekmachines message127=Verwijzende sites message128=Samenvatting message129=Exacte waarde niet beschikbaar in "Jaar"-overzicht message130=Data value arrays message131=Afzender EMail message132=Ontvanger EMail message133=Gerapporteerde periode message134=Extra/Marketing message135=Screen sizes message136=Worm/Virus attacks message137=Add to favorites (estimated) message138=Dagen van maand message139=Overigen message140=Browsers met Java ondersteuning message141=Browsers met Macromedia Director ondersteuning message142=Browsers met Flash ondersteuning message143=Browsers met Real audio playing ondersteuning message144=Browsers met Quicktime audio playing ondersteuning message145=Browsers met Windows Media audio playing ondersteuning message146=Browsers met PDF ondersteuning message147=SMTP Error codes message148=Landen message149=Mails message150=Grootte message151=Eerste message152=Laatste message153=Uitsluiten filter message154=Deze codes geven "niet bekeken" door bezoekers, daarom worden ze niet in andere tabellen getoond message155=Cluster message156=Robots geven "niet bekeken" door bezoekers, daarom worden ze niet in andere tabellen getoond message157=Getallen achter + zijn geslaagde hits op "robots.txt" bestanden. message158=Worms geven "niet bekeken" door bezoekers, daarom worden ze niet in andere tabellen getoond message159=Niet bekeken verkeer is verkeer dat gegenereerd werd door robots, worms of antwoorden met een speciale HTTP status code. message160=Bekeken verkeer message161=Niet bekeken verkeer message162=Maandelijkse historie message163=Wormen message164=verschillende wormen message165=Successvolle mails message166=Geweigerde of slechte mails lang/awstats-be.txt000064400000016620152532065620010313 0ustar00# Belarusian message file (piatruk.p@gmail.com) # $Revision: 1.1 $ - $Date: 2008/06/04 17:29:21 $ PageCode=utf-8 message0=Ð�евÑ�домы message1=Ð�евÑ�домы (невызначаны ip) message2=ІншыÑ� message3=ПраглÑ�дзець падрабÑ�знаÑ�ці message4=Дзень message5=МеÑ�Ñ�ц message6=Год message7=СтатыÑ�тыка длÑ� message8=Першае наведванне message9=Ð�пошнÑ�е наведванне message10=КолькаÑ�ць наведваннÑ�Ñž message11=УнікальныÑ� наведвальнікі message12=Ð�аведванне message13=разнаÑ�тайныÑ� ключавыÑ� Ñ�ловы message14=Пошук message15=ПрацÑ�нт message16=Трафік message17=Дамены/Краіны message18=Ð�аведвальнікі message19=Pages-URL message20=Гадзіны message21=Браузеры message22=Памылкі HTTP message23=РÑ�ферÑ�ры message24=Ð�е абнаўлÑ�лаÑ�Ñ� (ГлÑ�дзі 'Збудаваць/Ð�бнавіць' на Ñ�таронцы awstats_setup.html) message25=Дамены/краіны наведвальнікаў message26=машыны message27=Ñ�таронкі message28=разнаÑ�тайныÑ� Ñ�таронкі-url message29=Прагледжана message30=ІншыÑ� Ñ�ловы message31=Старонкі не знойдзены message32=Коды Ñ�татуÑ�у HTTP message33=ВерÑ�Ñ–Ñ– Netscape message34=ВерÑ�Ñ–Ñ– IE message35=Ð�пошнÑ�е абнаўленне message36=ЗлучÑ�нне з Ñ�айтам з message37=Паходжанне message38=Прамы доÑ�туп / Закладкі / СпаÑ�ылка па пошце message39=Ð�евÑ�домае паходжанне message40=СпаÑ�ылка з Пошукавых Ñ�Ñ–Ñ�Ñ‚Ñ�м message41=СпаÑ�ылка Ñ�а знешнÑ�й Ñ�таронкі (з іншага Ñ�айта, не пошукавай Ñ�Ñ–Ñ�Ñ‚Ñ�мы) message42=СпаÑ�ылка з унутранай Ñ�таронкі (іншай Ñ�таронкі на тым жа Ñ�айце) message43=КлючавыÑ� фразы з пошукавай Ñ�Ñ–Ñ�Ñ‚Ñ�мы message44=КлючавыÑ� Ñ�ловы з пошукавай Ñ�Ñ–Ñ�Ñ‚Ñ�мы message45=Ð�Ñ�вызначаны IP-адраÑ� message46=Ð�евÑ�домаÑ� OS (поле useragent) message47=ЗапатрабаваныÑ�, але не знойдзеныÑ� адраÑ�Ñ‹ (код HTTP 404) message48=IP-адраÑ�Ñ‹ message49=Памылка Ð¥Ñ–ты message50=Ð�евÑ�домыÑ� браузеры (поле useragent) message51=разнаÑ�тайныÑ� робаты message52=наведванні/наведвальнік message53=Робаты/Павукі-наведвальнікі message54=Вольны аналізатар логаў длÑ� пашыранай веб-Ñ�татыÑ�тыкі message55= message56=Старонак message57=Хітоў message58=ВерÑ�ій message59=Ð�перацыйных Ñ�Ñ–Ñ�Ñ‚Ñ�м message60=Сту message61=Лют message62=Сак message63=Кра message64=Тра message65=ЧÑ�Ñ€ message66=Ліп message67=Жні message68=Вер message69=КаÑ� message70=ЛіÑ� message71=Сне message72=Ð�авігацыÑ� message73=Тып файла message74=Ð�бнавіць зараз message75=Трафік message76=Ð’Ñ�рнуцца на галоўную message77=Ð�айбольшыÑ� message78=dd mmm yyyy - HH:MM message79=Фільтр message80=Поўны Ñ�піÑ� message81=Машыны message82=Ð’Ñ�домыÑ� message83=Робаты message84=Ð�Ñ�д message85=Пан message86=Ð�ўт message87=Сер message88=Чац message89=ПÑ�Ñ‚ message90=Суб message91=Дні тыднÑ� message92=Хто message93=Калі message94=Ð�ўтÑ�нтыфікаваныÑ� message95=Мін. message96=СÑ�Ñ€Ñ�дне message97=МакÑ�. message98=СціÑ�к Web message99=Ð�шчаджана трафіку message100=СціÑ�к у message101=Вынік Ñ�ціÑ�ку message102=Ð�гулам message103=разнайÑ�тайныÑ� ключавыÑ� фразы message104=Уваход message105=Код message106=СÑ�Ñ€Ñ�дні памер message107=СпаÑ�ылкі з груп навін message108=KB message109=MB message110=GB message111=Grabber message112=Так message113=Ð�е message114=Whois message115=Добра message116=Выхад message117=ПрацÑ�глаÑ�ць наведваннÑ�Ñž message118=Закрыць акно message119=Байтаў message120=Пошук Ð¤Ñ€Ð°Ð·Ñ‹ message121=Пошук Ð¡Ð»Ð¾Ð²Ñ‹ message122=разнаÑ�тайныÑ� пошукавыÑ� Ñ�Ñ–Ñ�Ñ‚Ñ�мы, што Ñ�паÑ�ылаюцца message123=разнаÑ�тайныÑ� Ñ�айты, што Ñ�паÑ�ылаюцца message124=ІншыÑ� фразы message125=ІншыÑ� логіны (Ñ–/ці ананімныÑ� карыÑ�альнікі) message126=ПошукавыÑ� машыны, што Ñ�паÑ�ылаюцца message127=Сайты, што Ñ�паÑ�ылаюцца message128=Ð�гульна message129=Такое значÑ�нне недаÑ�тупна Ñž выглÑ�дзе 'Год' message130=МаÑ�івы значÑ�ннÑ�Ñž дадзеных message131=EMail адпраўніка message132=EMail атрымальніка message133=Справазадача за message134=Дадаткова/Маркетынг message135=Памеры Ñ�крану message136=Ð�такі чарвей/віруÑ�аў message137=Дадаць у ВыбраныÑ� (магчыма) message138=Дні меÑ�Ñ�ца message139=Рознае message140=Браузеры з падтрымкай Java message141=Браузеры з падтрымкай Macromedia Director message142=Браузеры з падтрымкай Flash message143=Браузеры з падтрымкай прайграваннÑ� Real audio message144=Браузеры з падтрымкай прайграваннÑ� Quicktime audio message145=Браузеры з падтрымкай прайграваннÑ� Windows Media audio message146=Браузеры з падтрымкай PDF message147=Коды памылак SMTP message148=Краіны message149=ЛіÑ�ты message150=Памер message151=Першы message152=Ð�пошні message153=Фільтр выключÑ�ннÑ� message154=Коды, паказаныÑ� тут, даюць трафік або хіты, нÑ�бачныÑ� наведвальнікам, таму Ñ�ны не ўключаны Ñž іншыÑ� табліцы. message155=КлаÑ�цер message156=Робаты, паказаныÑ� тут, даюць трафік або хіты, нÑ�бачныÑ� наведвальнікам, таму Ñ�ны не ўключаны Ñž іншыÑ� табліцы. message157=Лічбы паÑ�лÑ� + паÑ�пÑ�ховыÑ� хіты на файлы "robots.txt". message158=ЧÑ�рві, паказаныÑ� тут, даюць трафік або хіты, нÑ�бачныÑ� наведвальнікам, таму Ñ�ны не ўключаны Ñž іншыÑ� табліцы. message159=Ð�Ñ�бачны трафік уключае трафік, згенераваны робатамі, чарвÑ�мі або адказамі Ñ�а Ñ�пецыльным кодам HTTP. message160=Бачны трафік message161=Ð�Ñ�бачны трафік message162=МеÑ�Ñ�цоваÑ� гіÑ�торыÑ� message163=ЧÑ�рві message164=разнаÑ�тайныÑ� чÑ�рві message165=ПаÑ�пÑ�хова даÑ�ланыÑ� ліÑ�ты message166=Ð�едаÑ�ланыÑ� ліÑ�ты message167=Ð�дчувальнаÑ�ць мÑ�таў message168=Javascript адключана message169=Створана message170=плагіны message171=РÑ�гіёны message172=Гарады lang/awstats-jp.txt000064400000012420152532065620010330 0ustar00# Japanese message file (info@kchosting.jp) # $Revision: 1.9 $ - $Date: 2004/06/07 19:04:36 $ PageCode=UTF-8 message0=ä¸�明 message1=ä¸�明(ipã�Œè§£ã‚Šã�¾ã�›ã‚“) message2=ã��ã�®ä»– message3=詳細を見る message4=æ—¥ message5=月 message6=å¹´ message7=統計 message8=最åˆ�ã�®è¨ªå•� message9=最後ã�®è¨ªå•� message10=訪å•�æ•° message11=訪å•�者 message12=訪å•� message13=キーワード message14=検索 message15=パーセント message16=容é‡� message17=ドメイン/国å�� message18=訪å•�者 message19=URLページ message20=時間 message21=ブラウザ message22=HTTPエラー message23=å�‚ç…§ message24=æ›´æ–°ã�ªã�— message25=訪å•�者・ドメイン/国å�� message26=ホスト message27=ページ message28=ページ message29=アクセス message30=ä»–ã�®è¨€è‘‰ message31=ページã�Œè¦‹ã�¤ã�‹ã‚Šã�¾ã�›ã‚“ message32=HTTPエラーコード message33=Netscapeãƒ�ージョン message34=IEãƒ�ージョン message35=最終ã�®æ›´æ–° message36=ã�“ã�®ã‚µã‚¤ãƒˆã�¸ã�®ã‚¢ã‚¯ã‚»ã‚¹å…ƒ message37=アクセス元 message38=直接URLを入力/ã�Šæ°—ã�«å…¥ã‚Šã�‹ã‚‰ã�®ã‚¢ã‚¯ã‚»ã‚¹ message39=起点ã�Œä¸�明 message40=インターãƒ�ット検索エンジンã�‹ã‚‰ã�®ãƒªãƒ³ã‚¯ message41=外部ページã�‹ã‚‰ã�®ãƒªãƒ³ã‚¯(検索エンジンを除ã��ä»–ã�®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸) message42=内部ページã�‹ã‚‰ã�®ãƒªãƒ³ã‚¯(å�Œã�˜ã‚µã‚¤ãƒˆã�®ä»–ã�®ãƒšãƒ¼ã‚¸) message43=検索エンジンã�®æ–‡å­—列(キーフレーズ) message44=検索エンジンã�®æ–‡å­—列(キーワード) message45=ä¸�明ã�ªIPアドレス message46=ä¸�明ã�ªOS(å�‚照フィールド) message47=è¦�求ã�•れã�ŸURLã�¯è¦‹ã�¤ã�‹ã‚Šã�¾ã�›ã‚“(HTTPコード404) message48=未解決ã�®IPアドレス message49=エラー ä»¶æ•° message50=ä¸�明ブラウザ(å�‚照フィールド) message51=ロボットã�®è¨ªå•� message52=訪å•�/訪å•�者 message53=ロボット/スパイダーã�®è¨ªå•�者 message54=上級web統計ã�®ãƒ•リーリアルタイムログファイル分æž� message55=ã�® message56=ページ message57=ä»¶æ•° message58=ãƒ�ージョン message59=オペレーティングシステム message60=1月 message61=2月 message62=3月 message63=4月 message64=5月 message65=6月 message66=7月 message67=8月 message68=9月 message69=10月 message70=11月 message71=12月 message72=ナビゲーション message73=ファイルã�®ç¨®é¡ž message74=æ›´æ–°ã�™ã‚‹ message75=ãƒ�イト message76=メインページã�«æˆ»ã‚‹ message77=トップ message78= yyyyå¹´ mmm ddæ—¥ - HH:MM message79=フィルター message80=全リスト message81=ホスト message82=既知 message83=ロボット message84=日曜日 message85=月曜日 message86=ç�«æ›œæ—¥ message87=水曜日 message88=木曜日 message89=金曜日 message90=土曜日 message91=曜日 message92=ã� ã‚Œ message93=ã�„ã�¤ message94=èª�証ã�•れã�Ÿãƒ¦ãƒ¼ã‚¶ãƒ¼ message95=最å°� message96=å¹³å�‡ message97=最大 message98=Web圧縮 message99=帯域幅ã�®ä¿�å­˜ message100=圧縮å‰� message101=圧縮後 message102=å�ˆè¨ˆ message103=キーフレーズ message104=入りå�£ message105=コード message106=å¹³å�‡ã‚µã‚¤ã‚º message107=ニュースグループã�‹ã‚‰ã�®ãƒªãƒ³ã‚¯ message108=Kb message109=Mb message110=Gb message111=Grabber message112=Yes message113=No message114=WhoIs情報 message115=OK message116=出å�£ message117=訪å•�ã�®é•·ã�• message118=ウィンドーを閉ã�˜ã‚‹ message119=ãƒ�イト message120=検索文字列(キーフレーズ) message121=検索文字列(キーワード) message122=検索エンジン message123=ホームページ message124=ä»–ã�®ãƒ•レーズ message125=ä»–ã�®ãƒ­ã‚°ã‚¤ãƒ³ message126=検索エンジン message127=ホームページ message128=サマリー message129=「年ã€�ビューã�§ã�¯ç²¾å¯†ã�ªæ•°å­—ã�¯ã�‚りã�¾ã�›ã‚“ message130=データé…�列関数 message131=é€�信者ã�®EMail message132=å�—信者ã�®EMail message133=表示ã�™ã‚‹ãƒ¬ãƒ�ート message134=エキストラ/マーケティング message135=ç”»é�¢è§£åƒ�度 message136=ワーム/ウィルス攻撃 message137=ã�Šæ°—ã�«å…¥ã‚Šã�«è¿½åŠ  message138=日付 message139=ã��ã�®ä»– message140=Java 対応ブラウザー message141=Macromedia Director 対応ブラウザー message142=Flash 対応ブラウザー message143=Real Audio 対応ブラウザー message144=Quicktime Audio 対応ブラウザー message145=Windows Media 対応ブラウザー message146=PDF 対応ブラウザー message147=SMTP エラーコード message148=国 message149=メール message150=サイズ message151=最åˆ� message152=最後 message153=除外フィルター message154=ã�“ã�®ãƒ�ャートã�®ã‚³ãƒ¼ãƒ‰ã�¯è¨ªå•�者ã�«ã‚ˆã‚‹ã‚¢ã‚¯ã‚»ã‚¹ã�§ã�¯ã�‚りã�¾ã�›ã‚“ã�®ã�§ä»–ã�®ãƒ�ャートã�«å�«ã�¾ã‚Œã�¦ã�„ã�¾ã�›ã‚“。 message155=クラスター message156=ロボットã�«ã‚ˆã‚‹ã‚¢ã‚¯ã‚»ã‚¹ã�¯è¨ªå•�者ã�®é–²è¦§ã�¨ã�¯é�•ã�„ã�¾ã�™ã�®ã�§ä»–ã�®ãƒ�ャートã�«å�«ã�¾ã‚Œã�¦ã�„ã�¾ã�›ã‚“。 message157=+ã�®å¾Œã�®æ•°å­—ã�¯ã€Œrobots.txtã€�ã�®è¡¨ç¤ºã�Œæˆ�功ã�—ã�Ÿå›žæ•°ã�§ã�™ã€‚ message158=ワームã�«ã‚ˆã‚‹ã‚¢ã‚¯ã‚»ã‚¹ã�¯è¨ªå•�者ã�®é–²è¦§ã�¨ã�¯é�•ã�„ã�¾ã�™ã�®ã�§ä»–ã�®ãƒ�ャートã�«å�«ã�¾ã‚Œã�¦ã�„ã�¾ã�›ã‚“。 message159=閲覧ã�«å�«ã�¾ã‚Œã�ªã�„アクセスã�¯ãƒ­ãƒœãƒƒãƒˆã€�ワームã�ªã�©ã�«ã‚ˆã‚‹ã‚‚ã�®ã�§ã�™ã€‚ message160=閲覧アクセス message161=閲覧ã�«å�«ã�¾ã‚Œã�ªã�„アクセス message162=月 message163=ワーム message164=ã��ã�®ä»–ã�®ãƒ¯ãƒ¼ãƒ  message165=Mails successfully sent message166=Mails failed/refused message167=Sensitive targetslang/awstats-cz.txt000064400000011420152532065620010332 0ustar00# Czech message file (js@cvut.cz) # win->iso conversion and czech corrections (one@one.cz) # $Revision: 1.12 $ - $Date: 2004/07/11 12:03:49 $ PageCode=iso-8859-2 message0=Neznámý message1=Neznámý (nepøelo¾ená IP) message2=Ostatní message3=Prohlédnout detaily message4=Den message5=Mìsíc message6=Rok message7=Statistika pro message8=První náv¹tìva message9=Poslední náv¹tìva message10=Poèet náv¹tìv message11=Unikátní náv¹tìvy message12=Náv¹tìva message13=výrazu message14=Hledání message15=Procenta message16=Traffic message17=Domény/zemì message18=Náv¹tìvy message19=Stránky/URL message20=Hodiny message21=Browsery (prohlí¾eèe) message22= message23=Reference message24=Nebylo aktualizováno (Viz 'Build/Update' v awstats_setup.html) message25=Náv¹tìvy domény/zemì message26=hostù message27=stránek message28=rùzných stránek-url message29=Zobrazeno message30=Jiná slova message31=Nenalezené stránky message32=Chybové kódy HTTP message33=Verze Netscape message34=Verze MS Internet Explorer message35=Poslední aktualizace message36=Pøístup z message37=Pùvod message38=Pøímá adresa / Oblíbené (Bookmark) message39=Neznámý pùvod message40=Odkaz z Internetového vyhledávaèe message41=Odkaz z jiné stránky (jiné stránky ne¾ vyhledávaèe) message42=Odkaz z vlastní stránky (jiná stránka na serveru) message43=Slovní spojení pou¾ité ve vyhledávaèi message44=Výrazy pou¾ité ve vyhledávaèi message45=Nepøelo¾ená IP adresa message46=Neznámý OS (polo¾ka prohlí¾eèe) message47=Po¾adované, ale nenalezené URL (HTTP 404) message48=IP Addresa message49=Chyba Dotazu message50=neznámý browser (prohlí¾eè) (polo¾ka Referer) message51=pøístupù robotù message52=náv¹tìv/náv¹tìvníka message53=Roboti message54=Volnì ¹iritelný nástroj pro analýzu web statistik message55=z message56=Stránek message57=Hity message58=Verze message59=OS message60=Led message61=Úno message62=Bøe message63=Dub message64=Kvì message65=Èer message66=Èvc message67=Srp message68=Záø message69=Øíj message70=Lis message71=Pro message72=Navigace message73=Typ souboru message74=Aktualizovat nyní message75=Bajtù message76=Zpìt na hlavní stránku message77=Top message78=dd mmm yyyy - HH:MM message79=Filtr message80=Úplný seznam message81=Hosté message82=Známý message83=Robotù message84=Ne message85=Po message86=Út message87=St message88=Èt message89=Pá message90=So message91=Dny v týdnu message92=Kdo message93=Kdy message94=Pøihlá¹ení u¾ivatelé message95=Min message96=Prùmìr message97=Max message98=Web komprese message99=u¹etøené pásmo (bandwith) message100=Pøed kompresí message101=Po kompresi message102=Celkem message103=rùzných slovních spojení message104=Vstupní stránky message105=Kód message106=Prùmìrné velikost message107=Odkaz z diskuzních skupin (News) message108=KB message109=MB message110=GB message111=Grabber message112=Ano message113=Ne message114=WhoIs info message115=OK message116=Výstupní stránky message117=Trvání náv¹tìv message118=Zavøi okno message119=Bytù message120=Hledaná slovní spojení message121=Hledané výrazy message122=rùzných odkazù z internetových vyhledávaèù message123=rùzných odkazujících stránek message124=Ostatní fráze message125=Ostatní loginy (a/o anonymní u¾ivatelé) message126=Odkazující vyhledávaèe message127=Odkazující stránky message128=Souhrn message129=Pøesná hodnota není v 'Roèním' zobrazení dostupná # tohle jeste nevim jak prelozit message130=Hodnoty datových matic message131=Adresa odesílatele message132=Adresa pøíjemce message133=Zobrazený èasový úsek message134=Extra/Marketing message135=Rozli¹ení obrazovky message136=Útoky èervù/virù message137=Oblíbené (odhad) message138=Dny v mìsíci message139=Rùzné message140=Prohlí¾eèe s podporou Javy message141=Prohlí¾eèe s podporou Macromedia Director message142=Prohlí¾eèe s podporou Flash message143=Prohlí¾eèe s podporou pøehrávání Real audio message144=Prohlí¾eèe s podporou pøehrávání Quicktime audio message145=Prohlí¾eèe s podporou pøehrávání Windows Media audio message146=Prohlí¾eèe s podporou PDF message147=Kódy chyb SMTP message148=Zemì message149=Zprávy message150=Velikost message151=Køestní message152=Pøíjmení message153=Odfiltrováno message154=Kódy zde uvedené dávají zátì¾ "nezobrazovanou" od náv¹tìv, èili nejsou uvedeny v jiných grafech. message155=Cluster message156=Roboti zde uvedení dávají zátì¾ "nezobrazovanou" od náv¹tìv, èili nejsou uvedeny v jiných grafech. # tohle jeste nevim jak prelozit message157=Èísla po + je úspì¹nì pøidaná zátì¾ z "robots.txt". message158=Èervové zde uvedení dávají zátì¾ "nezobrazovanou" od náv¹tìv, èili nejsou uvedeny v jiných grafech. message159=Nezobrazovaná zátì¾, vèetnì zátì¾e od robotù, èervù nebo odpovìdí na HTTP stavovové kódy. message160=Zobrazovaná zátì¾ message161=Nezobrazovaná zátì¾ message162=Za mìsíc message163=Èervi message164=rùzní message165=Úspì¹ne zaslané emaily message166=odmítnuté emaily message167=Citlivé cílelang/awstats-tw.txt000064400000010557152532065620010362 0ustar00# Chinese (traditionnal) message file # (by Geoffrey Hoo geoffrey.hoo@NOSPAMmyrealbox.com, remove "NOSPAM" to contact) # $Revision: 1.7 $ - $Date: 2004/01/15 09:19:24 $ PageCode=big5 message0=µLªk±oª¾ message1=µLªk±oª¾ (¤£¯à¤Ï¸Ñºô°ì¦WºÙ) message2=¨ä¥L message3=À˵ø¸Ô²Ó¸ê®Æ message4=¬P´Á message5=¤ë¥÷ message6=¦~¥÷: message7=²Î­pºô¯¸ message8=­º¦¸°ÑÆ[¤é´Á message9=³Ìªñ°ÑÆ[¤é´Á message10=°ÑÆ[¦¸¼Æ message11=°ÑÆ[ªÌ message12=°ÑÆ[¦¸¼Æ message13=­ÓÃöÁä¦rµü message14=·j´M message15=¦Ê¤À¤ñ message16=¬y¶q²Î­p message17=ºô°ì©Î°ê®a message18=«ô³XªÌ message19=ºô­¶ªº URL ºô§} message20=¨C¤p®É message21=ÂsÄý¾¹ message22=HTTP ¿ù»~ message23=°Ñ¦Ò¸ê°T message24=±q¥¼§ó·s message25=°ÑÆ[ªÌªººô°ì©Î°ê®a message26=¥D¾÷ message27=ºô­¶¼Æ message28=­Ó¤£¦Pªººô­¶ message29=¦s¨ú¦¸¼Æ message30=¤£¦Pªº¦rµü message31=§ä¤£¨ìªººô­¶ #message32=HTTP ¿ù»~½X message32=HTTP ª¬ºA½X message33=Netscape ª©¥» message34=IE ª©¥» message35=³Ìªñ§ó·s message36=³sµ²ºô¯¸ªº¤èªk message37=¨Ó·½ºô§} message38=ºô§}¥Ñ°ÑÆ[ªÌ¦Û¦æ¿é¤J¡A©Î±q®ÑÅÒ¨ú¥X message39=µLªk±oª¾³sµ²ªº¤èªk message40=±q·j´Mºô¯¸³sµ² message41=±q¦¹ºô¯¸¥~ªº¨ä¥L (¨Ã«D¬O·j´M¤ÞÀºªº) ºô­¶³sµ² message42=±q¦¹ºô¯¸¤º³¡³sµ² message43=ºô¯¸·j´MªºÃöÁä¦r¥y message44=ºô¯¸·j´MªºÃöÁä¦rµü message45=µLªk¤Ï¸ÑĶªºIP¦ì§} message46=µLªk±oª¾ªº§@·~¨t²Î message47=§ä¤£¨ìªººô§}³sµ² (HTTP ¿ù»~½X 404) message48=IP ¦ì§} message49=¿ù»~¦¸¼Æ message50=µLªk±oª¾ªºÂsÄý¾¹ message51=­Óº©¹C¾¹ message52=°ÑÆ[¦¸¼Æ/°ÑÆ[ªÌ message53=·j´M¤ÞÀººô¯¸ªºº©¹C¾¹ message54=ºô­¶¬ö¿ý¤ÀªR¨t²Î message55=­Ó©ó message56=ºô­¶¼Æ #message57=ÀÉ®×¼Æ message57=ÂIÀ»¼Æ message58=ª©¥» message59=§@·~¨t²Î #message60=¤@¤ë #message61=¤G¤ë #message62=¤T¤ë #message63=¥|¤ë #message64=¤­¤ë #message65=¤»¤ë #message66=¤C¤ë #message67=¤K¤ë #message68=¤E¤ë #message69=¤Q¤ë #message70=¤Q¤@¤ë #message71=¤Q¤G¤ë message60=1¤ë message61=2¤ë message62=3¤ë message63=4¤ë message64=5¤ë message65=6¤ë message66=7¤ë message67=8¤ë message68=9¤ë message69=10¤ë message70=11¤ë message71=12¤ë message72=ÂsÄý¾¹²Î­p message73=ÀÉ®×Ãþ§O message74=¥ß§Y§ó·s message75=¦ì¤¸²Õ message76=¦^¨ì¥D­¶ message77=«e message78=yyyy¦~ mmm dd¤é HH:MM #message79=¹LÂo message79=¥]§t message80=¥þ³¡¦C¥X message81=¥D¾÷ message82=­Ó¸Ñͦ¨¥\ message83=·j´M¤ÞÀººô¯¸ message84=¤é message85=¤@ message86=¤G message87=¤T message88=¥| message89=¤­ message90=¤» message91=¬P´Á´X message92=«ö°ÑÆ[ªÌ message93=«ö°ÑÆ[®É¶¡ message94=ų§O¥Xªº¨Ï¥ÎªÌ message95=³Ì¤p message96=¥­§¡¼Æ message97=³Ì¤j message98=ºô­¶À£ÁY message99=¸`¬Ù¤FªºÀW¼e message100=À£ÁY«e message101=À£ÁY«á message102=Á`¼Æ message103=­Ó¤£¦PªºÃöÁä¦r¥y message104=¤J¯¸³B message105=½s½X message106=¥­§¡¤j¤p message107=±q·s»D¸s²Õ³sµ² #message108=K­Ó¦ì¤¸²Õ #message109=M­Ó¦ì¤¸²Õ #message110=G­Ó¦ì¤¸²Õ message108=KB message109=MB message110=GB message111=ºô­¶§ì¨ú¾¹ message112=¬O message113=§_ message114=WhoIs ¸ê°T message115=OK message116=¥X¯¸³B message117=¨C¦¸°ÑÆ[©Òªá®É¶¡ message118=Ãö³¬¦¹µøµ¡ #message119=­Ó¦ì¤¸²Õ message119=Bytes message120=¥Î¥H·j´MªºÃöÁä¦r¥y message121=¥Î¥H·j´MªºÃöÁä¦rµü message122=­Ó¤£¦Pªº·j´M¤ÞÀºÂश°ÑÆ[ªÌ¨ì³o¯¸ message123=­Ó¤£¦Pªº¨ä¥Lºô¯¸Âश°ÑÆ[ªÌ¨ì³o¯¸ message124=¨ä¥L¦r¥y message125=¨ä¥Lµn¿ý (¥]§t°Î¦Wµn¿ý) message126=¥Ñ¨º¨Ç·j´M¤ÞÀºÂश message127=¥Ñ¨º¨Ç¨ä¥Lºô¯¸Âश message128=¼¼­n message129=§@¥þ¦~²Î­p®É¡AµLªk·Ç½T±oª¾°ÑÆ[ªÌªº¼Æ¥Ø message130=Data value arrays message131=µo«H¤H¶l§} message132=¦¬«H¤H¶l§} message133=³øªí¤é´Á message134=ÃB¥~ / ¥«³õ¾Ç message135=¿Ã¹õ¤j¤p message136=įÂÎ/¯f¬r §ðÀ» message137=¥[¤J§Úªº³Ì·R (¦ô­p) message138=¨C¤é message139=Âø¶µ message140=ÂsÄý¾¹¤ä«ù Java message141=ÂsÄý¾¹¤ä«ù Macromedia Director message142=ÂsÄý¾¹¤ä«ù Flash message143=ÂsÄý¾¹¤ä«ù Real audio playing message144=ÂsÄý¾¹¤ä«ù Quicktime audio playing message145=ÂsÄý¾¹¤ä«ù Windows Media audio playing message146=ÂsÄý¾¹¤ä«ù PDF message147=SMTP ¿ù»~½X message148=°ê®a message149=¶l¥ó¼Æ message150=¤j¤p message151=­º¦¸ message152=³Ìªñ message153=¹LÂo #message154=* Codes shown here gave hits or traffic "not viewed" by visitors, so are isolated in this chart. message154=³o¨Çª¬ºA½X·|¼W¥[°ÑÆ[ªÌ"¬Ý¤£¨ì"ªºÂIÀ»¼Æ©Î¬y¶q, ©Ò¥H¤£¥]¬A¦b¨ä¥L²Î­pªí¤¤. message155=Cluster message156=³o¨Ç·j¯Á¾÷¾¹¤H(Robots)·|¼W¥[°ÑÆ[ªÌ"¬Ý¤£¨ì"ªºÂIÀ»¼Æ©Î¬y¶q, ©Ò¥H¤£¥]¬A¦b¨ä¥L²Î­pªí¤¤. message157="+" «áªº¼Æ¦r¬O "robots.txt" ªºÂIÀ»¼Æ. message158=³o¨ÇįÂη|¼W¥[°ÑÆ[ªÌ"¬Ý¤£¨ì"ªºÂIÀ»¼Æ©Î¬y¶q, ©Ò¥H¤£¥]¬A¦b¨ä¥L²Î­pªí¤¤. message159="¬Ý¤£¨ì"ªº¬y¶q¬O¥Ñ·j¯Á¾÷¾¹¤H(Robots),įÂΩίS§Oªº HTTP ¦^ÂФޭPªº. message160=´¶³q¬y¶q message161="¬Ý¤£¨ì"ªº¬y¶q message162=¨C¤ë°O¿ý message163=įÂÎ message164=¤£¦PªºÄ¯ÂÎlang/awstats-th.txt000064400000024215152532065620010337 0ustar00# Thai message file (kamthorn@users.sourceforge.net) # $Revision: 1.1 $ - $Date: 2004/08/16 20:07:54 $ PageCode=utf-8 message0=ไม่ทราบ message1=ไม่ทราบ (ไอพีไม่สามารถค้นà¸�ลับได้) message2=อื่นๆ message3=à¹�สดงรายละเอียด message4=วัน message5=เดือน message6=ปี message7=สถิติสำหรับ message8=เยี่ยมชมครั้งà¹�รà¸� message9=เยี่ยมชมล่าสุด message10=จำนวนà¸�ารเยี่ยมชม message11=ผู้เยี่ยมชม (ไม่ซ้ำ IP) message12=à¸�ารเยี่ยมชม message13=คำสำคัà¸�ที่à¹�ตà¸�ต่างà¸�ัน message14=ค้นหา message15=ร้อยละ message16=ปริมาณข้อมูล message17=โดเมน/ประเทศ message18=ผู้เยี่ยมชม message19=หน้า-URL message20=à¹�ยà¸�ตามชั่วโมง message21=บราวเซอร์ message22= message23=ผู้อ้างอิง message24=ยังไม่เคยถูà¸�ปรับปรุง (ดู 'Build/Update' ในหน้าเว็บ awstats_setup.html) message25=โดเมน/ประเทศ ของผู้เยี่ยมชม message26=โฮสต์ message27=หน้าเว็บ message28=หน้า-url ที่à¹�ตà¸�ต่างà¸�ัน message29=เข้าชม message30=คำอื่นๆ message31=หน้าที่ไม่พบ message32=รหัสสถานะ HTTP message33=รุ่นของเน็ตสเคป message34=รุ่นของ IE message35=ปรับปรุงล่าสุด message36=เชื่อมต่อมายังไซต์นี้ จาà¸� message37=ต้นทาง message38=เข้ามาโดยตรง / บุ๊คมาร์ค message39=ไม่ทราบที่มา message40=ลิงà¸�์มาจาà¸�เสิร์ชเอนจิ้นบนอินเทอร์เน็ต message41=ลิงà¸�์มาจาà¸�หน้าเว็บภายนอà¸� (เว็บอื่นๆ ที่ไม่ใช่เสิร์ชเอนจิ้น) message42=ลิงà¸�์มาจาà¸�หน้าเว็บภายใน (หน้าอื่นๆ บนไซต์เดียวà¸�ัน) message43=ประโยคสำคัà¸�ที่ใช้บนเสิร์ชเอนจิ้น message44=คำสำคัà¸�ที่ใช้บนเสิร์ชเอนจิ้น message45=ที่อยู่ไอพีที่ค้นà¸�ลับไม่ได้ message46=โอเอสที่ไม่รู้จัà¸� (useragent field) message47=URL ที่ถูà¸�เรียà¸�ใช้à¹�ต่ไม่มี (รหัส HTTP 404) message48=ที่อยู่ IP message49=จำนวนครั้งที่ผิดพลาด message50=บราวเซอร์ที่ไม่รู้จัà¸� (useragent field) message51=โรบ็อตที่à¹�ตà¸�ต่างà¸�ัน message52=จำนวนà¸�ารเข้าชม/ผู้เยี่ยมชม message53=จำนวนผู้เยี่ยมชมที่เป็น โรบ็อต/สไปเดอร์ message54=ตัววิเคราะห์à¹�ฟ้มปูมบันทึà¸�ตามเวลาจริงฟรี สำหรับสถิติเว็บขั้นสูง message55=ของ message56=หน้า message57=ครั้ง message58=รุ่น message59=ระบบปà¸�ิบัติà¸�าร message60=ม.ค. message61=à¸�.พ. message62=มี.ค. message63=เม.ย. message64=พ.ค. message65=มิ.ย. message66=à¸�.ค. message67=ส.ค. message68=à¸�.ย. message69=ต.ค. message70=พ.ย. message71=ธ.ค. message72=à¸�ารเข้าเยี่ยมชม message73=ชนิดà¹�ฟ้ม message74=ปรับปรุงเดี๋ยวนี้ message75=à¹�บนด์วิดธ์ message76=à¸�ลับสู่หน้าหลัà¸� message77=สูงสุด message78=dd mmm yyyy - HH:MM message79=ตัวà¸�รอง message80=ทุà¸�รายà¸�าร message81=à¹�ยà¸�ตามโฮสต์ message82=รู้จัà¸� message83=โรบ็อต message84=อา. message85=จ. message86=อ. message87=พ. message88=พฤ. message89=ศ. message90=ส. message91=à¹�ยà¸�ตามวันในสัปดาห์ message92=เป็นใคร message93=เมื่อไหร่ message94=ผู้ใช้ที่ได้รับสิทธิอนุà¸�าต message95=น้อยที่สุด message96=เฉลี่ย message97=สูงที่สุด message98=à¸�ารบีบอัดเว็บ message99=ประหยัดà¹�บนด์วิดธ์ได้ message100=เปิดใช้à¸�ารบีบอัด message101=ผลลัพธ์à¸�ารบีบอัด message102=ทั้งหมด message103=ประโยคสำคัà¸�ที่à¹�ตà¸�ต่างà¸�ัน message104=เข้า message105=รหัส message106=ขนาดเฉลี่ย message107=ลิงà¸�์จาà¸�à¸�ลุ่มข่าว message108=KB message109=MB message110=GB message111=Grabber message112=ใช่ message113=ไม่ใช่ message114=Info. message115=ตà¸�ลง message116=ออà¸� message117=ระยะเวลาที่เยี่ยมชม message118=ปิดà¸�รอบนี้ message119=ไบต์ message120=ประโยคค้นหา message121=คำค้นหา message122=เสิร์ชเอนจิ้นที่อ้างอิงมาที่à¹�ตà¸�ต่างà¸�ัน message123=ไซต์ที่อ้างอิงมาที่à¹�ตà¸�ต่างà¸�ัน message124=ประโยคอื่น message125=ผู้เข้าใช้อื่น (à¹�ละ/หรือผู้ใช้ที่ไม่ออà¸�นาม) message126=เสิร์ชเอนจิ้นที่อ้างอิงมา message127=ไซต์ที่อ้างอิงมา message128=โดยสรุป message129=ค่าเจาะจงที่ไม่อยู่ในมุมมองà¹�บบ 'ปี' message130=อาเรย์ของค่าข้อมูล message131=ผู้ส่งอีเมล message132=ผู้รับอีเมล message133=ช่วงที่รายงาน message134=พิเศษ/เพื่อà¸�ารค้า message135=ขนาดจอภาพ message136=à¸�ารโจมตีโดยหนอนหรือไวรัส message137=Add to favorites (estimated) message138=à¹�ยà¸�ตามวันที่ message139=Miscellaneous message140=บราวเซอร์ที่สนับสนุนจาวา message141=บราวเซอร์ที่สนับสนุนà¹�มโครมีเดียไดเรà¸�เตอร์ message142=บราวเซอร์ที่สนับสนุนà¹�ฟลช message143=บราวเซอร์ที่สนับสนุนตัวเล่นเรียลออดิโอ message144=บราวเซอร์ที่สนับสนุนตัวเล่นควิà¸�ไทม์ออดิโอ message145=บราวเซอร์ที่สนับสนุนตัวเล่นวินโดวส์มีเดียออดิโอ message146=บราวเซอร์ที่สนับสนุน PDF message147=รหัสข้อผิดพลาด SMTP message148=à¹�ยà¸�ตามประเทศ message149=เมล message150=ขนาด message151=à¹�รà¸�สุด message152=หลังสุด message153=ตัวà¸�รองออà¸� message154=รหัสที่à¹�สดงนี้ให้ค่าจำนวนครั้งà¹�ละปริมาณข้อมูลในà¸�ลุ่ม "ไม่à¹�สดง" โดยผู้เยี่ยมชม ดังนั้นค่าเหล่านี้จะไม่ถูà¸�นำไปรวมในชาร์ตอื่นอีà¸� message155=คลัสเตอร์ message156=โรบ็อตที่à¹�สดงนี้ให้ค่าจำนวนครั้งà¹�ละปริมาณข้อมูลในà¸�ลุ่ม "ไม่à¹�สดง" โดยผู้เยี่ยมชม ดังนั้นค่าเหล่านี้จะไม่ถูà¸�นำไปรวมในชาร์ตอื่นอีà¸� message157=จำนวนที่อยู่หลัง + คือจำนวนครั้งที่อ่านไฟล์ "robots.txt" สำเร็จ message158=หนอนที่à¹�สดงนี้ให้ค่าจำนวนครั้งà¹�ละปริมาณข้อมูลในà¸�ลุ่ม "ไม่à¹�สดง" โดยผู้เข้าเยี่ยมชม ดังนั้นค่าเหล่านี้จะไม่ถูà¸�นำไปรวมà¸�ับชาร์ตอื่นอีà¸� message159=ปริมาณของข้อมูลที่ไม่ถูà¸�à¹�สดง ประà¸�อบด้วยปริมาณข้อมูลที่ถูà¸�สร้างโดยโรบ็อต หนอน หรือà¸�ารตอบà¸�ลับด้วยรหัสสถานะพิเศษของ HTTP message160=ปริมาณของข้อมูลที่ถูà¸�à¹�สดง message161=ปริมาณของข้อมูลที่ไม่ถูà¸�à¹�สดง message162=ประวัติรายเดือน message163=จำนวนหนอน message164=หนอนที่à¹�ตà¸�ต่างà¸�ัน message165=เมลที่ส่งได้สำเร็จ message166=เมลที่ล้มเหลวหรือถูà¸�ปà¸�ิเสธ message167=Sensitive targets message168=ปิดà¸�ารใช้งาน JavaScript lang/awstats-ru.txt000064400000012243152532065620010350 0ustar00# Russian message file # $Revision: 1.13 $ - $Date: 2006/03/14 23:49:17 $ PageCode=windows-1251 message0=Íåèçâåñòíûé message1=Íåèçâåñòíûé message2=Îñòàëüíûå message3=Ïîêàçàòü ïîäðîáíîñòè message4=Äåíü message5=Ìåñÿö message6=Ãîä message7=Ñòàòèñòèêà çà message8=Ïåðâûé âèçèò message9=Ïîñëåäíèé âèçèò message10=Êîëè÷åñòâî âèçèòîâ message11=Óíèêàëüíûå ïîñåòèòåëè message12=Âèçèò message13=ðàçëè÷íûå êëþ÷åâûå ñëîâà message14=Ïîèñê message15=Ïðîöåíò message16=Òðàôèê message17=Äîìåíû/Ñòðàíû message18=Ïîñåòèòåëè message19=Àäðåñ ñòðàíèöû message20=×àñû message21=Áðàóçåðû message22= message23=Ðåôåðåðû message24=Íåîáíîâëåííûé (Ñìîòðèòå 'Ñîçäàòü/Îáíîâèòü' íà ñòðàíèöå awstats_setup.html) message25=Ïîñåòèòåëè äîìåíû/ñòðàíû message26=õîñòû message27=ñòðàíèöû message28=Ðàçëè÷íûå url message29=Ïðîñìîòðîâ message30=Îñòàëüíûå ñëîâà message31=Ñòðàíèöû íå íàéäåíû message32=Ñòàòóñû îøèáîê HTTP message33=Âåðñèè Netscape message34=Âåðñèè IE message35=Ïîñëåäíåå îáíîâëåíèå message36=Ñîåäèíåíèå ñ ñàéòîì èç message37=Ïðîèñõîæäåíèå message38=Ïðÿìîé àäðåñ / Çàêëàäêè message39=Íåèçâåñòíîå ïðîèñõîæäåíèå message40=Ññûëêè èç ïîèñêîâûõ ñèñòåì message41=Ññûëêè èç âíåøíåé ñòðàíèöû (îñòàëüíûå web ñàéòû èñêëþ÷àÿ ïîèñêîâûå ñèñòåìû) message42=Ññûëêè èç âíóòðåííåé ñòðàíèöû (îñòàëüíûå ñòðàíèöû íà òîì æå ñàéòå) message43=Êëþ÷åâûå ôðàçû èñïîëüçóþùèåñÿ ïîèñêîâûìè ìàøèíàìè message44=Êëþ÷åâûå ñëîâà èñïîëüçóþùèåñÿ ïîèñêîâûìè ìàøèíàìè message45=Íåðàçðåøåííûé IP àäðåñ message46=Íåèçâåñòíûå Îïåðàöèîííûå ñèñòåìû (ïîëå useragent) message47=Òðåáóåìûå íî íå íàéäåííûå URL (HTTP code 404) message48=IP àäðåñ message49=Îøèáêà Õèòû message50=Íåèçâåñòíûå áðàóçåðû (ïîëå useragent) message51=ðàçëè÷íûå ðîáîòû message52=Âèçèòîâ/Ïîñåòèòåëü message53=Ðîáîòû/Ïàóêè ïîñåòèòåëè message54=Áåñïëòàíûé àíàëèçàòîð ëîã-ôàéëîâ äëÿ ðàñøèðåííîé Web ñòàòèñòèêè. message55=îò message56=Ñòðàíèöû message57=Õèòû message58=Âåðñèè message59=Îïåðàöèîííûå ñèñòåìû message60=ßíâàðü message61=Ôåâðàëü message62=Ìàðò message63=Àïðåëü message64=Ìàé message65=Èþíü message66=Èþëü message67=Àâãóñò message68=Ñåíòÿáðü message69=Îêòÿáðü message70=Íîÿáðü message71=Äåêàáðü message72=Íàâèãàöèÿ message73=Òèï ôàéëà message74=Îáíîâèòü ñåé÷àñ message75=Âåëè÷èíà message76=Âåðíóòüñÿ íà ãëàâíóþ ñòðàíèöó message77=Òîï message78=dd mmm yyyy - HH:MM message79=Ôèëüòð message80=Ïîëíûé ñïèñîê message81=Õîñòû message82=Èçâåñòíûå message83=Ðîáîòû message84=Âîñêðåñåíüå message85=Ïîíåäåëüíèê message86=Âòîðíèê message87=Ñðåäà message88=×åòâåðã message89=Ïÿòíèöà message90=Ñóááîòà message91=Äåíü íåäåëè message92=Êòî message93=Êîãäà message94=Àâòîðèçîâàííûå ïîëüçîâàòåëè message95=Ìèíèìàëüíîå message96=Ñðåäíåå message97=Ìàêñèìàëüíîå message98=Web êîìïðåññèÿ message99=Ñîõðàíåííàÿ âåëè÷èíà message100=Êîìïðåññèÿ âêëþ÷åíà message101=Ðåçóëüòàò êîìïðåññèè message102=Total message103=Ðàçëè÷íûå êëþ÷åâûå ôðàçû message104=Âõîæäåíèå message105=Êîä message106=Ñðåäíèé ðàçìåð message107=Ññûëêè èç íîâîñòíûõ ãðóïï message108=ÊÁ message109=ÌÁ message110=ÃÁ message111=Ãðàáåð message112=Äà message113=Íåò message114=Èíôî. message115=OK message116=Âûõîä message117=Ïðîäîëæèòåëüíîñòü âèçèòîâ message118=Çàêðûòü îêíî message119=Áàéòû message120=Ïîèñêîâûå Êëþ÷åâûå ôðàçû message121=Ïîèñêîâûå Êëþ÷åâûå ñëîâà message122=ðàçëè÷íûå ññûëàþùèåñÿ ïîèñêîâûå ìàøèíû message123=ðàçëè÷íûå ññûëàþùèåñÿ ñàéòû message124=Îñòàëüíûå ôðàçû message125=Îòñòàëüíûå ëîãèíû (è/èëè àíîíèìíûå ïîëüçîâàòåëè) message126=Ññûëàþùèåñÿ ïîèñêîâûå ìàøèíû message127=Ññûëàþùèåñÿ ñàéòû message128=Îáùåå message129=Òî÷íîå çíà÷åíèå íå äîñòóïíî â âèäå 'Year' message130=Ìàññèâû äàííûõ message131=Îòïðàâèòåëü EMail message132=Ïîëó÷àòåëü EMail message133=Îò÷åòíûé ïåðèîä message134=Äîïîëíèòåëüíî/Ìàðêåòèíã message135=Ðàçðåøåíèå ýêðàíà message136=Àòàêè âðåäîíîñòíûõ ïðîãðàìì message137=Äîáàâèòü â çàêëàäêè (ïðåäïîëàãàåìûé) message138=Äåíü ìåñÿöà message139=Ñìåøàííûå message140=Áðàóçåðû ñ ïîääåðæêîé Java support message141=Áðàóçåðû ñ ïîääåðæêîé Macromedia Director message142=Áðàóçåðû ñ ïîääåðæêîé Flash Support message143=Áðàóçåðû ñ ïîääåðæêîé Real audio playing message144=Áðàóçåðû ñ ïîääåðæêîé Quicktime audio playing message145=Áðàóçåðû ñ ïîääåðæêîé Windows Media audio playing message146=Áðàóçåðû ñ ïîääåðæêîé PDF message147=Êîäû îøèáîê SMTP message148=Ñòðàíû message149=Ïî÷òà message150=Ðàçìåð message151=Ïåðâûé message152=Ïîñëåäíèé message153=Ôèëüòð èñêëþ÷åíèé message154=Êîäû îòîáðàæåííûå çäåñü ãåíåðèðóþò òðàôèê íå îòîáðàæàåìûé ïîñåòèòåëÿì, ïîýòîìó îíè íå âêëþ÷åíû â îñòàëüíóþ ñòàòèñòèêó. message155=Êëàñòåð message156=Ðîáîòû îòîáðàæåííûå çäåñü ãåíåðèðóþò òðàôèê íå îòîáðàæàåìûé ïîñåòèòåëÿì, ïîýòîìó îíè íå âêëþ÷åíû â îñòàëüíóþ ñòàòèñòèêó. message157=×èñëà ïîñëå + õèòû óñïåøíî çàùèòàííûå äëÿ ôàéëà "robots.txt" message158=Âèðóñû îòîáðàæåííûå çäåñü ãåíåðèðóþò òðàôèê íå îòîáðàæàåìûé ïîñåòèòåëÿì, ïîýòîìó îíè íå âêëþ÷åíû â îñòàëüíóþ ñòàòèñòèêó. message159=Íå îòîáðàæàåìûé òðàôèê âëþ÷àåò â ñåáÿ òðàôèê ñãåíåðèðîâàííûé ðîáîòàìè, âèðóñàìè èëè îòâåòîì ñåðâåðà ñî ñïåöèàëüíûì HTTP êîäîì. message160=Îòîáðàæàåìûé òðàôèê message161=Íå îòîáðàæàåìûé òðàôèê message162=Èñòîðèÿ çà ìåñÿö message163=Âèðóñû message164=Ðàçëè÷íûå âèðóñû message165=Ïî÷òà óñïåøíî îòïðàâëåíà message166=Îòïðàâêà ïî÷òû íåóäàëàñü message167=×óâñòâèòåëüíîñòü öåëåé message168=Javascript îòêëþ÷åí message169=Ñîçäàíî message170=Ïëàãèíûlang/awstats-al.txt000064400000006313152532065620010317 0ustar00# Vargjet e mesazheve në Shqip. Ju lutem më kontaktoni për korrigjime (artonberisha@radiokosova.net, http://www.radiokosova.net) # $Revision: 1.1 $ - $Date: 2002/11/06 10:10:37 $ message0=Panjohur message1=Panjohur (IP e Pazgjidhur) message2=Tjera message3=Paraqit Detajet message4=Ditës message5=Muajit message6=Viti message7=Statistikat për message8=Vizita e parë message9=Vizita e fundit message10=Numri i vizitave message11=Vizitor të përbashkët message12=Vizita message13=Fjali të ndryshme message14=Kërkesa message15=Përqind message16=Trafiku message17=Vendet message18=Vizitorë message19=Faqe-URL message20=Orës message21=Shfletues message22=Gabime HTTP message23=Dërguest message24=Pafreskuar message25=Vizitorët sipas Vendeve message26=Strehues message27=Faqe message28=Faqe të ndryshme-url message29=Paraqitur message30=Fjali tjera message31=Faqet që nuk janë gjetur message32=HTTP kodi gabimeve message33=Botimi Netscape message34=Botimi IE message35=Freskimi Fundit message36=Lidhu te faqja nga message37=Origjina message38=Adresa direkte/Shenjime message39=Origjinë e Panjohur message40=Nyjet nga Kërkuest message41=Nyjet nga Faqet e jashtme (Faqe tjera n'përjashtim me Kërkuest) message42=Nyjet nga faqet e mbrendshme (Mbrenda faqes) message43=Kryefrazat e kërkuara message44=Kryefjalitë e përdorura nga kërkuest message45=Adresa IP e pazgjidhur message46=SO i panjohur(përdoruesi) message47=Nevojitur mirpo nuk janë gjetur URL't(HTTP kodi 404) message48=IP Adresa message49=Gabimet gjatë hyrjes message50=Shfletuest e panjohur(Përdoruest) message51=Robotat e ndryshëm message52=Vizita/Vizitor message53=Robota/Vizitor marimange message54=AWStats - Analizues falas për çdo faqe message55=Prej message56=Faqe message57=Hyrje message58=Botimet message59=Sistemi Operues message60=Jan message61=Shk message62=Mar message63=Pr message64=Maj message65=Qër message66=Korr message67=Gush message68=Sht message69=Tet message70=Nën message71=Dhjet message72=Lundrimi message73=Tipi Vargjeve message74=Freskoje message75=Transmetim message76=Prapa te faqja kryesore message77=Top message78=dd mmm yyyy - HH:MM:SS message79=Filteri message80=Lista message81=Strehuest message82=Njohur message83=Robotat message84=Diel message85=Hën message86=Mar message87=Mer message88=Enj message89=Pre message90=Sht message91=Javës message92=Kush vizitoi message93=Rezultatet Sipas message94=Vërtetimet message95=Min message96=Mesatarja message97=Maks message98=Ngjeshja e Faqes message99=Transmetimi i Ruajtur message100=Ngjeshe message101=Ngjeshja message102=Shuma message103=Kryefraza të ndryshme message104=Hyrjet message105=Kodi message106=Sasia mesatare message107=Lidhjet nga lajmëruest message108=KB message109=MB message110=GB message111=Rrëmbyes message112=Po message113=Jo message114=WhoIs info message115=N'rregull message116=Dalje message117=Zgjatja e Vizitës message118=Mbylle dritaren message119=Bajta message120=Kryefrazat e Kërkuara message121=Kryefjalit e Kërkuara message122=Makinat e ndryshme kërkuese message123=Nga Faqet e ndryshme message124=Fraza tjera message125=Hyrjet tjera (dhe/ose t'panjohurit) message126=Makinat kërkuese message127=Faqet drejtuese message128=Pëgjithësia message129=Valuta është pavlerë në shiqimin 'Vjetor' message130=Vititlang/awstats-en.txt000064400000011422152532065620010322 0ustar00# English message file (eldy@users.sourceforge.net) # $Revision: 1.83 $ - $Date: 2008/02/01 23:49:46 $ message0=Unknown message1=Unknown (unresolved ip) message2=Others message3=View details message4=Day message5=Month message6=Year message7=Statistics for message8=First visit message9=Last visit message10=Number of visits message11=Unique visitors message12=Visit message13=different keywords message14=Search message15=Percent message16=Traffic message17=Domains/Countries message18=Visitors message19=Pages-URL message20=Hours message21=Browsers message22= message23=Referrers message24=Never updated (See 'Build/Update' on awstats_setup.html page) message25=Visitors domains/countries message26=hosts message27=pages message28=different pages-url message29=Viewed message30=Other words message31=Pages not found message32=HTTP Status codes message33=Netscape versions message34=IE versions message35=Last Update message36=Connect to site from message37=Origin message38=Direct address / Bookmark / Link in email... message39=Unknown Origin message40=Links from an Internet Search Engine message41=Links from an external page (other web sites except search engines) message42=Links from an internal page (other page on same site) message43=Keyphrases used on search engines message44=Keywords used on search engines message45=Unresolved IP Address message46=Unknown OS (useragent field) message47=Required but not found URLs (HTTP code 404) message48=IP Address message49=Error Hits message50=Unknown browsers (useragent field) message51=different robots message52=visits/visitor message53=Robots/Spiders visitors message54=Free realtime logfile analyzer for advanced web statistics message55=of message56=Pages message57=Hits message58=Versions message59=Operating Systems message60=Jan message61=Feb message62=Mar message63=Apr message64=May message65=Jun message66=Jul message67=Aug message68=Sep message69=Oct message70=Nov message71=Dec message72=Navigation message73=File type message74=Update now message75=Bandwidth message76=Back to main page message77=Top message78=dd mmm yyyy - HH:MM message79=Filter message80=Full list message81=Hosts message82=Known message83=Robots message84=Sun message85=Mon message86=Tue message87=Wed message88=Thu message89=Fri message90=Sat message91=Days of week message92=Who message93=When message94=Authenticated users message95=Min message96=Average message97=Max message98=Web compression message99=Bandwidth saved message100=Compression on message101=Compression result message102=Total message103=different keyphrases message104=Entry message105=Code message106=Average size message107=Links from a NewsGroup message108=KB message109=MB message110=GB message111=Grabber message112=Yes message113=No message114=Info. message115=OK message116=Exit message117=Visits duration message118=Close window message119=Bytes message120=Search Keyphrases message121=Search Keywords message122=different referring search engines message123=different referring sites message124=Other phrases message125=Other logins (and/or anonymous users) message126=Referring search engines message127=Referring sites message128=Summary message129=Exact value not available in 'Year' view message130=Data value arrays message131=Sender EMail message132=Receiver EMail message133=Reported period message134=Extra/Marketing message135=Screen sizes message136=Worm/Virus attacks message137=Add to favorites (relative indicator) message138=Days of month message139=Miscellaneous message140=Browsers with Java support message141=Browsers with Macromedia Director Support message142=Browsers with Flash Support message143=Browsers with Real audio playing support message144=Browsers with Quicktime audio playing support message145=Browsers with Windows Media audio playing support message146=Browsers with PDF support message147=SMTP Error codes message148=Countries message149=Mails message150=Size message151=First message152=Last message153=Exclude filter message154=Codes shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts. message155=Cluster message156=Robots shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts. message157=Numbers after + are successful hits on "robots.txt" files. message158=Worms shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts. message159=Not viewed traffic includes traffic generated by robots, worms, or replies with special HTTP status codes. message160=Viewed traffic message161=Not viewed traffic message162=Monthly history message163=Worms message164=different worms message165=Mails successfully sent message166=Mails failed/refused message167=Sensitive targets message168=Javascript disabled message169=Created by message170=plugins message171=Regions message172=Citieslang/awstats-de.txt000064400000012242152532065620010311 0ustar00# German message file # $Revision: 1.18 $ - $Date: 2006/01/09 18:52:04 $ message0=Unbekannt message1=Unbekannte (IP konnte nicht aufgelöst werden ) message2=Sonstige message3=Details anzeigen message4=Tag message5=Monat message6=Jahr message7=Statistik für message8=Erster Zugriff message9=Letzter Zugriff message10=Anzahl der Besuche message11=Unterschiedliche Besucher message12=Besuch message13=Suchbegriffe message14=Häufigkeit message15=Prozent message16=Datenvolumen message17=Domains/Länder message18=Besucher message19=Seiten-URL message20=Stunden (Serverzeit) message21=Browser message22=HTTP Fehlermeldungen message23=Verweise message24=Noch nie aktualisiert message25=Domains/Länder der Besucher message26=Rechner message27=Seiten message28=Unterschiedliche Seiten message29=Zugriffe message30=Weitere Suchbegriffe message31=Nicht gefundene Seiten message32=HTTP Fehlercodes message33=Netscape Versionen message34=Internet Explorer Versionen message35=Zuletzt aktualisiert message36=Woher die Besucher kamen message37=Herkunft message38=Direkter Zugriff/Bookmarks message39=Herkunft unbekannt message40=Links von einer Internet-Suchmaschine message41=Links von einer externen Seite (keine Suchmaschinen) message42=Links von einer internen Seite innerhalb der Web Site message43=Suchausdrücke (Suchmaschinen) message44=Suchbegriffe (Suchmaschinen) message45=Unaufgelöste IP Adressen message46=Unbekanntes Betriebssystem message47=Nicht auffindbare Seiten (Fehler 404) message48=IP Adresse message49=Fehlerhafte Zugriffe message50=Unbekannter Browser message51=Zugriffe durch Suchmaschinen message52=Besuche/Besucher message53=Robots/Spiders (Suchmaschinen) message54=Kostenloses Programm zur Echtzeitanalyse für moderne Webstatistiken message55=von message56=Seiten message57=Zugriffe message58=Versionen message59=Betriebssysteme message60=Jan message61=Feb message62=März message63=Apr message64=Mai message65=Juni message66=Juli message67=Aug message68=Sep message69=Okt message70=Nov message71=Dez message72=Navigation message73=Datei-Typen message74=Jetzt aktualisieren message75=Bytes message76=Zurück zur Hauptseite message77=Top message78=dd.mm.yyyy - HH:MM message79=Filter message80=Gesamte Liste message81=Rechner message82=Bekannte message83=Robots message84=So message85=Mo message86=Di message87=Mi message88=Do message89=Fr message90=Sa message91=Wochentage message92=Wer message93=Wann message94=beglaubigte Benutzer message95=Minimum message96=Durchschnitt message97=Maximum message98=Kompressionsrate message99=gesparte Bandbreite message100=unkomprimiert message101=komprimiert message102=Total message103=verschiedene Suchbegriffe message104=Einstiegsseiten message105=Code message106=durchschnitt. Größe message107=Links aus einer News Gruppe message108=KB message109=MB message110=GB message111=Grabber message112=Ja message113=Nein message114=Whois Informationen message115=OK message116=Exit Seiten message117=Aufenthaltsdauer message118=Fenster schließen message119=Bytes message120=Suchausdrücke message121=Suchbegriffe message122=Suchmaschinen message123=Websites message124=Weitere Suchausdrücke message125=Unbekannte Benutzer message126=Suchmaschinen message127=Websites message128=Zusammenfassung message129=Der genaue Wert ist nicht in der 'Jahres'-Ansicht verfügbar message130=Datenwert Arrays message131=E-Mail Sender message132=E-Mail Empfänger message133=Zeitraum message134=Extra/Marketing message135=Bildschirmauflösungen message136=Wurm/Virus Angriffe message137=Zu Favoriten hinzugefügt (Schätzung) message138=Tage im Monat message139=Verschiedenes message140=Browser mit Unterstützung für JAVA message141=Browser mit Unterstützung für Macromedia Director message142=Browser mit Unterstützung für Flash message143=Browser mit Unterstützung für Real Audio Klangwiedergabe message144=Browser mit Unterstützung für Quicktime Klangwiedergabe message145=Browser mit Unterstützung für Windows Media Klangwiedergabe message146=Browser mit Unterstützung für PDF message147=Browser mit Unterstützung für SMTP Fehlercodes message148=Länder message149=Mails message150=Größe message151=Erste message152=Letzte message153=Exklusiv-Filter message154=Die Codes, die hier angezeigt werden, zeigen Treffer oder Traffic welchen Besucher "nicht gesehen" haben und sind in den übrigen Diagrammen nicht enthalten. message155=Cluster message156=Die Robots, die hier angezeigt werden, zeigen Treffer oder Traffic welchen Besucher "nicht gesehen" haben und sind in den übrigen Diagrammen nicht enthalten. message157=Zahlen hinter + sind erfolgreiche Treffer auf die "robots.txt"-Datei message158=Die Würmer, die hier angezeigt werden, zeigen Treffer oder Traffic welchen Besucher "nicht gesehen" haben und sind in den übrigen Diagrammen nicht enthalten message159=Nicht gesehener Traffic ist Traffic, welcher von Robots, Würmern oder Antworten mit speziellem HTTP-Statuscode message160=gesehener Traffic message161=nicht gesehener Traffic message162=Monatliche Historie message163=Würmer message164=unterschiedliche Würmer lang/awstats-ca.txt000064400000012051152532065620010302 0ustar00# Catalan message file (Temu-BCN temujinnn@hotmail.com) # $Revision: 1.4 $ - $Date: 2004/01/25 15:49:31 $ message0=Desconegut message1=Desconegut (Adreça IP desconeguda) message2=Altres message3=Veure detalls message4=Dia message5=Mes message6=Any message7=Estadístiques del lloc message8=Primera visita message9=Última visita message10=Nombre de visites message11=Visitants diferents message12=Visita message13=Paraula clau (keyword) message14=Cerques message15=Percentatge message16=Tràfic message17=Dominis/Països message18=Visitants message19=Pàgines/URLs message20=Visites per Hores message21=Navegadors message22= message23=Enllaços message24=Mai utilitzats (Miri 'Build/Update' a la pàgina awstats_setup.html) message25=Visites por Dominis/Països message26=servidors message27=pàgines message28=pàgines diferents message29=Accessos message30=Altres paraules message31=Pàgines no trobades message32=Codis d'error del Protocol HTTP message33=Versions de Netscape message34=Versions de MS Internet Explorer message35=Última actualització message36=Connectat al lloc desde message37=Origen de l'enllaç message38=Des de direcció directa o Preferits message39=Origen desconegut message40=Enllaços des d'algun motor de cerca message41=Enllaços des de pàgines externes (excepte motors de cerca) message42=Enllaços des de pàgines internes (altres pàgines del lloc) message43=Paraules clau utilitzades pel motor de cerca message44=Paraules utilitzades pel motor de cerca message45=Direcció IP no identificada message46=Sistema Operatiu desconegut (camp de referència) message47=URLs sol·licitades però no trobades (codi 404 del protocol HTTP) message48=Direcció IP message49=Sol·licituds errònies message50=Navegadors desconeguts (camp de referència) message51=Visites de Robots message52=Visites/Visitant message53=Visites de Robots/Spiders (indexadors) message54=Analitzador gratuït de històrics per a estadístiques Web avançades message55=de message56=Pàgines message57=Sol·licituds message58=Versions message59=Sistemes Operatius message60=Gen message61=Feb message62=Mar message63=Abr message64=Mai message65=Jun message66=Jul message67=Ago message68=Sep message69=Oct message70=Nov message71=Des message72=Navegació message73=Tipus de fitxer message74=Actualitzar ara message75=Ample de banda message76=Tornar a la pàgina principal message77=Top message78=dd mmm yyyy - HH:MM message79=Filtre message80=Llista completa message81=Servidors message82=Coneguts message83=Robots message84=Diu message85=Dil message86=Dim message87=Dmc message88=Djs message89=Div message90=Dis message91=Dies de la setmana message92=Qui message93=Quan message94=Usuaris Autentificats message95=Min message96=Mitja message97=Max message98=Compressió Web message99=Ample de banda estalviat message100=Abans de la compressió message101=Després de la compressió message102=Total message103=Paraules clau diferents message104=Pàgina d'entrada message105=Codi message106=Volum mitjà message107=Enllaços des d'un grup de notícies message108=KB message109=MB message110=GB message111=Grabber message112=Sí message113=No message114=Informació WhoIs message115=Acceptar message116=Sortida message117=Durada de les visites message118=Tancar finestra message119=Bytes message120=Motors de cerca frases clau message121=Motors de cerca paraules clau message122=enllaços des de motors de cerca diferents message123=enllaços des d'altres llocs message124=Altres frases de cerca message125=Altres usuaris (i/o usuaris anònims) message126=Enllaços des de motors de cerca message127=Llocs d'enllaços message128=Sumari message129=Valor exacte no disponible a la vista d'any message130=Matrius de dades message131=EMail del emissor message132=EMail del receptor message133=Període reportat message134=Extra/Marketing message135=Mides de pantalla message136=Atacs de Cucs/Virus message137=Inclosos a favorits (estimat) message138=Dies del mes message139=Miscel·lanis message140=Cercadors amb suport Java message141=Cercadors amb suport Macromedia Director message142=Cercadors amb suport Flash message143=Cercadors amb suport de reproducció Real àudio message144=Cercadors amb suport de reproducció Quicktime audio message145=Cercadors amb suport de reproducció Windows Media audio message146=Cercadors amb suport PDF message147=Codis d'error SMTP message148=Països message149=Correus message150=Volum message151=Primer message152=Últim message153=Excloure filtre message154=Els codis mostrats aquí son donats per sol·licituds o tràfic "no vist" per els visitants, es troben en aquest apartat. message155=Cluster message156=Els Robots comptats aquí son donats per sol·licituds o tràfic "no vist" per els visitants, es troben en aquest apartat. message157=Números després de + son sol·licituds correctes en els arxius “robots.txt”. message158=Els Cucs comptats aquí son donats per sol·licituds o tràfic "no vist" per els visitants, es troben en aquest apartat. message159=El tràfic no vist es tràfic generat per robots, cucs o respostes de codi especial d'estat HTTP. message160=Tràfic vist message161=Tràfic no vist message162=Històric Mensual message163=Cucs message164=Cucs diferentslang/awstats-ba.txt000064400000012147152532065620010307 0ustar00# Bosnian message file (info@uino.gov.ba) # $Revision: 1.5 $ - $Date: 2007/03/06 18:36:29 $ PageCode=iso-8859-2 message0=Nepoznat message1=nepoznatih (IP adresa nije razrije¹ena) message2=Ostalo message3=Vidi detalje message4=Dan message5=Mjesec message6=Godina message7=Statistika za message8=Prvi posjet message9=Zadnji posjet message10=Broj posjeta message11=Jedinstvenih posjetilaca message12=Posjet message13=Kljuèna rijeè message14=Pretraga message15=Procenat message16=Saobraæaj message17=Domeni/Zemlje message18=Posjetitelji message19=Stranice/URL message20=Sati (Serversko vrijeme) message21=Browseri (preglednici) message22=HTTP Gre¹ke message23=Refereri (linkovi) message24=Kljuène rijeèi pretrage message25=Domeni/zemlje posjetitelja message26=raèunara message27=stranica message28=razlièite stranice message29=Pristup message30=Ostale rijeèi message31=Nepronaðene stranice message32=HTTP Kodovi gre¹ke message33=Verzije Netscape-a message34=Verzije IE-a message35=Posljednje osvje¾avanje message36=Link na sajt sa: message37=Odakle je korisnik do¹ao message38=Direktan pristup / Bookmarks message39=Nepoznato porijeklo message40=Link sa Internet pretra¾ivaèa message41=Link sa eksterne stranice (drugi web sajtovi sem pretra¾ivaèa) message42=Link sa vlastite stranice (druga stranica unutar istog sajta) message43=kljuènih fraza kori¹tenih na pretra¾ivaèima message44=kljuènih rijeèi kori¹tenih na pretra¾ivaèima message45=Nerazrije¹ena IP Adresa message46=Nepoznat OS (polje Referer) message47=Zahtjevan URL koji nije pronaðen (HTTP kod 404) message48=IP Adresa message49=Gre¹ke Pogodci message50=Nepoznat preglednik (polje Referer) message51=Roboti posjetitelji message52=posjeta/posjetitelju message53=Posjetitelji roboti/spideri message54=Besplatan analizator logova za napredne web statistike message55=od message56=Stranica message57=Pogodaka message58=Verzije message59=Operativni sistem message60=Jan message61=Feb message62=Mar message63=Apr message64=Maj message65=Jun message66=Jul message67=Aug message68=Sep message69=Okt message70=Nov message71=Dec message72=Navigacija message73=Dnevna statistika message74=Osvje¾i sada! message75=Bajta message76=Nazad na glavnu stranicu message77=Prvih message78=dd mmm yyyy - HH:MM message79=Filter message80=Puna lista message81=Raèunari message82=poznatih message83=Roboti message84=Ned message85=Pon message86=Uto message87=Sri message88=Èet message89=Pet message90=Sub message91=Dani sedmice message92=Ko message93=Kada message94=Prijavljenih korisnika message95=Min message96=Prosjeèno message97=Max message98=Web kompresija message99=Saèuvani promet message100=Prije kompresije message101=Poslije kompresije message102=Ukupno message103=razlièitih kljuènih fraza message104=Ulaz message105=Kod message106=Prosjeèna velièina message107=Dolazaka sa NewsGroupa message108=KB message109=MB message110=GB message111=Grabber message112=Da message113=Ne message114=Info. message115=OK message116=Izlaz message117=Trajanje posjeta message118=Zatvori prozor message119=Bajta message120=Tra¾ene Fraze message121=Tra¾ene Rijeèi message122=razlièitih pretra¾ivaèa message123=razlièitih sajtova message124=Ostale fraze message125=Ostali posjeti (i/il anonimni korisnici) message126=Sa kojih pretra¾ivaèa message127=Sa kojih stranica message128=Opis i statistika message129=Taèan broj nije dostupan u godi¹njen pregledu message130=Vrijednost niza podataka (Data value arrays) message131=E-Mail po¹iljaoca message132=E-Mail primatelja message133=Period izvje¹taja message134=Extra/Marketing message135=Velièine ekrana message136=Worm/Virus napadi message137=Stavljeno u favorite (procjenjeno) message138=Dani u mjesecu message139=Razno message140=Preglednici sa podr¹kom za Javu message141=Preglednici sa podr¹kom za Macromedia Director-a message142=Preglednici sa podr¹kom za Flash message143=Preglednici sa podr¹kom za sviranje Real audia message144=Preglednici sa podr¹kom za sviranje Quicktime audia message145=Preglednici sa podr¹kom za sviranje Windows Media audia message146=Preglednici sa podr¹kom za PDF message147=SMTP kodovi gre¹ka message148=Dr¾ave message149=Mails message150=Velièina message151=Prvi message152=Posljednji message153=Filter iskljuèenja (Exclude filter) message154=Ovdje prikazani podaci svrstani su pod "neviðeno" od ¾ivih korisnika, tako da nisu ukljuèeni u ostale rezultate. message155=Cluster message156=Promet ovdje prikazanih robota svrstan je pod "neviðeno" od ¾ivih korisnika, tako da ti podaci nisu ukljuèeni u ostale rezultate. message157=Broj nakon + je broj uspje¹nih pogodaka na "robots.txt" datoteku. message158=Promet ovdje prikazanih crva (worms) svrstan je pod "neviðeno" od ¾ivih korisnika, tako da ti podaci nisu ukljuèeni u ostale rezultate. message159=Neviðen promet ukljuèuje promet stvoren robotima, crvima (worms), ili kao odgovor specijalnim HTTP status kodovima. message160=Viðen promet message161=Neviðen promet message162=Mjeseèni promet message163=Crv (worm) message164=Razlièitih crva (worms) message165=Uspje¹no poslanih mailova message166=Mail-ovi nisu poslani/odbijeni message167=Osjetljivi ciljevi (Sensitive targets) message168=Onemoguèen Javascript message169=Napravio message170=pluginslang/awstats-eu.txt000064400000012731152532065620010335 0ustar00# Basque - Euskara message file # $Revision: 1.2 $ - $Date: 2008/01/25 22:35:17 $ # aktor - aktor@aktornet.ath.cx # agonirena - agonirena@gmail.com message0=Ezezaguna message1=IP helbide ezezagunekoa message2=Beste batzuk message3=Xehetasunak ikusi message4=Eguna message5=Hilabetea message6=Urtea message7=Lekuko estadistikak message8=Lehenengo bisita message9=Azken bisita message10=Bisita kopurua message11=Bisitari desberdinak message12=Bisita message13=Gako-hitz message14=Bilaketak message15=Ehunekoa message16=Trafiko message17=Domeinuak/Herriak message18=Bisitariak message19=Orriak/URLak message20=Orduko bisitak message21=Nabigatzaileak message22=Akatsak message23=Loturak (Links) message24=Bilaketarako hitz gakoa message25=Domeinuko/Herrialdeko bisitak message26=zerbitzariak message27=orriak message28=orri desberdinak message29=Sarbideak message30=Beste hitz batzuk message31=Aurki gabeko orriak message32=HTTP akats kodeak message33=Netscape bertsioak message34=MS Internet Explorer bertsioak message35=Azken eguneratzea message36=Lekurako loturak (links) message37=Lotura-iturburua message38=Helbide zuzenetik edo Gogokoetatik message39=Iturburu ezezaguna message40=Bilaketa-tresnaren batetik loturak message41=Kanpoko horrietatik loturak (bilaketa-tresnak salbuesten) message42=Barneko horrietatik loturak (gunearen beste orriak) message43=Bilaketa-tresna erabilitako gako-esaldiak message44=Bilaketa-tresna erabilitako gako-hitzak message45=IP helbide ezezaguna message46=Sistema Eragile ezezaguna (useragent) message47=Eskatutako baina bilatugabeko URLak (404 kodea HTTP protokoloan) message48=IP Helbidea message49=Hits okerrak message50=Bilatzaile ezezagunak (useragent) message51=Robot bisitak message52=Bisitak/Bisitariak message53=Robot bisitak/Armiarmak message54=Web estatistika aurreratuentzat doako 'log' aztertzailea message55=de message56=Orriak message57=Hits message58=Bertsioak message59=Sistema Eragileak message60=Urt message61=Ots message62=Mar message63=Api message64=Mai message65=Eka message66=Uzt message67=Abu message68=Ira message69=Urr message70=Aza message71=Abe message72=Nabigazioa message73=Fitxategi mota message74=Eguneratu orain message75=Bytes message76=Orri nagusira itzuli message77=Gora message78=dd mmm yyyy - HH:MM message79=Iragazki message80=Zerrenda osoa message81=Zerbitzariak message82=Ezagunak message83=Robotak message84=Igandea message85=Astelehena message86=Asteartea message87=Asteazkena message88=Osteguna message89=Ostirala message90=Larunbata message91=Asteko egunak message92=Nork message93=Noiz message94=Erabiltzaile Baimenduak message95=Gut message96=Batazbeste message97=Geh message98=Web konpresioa message99=Banda-zabalera aurreztua message100=Konpresio aurretik message101=Konpresio ondoren message102=Guztira message103=Gako-esaldi ezberdinak message104=Sarrerako orria message105=Kodea message106=BatazBesteko neurria message107=NewsGroup-etik loturak message108=KB message109=MB message110=GB message111=Grabber message112=Bai message113=Ez message114=Whois informazioa message115=Onartu message116=Irteera message117=Bisiteen iraupena message118=Leihoa itxi message119=Bytes message120=Esaldi bilaketa-tresna message121=Gako-hitz bilaketa-tresna message122=Bilaketa-tresna igortzaile desberdinak message123=Gune igortzaile desberdinak message124=Beste gako-esaldi batzuk message125=Beste login batzuk (eta/edo erabiltzaile anonimoak) message126=Bilaketa-tresna igortzaileak message127=Gune igortzaileak message128=Laburpena message129=Balio zehatza ez dago eskuragarri 'Urte' ikuspegian message130=Datu taula message131=Bidaltzailearen EPosta message132=Jasotzilearen EPosta message133=Erakutsitako denboraldia message134=Extra/Marketing message135= Pantailaren tamainak message136=HAr/Birus erasoak message137=Laster-marka gehitu (adierazle erlatiboa) message138=Hilabeteko eguna message139=Hainbat message140=Java euskarria duten nabigatzaileak message141=Macromedia Director euskarria duten nabigatzaieak message142=Flash euskarria duten nabigatzaileak message143=Real audio errprodukzio euskarria duten nabigatzaileak Browsers with Real audio playing support message144=Quicktime audio erreprodukzio euskarria duten nabigatzaileak message145=Windows Media audio erreprodukzio euskarria duten nabigatzaileak message146=PDF euskarria duten nabigatzaileak message147=SMTP errore kodeak message148=Herrialdeak message149=Postak message150=Tamaina message151=Lehendabizikoa message152=Azkena message153=Iragazkia baztertu message154=Hemen erakutsitako kodeak, bisitariak "ez ikusitako" trafiko edo eskakizunek sortutakoak dira, beraz, ez dira beste grafika batzuetan kontan hartzen. message155=Taldea message156=Hemen erakutsitako robotak, bisitariak "ez ikusitako" trafiko edo eskakizunek sortutakoak dira, beraz, ez dira beste grafika batzuetan kontan hartzen. message157=+ ondoren dauden zenbakiak, "robots.txt" fitxategien eskakizun arrakastatsuak dira. message158=Hemen erakutsitako harrak, bisitariak "ez ikusitako" trafiko edo eskakizunek sortutakoak dira, beraz, ez dira beste grafika batzuetan kontan hartzen. message159=Ez ikusitako trafikoa, robot, har edo HTTP egoera kode berezien erantzunek sortzen duten trafikoa da. message160=Ikusitako trafikoa message161=Ez ikusitako trafikoa message162=Hileroko historia message163=Harrak message164=har desberdinak message165=Postak ondo bidali dira message166=Postak hutsegin/errefusatu message167=Helburu sentikorrak message168=Javascript ezgaitua message169=Honek sortua message170=pluginak message171=Eskualdeak message172=Hiriak lang/awstats-cn.txt000064400000010053152532065620010317 0ustar00# Chinese (simplified) message file (by Che Dong chedongATgmail.com) # $Revision: 1.10 $ - $Date: 2007/08/10 21:01:38 $ PageCode=gb2312 message0=ÎÞ·¨µÃÖª message1=ÎÞ·¨µÃÖª(²»ÄÜ·´½âÍøÓòÃû³Æ) message2=ÆäËû message3=²é¿´Ïêϸ×ÊÁÏ message4=ÈÕÆÚ message5=Ô message6=Äê message7=ͳ¼ÆÍøÕ¾ message8=Ê״βιÛÈÕÆÚ message9=×î½ü²Î¹ÛÈÕÆÚ message10=²Î¹ÛÈË´Î message11=²Î¹ÛÕß message12=²Î¹Û message13=¸ö¹Ø¼ü×Ö´Ê message14=ËÑË÷ message15=°Ù·Ö±È message16=Á÷Á¿Í³¼Æ message17=ÍøÓò»ò¹ú¼Ò message18=²Î¹ÛÕß message19=URL ÍøÖ· message20=ÿСʱä¯ÀÀ´ÎÊý message21=ä¯ÀÀÆ÷ message22=HTTP ´íÎó message23=·´ÏàÁ´½Ó message24=´Óδ¸üУ¨²Î¿¼ awstats_setup.htmlÉ쵀 'Build/Update'£© message25=²Î¹ÛÕßµÄÍøÓò»ò¹ú¼Ò message26=Ö÷»úÊý message27=ÍøÒ³Êý message28=¸ö²»Í¬µÄÍøÒ³ message29=´æÈ¡´ÎÊý message30=²»Í¬µÄ×Ö´Ê message31=ÕÒ²»µ½µÄÍøÒ³ message32=HTTP ´íÎóÂë message33=Netscape °æ±¾ message34=IE °æ±¾ message35=×î½ü¸üРmessage36=Á¬½áÍøÕ¾µÄ·½·¨ message37=À´Ô´ÍøÖ· message38=ÍøÖ·ÓɲιÛÕß×ÔÐÐÊäÈë»ò´ÓÊéǩȡ³ö message39=ÎÞ·¨µÃÖªÁ¬½áµÄ·½·¨ message40=À´×ÔËÑË÷ÒýÇæ message41=À´×Ô´ËÍøÕ¾ÍâµÄÆäËûÍøÒ³ (·ÇËÑË÷ÒýÇæ) message42=´ÓÍøÕ¾ÄÚ²¿Á¬½á message43=ÍøÕ¾ËÑË÷µÄ¹Ø¼ü×Ö¾ä message44=ÍøÕ¾ËÑË÷µÄ¹Ø¼ü×Ö´Ê message45=ÎÞ·¨·´½âÒëµÄIPµØÖ· message46=ÎÞ·¨µÃÖªµÄ²Ù×÷ϵͳ message47=ÕÒ²»µ½µÄÍøÖ·Á¬½á (HTTP ´íÎóÂë 404) message48=IP µØÖ· message49=´íÎó´ÎÊý message50=ÎÞ·¨µÃÖªµÄä¯ÀÀÆ÷ message51=¸ö»úÆ÷ÈË message52=²Î¹ÛÈË´Î/²Î¹ÛÕß message53=ËÑË÷ÒýÇæÍøÕ¾µÄ»úÆ÷ÈË message54=ÍøÒ³¼Í¼·ÖÎöϵͳ message55=¸öì¶ message56=ÍøÒ³Êý message57=ÎļþÊý message58=°æ±¾ message59=²Ù×÷ϵͳ message60=1 Ô message61=2 Ô message62=3 Ô message63=4 Ô message64=5 Ô message65=6 Ô message66=7 Ô message67=8 Ô message68=9 Ô message69=10Ô message70=11Ô message71=12Ô message72=ä¯ÀÀÆ÷ͳ¼Æ message73=ÎļþÀà±ð message74=Á¢¼´¸üРmessage75=×Ö½Ú message76=»Øµ½Ö÷Ò³ message77=ǰ message78=yyyyÄê mmm ddÈÕ HH:MM message79=¹ýÂ˰üº¬ message80=È«²¿Áгö message81=Ö÷»ú message82=¸ö½âÒë³É¹¦ message83=ËÑË÷ÒýÇæÍøÕ¾ message84=ÈÕ message85=Ò» message86=¶þ message87=Èý message88=ËÄ message89=Îå message90=Áù message91=°´ÐÇÆÚ message92=°´²Î¹ÛÕß message93=°´²Î¹Ûʱ¼ä message94=¼ø±ð³öµÄÓû§ message95=×îС message96=ƽ¾ùÊý message97=×î´ó message98=ÍøÒ³×¯Ëõ message99=½ÚÊ¡Á˵Ĵø¿í message100=ׯËõǰ message101=ׯËõºó message102=×ÜÊý message103=¸ö²»Í¬µÄ¹Ø¼ü×Ö¾ä message104=ÈëÕ¾´¦ message105=±àÂë message106=ƽ¾ù´óС message107=´ÓÐÂÎÅȺ×éÁ¬½á message108=K×Ö½Ú message109=M×Ö½Ú message110=G×Ö½Ú message111=ÀëÏßä¯ÀÀÆ÷£¨ÍøÒ³×¥È¡£© message112=ÊÇ message113=·ñ message114=WhoIs ×ÊѶ message115=OK message116=³öÕ¾´¦ message117=ÿ´Î²Î¹ÛËù»¨Ê±¼ä message118=¹Ø±Õ´Ë´°¿Ú message119=¸ö×Ö½Ú message120=ÓÃÒÔËÑË÷µÄ¶ÌÓï message121=ÓÃÒÔËÑË÷µÄ¹Ø¼ü´Ê message122=¸ö²»Í¬µÄËÑË÷ÒýÇæ×ª½é²Î¹ÛÕßµ½ÕâÕ¾ message123=¸ö²»Í¬µÄÆäËûÍøÕ¾×ª½é²Î¹ÛÕßµ½ÕâÕ¾ message124=ÆäËû¶ÌÓï message125=ÆäËûµÇ¼ (°üÀ¨ÄäÃûµÇ¼) message126=ÓÉÄÇЩËÑË÷ÒýÇæ×ª½é message127=ÓÉÄÇЩÆäËûÍøÕ¾×ª½é message128=ÕªÒª message129=×÷È«Äêͳ¼ÆÊ±£¬ÎÞ·¨×¼È·µÃÖª²Î¹ÛÕßµÄÊýÄ¿ message130=Êý¾ÝÖµÊý×é message131=·¢ÐÅÈËÓÊÖ· message132=ÊÕÐÅÈËÓÊÖ· message133=±¨±íÈÕÆÚ message134=ÌØ±ð/Êг¡ message135=ÆÁÄ»´óС message136=È䳿/²¡¶¾ ¹¥»÷ message137=¼ÓÈëµ½ÊղؼÐ(¹À¼Æ) message138=°´ÈÕÆÚͳ¼Æ message139=ÆäËû message140=ä¯ÀÀÆ÷Ö§³Ö Java message141=ä¯ÀÀÆ÷Ö§³Ö Macromedia Director message142=ä¯ÀÀÆ÷Ö§³Ö Flash message143=ä¯ÀÀÆ÷Ö§³Ö Real audio ²¥·Å message144=ä¯ÀÀÆ÷Ö§³Ö Quicktime audio ²¥·Å message145=ä¯ÀÀÆ÷Ö§³Ö Windows Media audio ²¥·Å message146=ä¯ÀÀÆ÷Ö§³Ö PDF message147=SMTP´íÎó´úÂë message148=¹ú¼Ò»òµØÇø message149=Óʼþ message150=´óС message151=µÚÒ»¸ö message152=×îĩһ¸ö message153=¹ýÂ˲»°üº¬ message154=·Çä¯ÀÀÆ÷²úÉúµÄÁ÷Á¿£¨À´×ÔËÑË÷ÒýÇæ»úÆ÷ÈË£¬²¡¶¾È䳿µÈ£© message155=¼¯Èº message156=ÒÔÉÏÁгöµÄËÑË÷ÒýÇæ»úÆ÷È˲úÉúµÄ¡°·Çä¯ÀÀÆ÷¡±Á÷Á¿²¢Î´°üº¬ÔÚÆäËûͼ±íÖÐ message157=¡°+¡±ºóµÄÊý×ÖΪ³É¹¦µÄ¡°robots.txt¡±·ÃÎÊ´ÎÊý message158=ÒÔÉÏÁгöµÄÈ䳿²úÉúµÄ¡°·Çä¯ÀÀÆ÷¡±Á÷Á¿²¢Î´°üº¬ÔÚÆäËûͼ±íÖÐ message159=·Çä¯ÀÀµÄÁ÷Á¿°üÀ¨ËÑË÷ÒýÇæ»úÆ÷ÈË£¬È䳿²¡¶¾²úÉúµÄÁ÷Á¿ºÍ·ÇÕý³£µÄHTTPÏàÓ¦ message160=ä¯ÀÀÆ÷Á÷Á¿ message161=·Çä¯ÀÀÆ÷Á÷Á¿ message162=°´ÔÂÀúʷͳ¼Æ message163=È䳿 message164=²»Í¬µÄÈ䳿 message165=³É¹¦·¢ËÍÓʼþ message166=Óʼþʧ°Ü»ò¾ÜÊÕ message167=Ãô¸ÐÄ¿±ê message168=Javascript½ûÓà message169=´´½¨Õß message170=²å¼þ message171=µØÇø message172=³ÇÊÐ lang/awstats-fr.txt000064400000012072152532065620010331 0ustar00# French message file (eldy@users.sourceforge.net) # $Revision: 1.84 $ - $Date: 2008/02/01 23:49:46 $ message0=Inconnu message1=Inconnus (IP non résolue) message2=Autres message3=Voir détails message4=Jour message5=Mois message6=Année message7=Statistiques de message8=Première visite message9=Dernière visite message10=Visites message11=Visiteurs différents message12=Visite message13=mots clé différents message14=Recherche message15=Pourcentage message16=Trafic message17=Domaines/Pays message18=Visiteurs message19=Pages-URL message20=Heures message21=Navigateurs message22= message23=Origine/Referer message24=Jamais mis à jour (Voir 'Build/Update', page awstats_setup.html) message25=Domaines/pays visiteurs message26=des hôtes message27=des pages message28=pages différentes message29=Pages vues message30=Autres mots message31=Pages non trouvées message32=Codes Status HTTP message33=Versions de Netscape message34=Versions de MS Internet Explorer message35=Dernière mise à jour message36=Connexions au site par message37=Origine de la connexion message38=Adresse directe / Bookmark / Lien dans email... message39=Origine inconnue message40=Lien depuis un moteur de recherche Internet message41=Lien depuis une page externe (autres sites, hors moteurs) message42=Lien depuis une page interne (autre page du site) message43=Phrases clés de recherche message44=Mots clés de recherche message45=Adresses IP non résolues message46=OS non reconnus (champ useragent brut) message47=URLs du site demandées non trouvées (Code HTTP 404) message48=Adresse IP message49=Hits en échec message50=Navigateurs non reconnus (champ useragent brut) message51=robots différents message52=visites/visiteur message53=Visiteurs Robots/Spiders message54=Analyseur de log libre pour statistiques Web avancées message55=sur message56=Pages message57=Hits message58=Versions message59=Systèmes exploitation message60=Jan message61=Fév message62=Mar message63=Avr message64=Mai message65=Juin message66=Juil message67=Aoû message68=Sep message69=Oct message70=Nov message71=Déc message72=Navigation message73=Types de fichiers message74=Mise à jour immédiate message75=Bande passante message76=Retour page principale message77=Top message78=dd mmm yyyy - HH:MM message79=Filtre message80=Liste complète message81=Hôtes message82=Connus message83=Robots message84=Dim message85=Lun message86=Mar message87=Mer message88=Jeu message89=Ven message90=Sam message91=Jours de la semaine message92=Qui message93=Quand message94=Logins utilises message95=Min message96=Moyenne message97=Max message98=Compression web message99=Bande-passante économisée message100=Compression sur message101=Résultat compression message102=Total message103=phrases clé différentes message104=Entrée message105=Code message106=Taille moyenne message107=Lien depuis un NewsGroup message108=Ko message109=Mo message110=Go message111=Aspirateur message112=Oui message113=Non message114=Info. message115=OK message116=Sortie message117=Durée des visites message118=Fermer message119=Octets message120=Phrases clés message121=Mots clés message122=moteurs de recherche différents message123=sites différents message124=Autres phrases message125=Autres logins (et/ou utilisateurs anonymes) message126=Moteurs de recherche message127=Sites référenceurs message128=Résumé message129=Valeur exacte indisponible en vue 'annuelle' message130=Tableaux des valeurs message131=EMail Emetteur message132=EMail Destinataire message133=Période d'analyse message134=Extra/Marketing message135=Résolution écran message136=Attaques Worm/Virus message137=Ajout aux favoris (indicateur relatif) message138=Jours du mois message139=Divers message140=Navigateurs avec support Java actif message141=Navigateurs avec support Macromedia Director message142=Navigateurs avec support Flash message143=Navigateurs avec support audio Real message144=Navigateurs avec support audio QuickTime message145=Navigateurs avec support audio Windows Media message146=Navigateurs avec support PDF message147=Codes Erreurs SMTP message148=Pays message149=Mails message150=Taille message151=Premier message152=Dernier message153=Filtre exclusion message154=Les codes présentées ici sont à l'origine de hits ou de traffic "non vus" par les visiteurs donc non représentés dans les autres tableaux. message155=Cluster message156=Les robots présentés ici sont à l'origine de hits ou de traffic "non vus" par les visiteurs donc non représentés dans les autres tableaux. message157=Les nombres après le + indiquent les hits avec succès sur les fichiers "robots.txt". message158=Les vers présentés ici sont à l'origine de hits ou de traffic "non vus" par les visiteurs donc non représentés dans les autres tableaux. message159=Le trafic 'non vu' est le trafic généré par les robots, vers ou réponses HTTP avec code retour spécial. message160=Trafic 'vu' message161=Trafic 'non vu' message162=Historique mensuel message163=Vers message164=vers differents message165=Mails transférés message166=Mails en échec/refusés message167=Cibles sensibles message168=Javascript désactivé message169=Généré par message170=plugins message171=Regions message172=Villes lang/awstats-nn.txt000064400000007550152532065620010342 0ustar00# Norwegian Nynorsk message file (by Karl Ove Hufthammer ) # $Revision: 1.24 $ - $Date: 2003/09/20 15:45:33 $ PageCode=iso-8859-1 message0=Ukjent message1=ukjente (fann ikkje vertsnamn) message2=Andre message3=Vis detaljar message4=Dag message5=Månad message6=År message7=Statistikk for message8=Første besøk message9=Siste besøk message10=Talet på besøk message11=Unike gjestar message12=Besøk message13=forskjellige søkjeord message14=Søk message15=Prosent message16=Trafikk message17=Domene/land message18=Gjestar message19=Sider message20=Timar message21=Nettlesarar message22=HTTP-feil message23=Referentar message24=Aldri oppdatert message25=Domene/land message26=vertar message27=sider message28=forskjellige sider message29=Viste sider message30=Andre ord message31=Manglande sider message32=HTTP-feilkodar message33=Netscape-versjonar message34=IE-versjonar message35=Siste oppdatering message36=Kopla til sida frå message37=Opphav message38=Direkteadresse/bokmerke message39=Ukjent opphav message40=Lenkjer frå søkjemotorar message41=Lenkjer frå eksterne sider (ikkje søkjemotorar) message42=Lenkjer frå interne sider (sider på same nettstad) message43=Søkjeuttrykk brukt message44=Søkjeord brukt message45=Ukjente vertsnamn (IP-adresse) message46=Ukjente OS (referentfelt) message47=Manglande sider (HTTP-feilkode 404) message48=IP-adresse message49=Feiltreff message50=Ukjente nettlesarar message51=forskjellige robotar message52=besøk/gjest message53=Robotbesøk message54=Gratis logganalysator for avansert vevstatistikk message55=av message56=Sider message57=Treff message58=Versjonar message59=Operativsystem message60=Jan message61=Feb message62=Mar message63=Apr message64=Mai message65=Jun message66=Jul message67=Aug message68=Sep message69=Okt message70=Nov message71=Des message72=Navigasjon message73=Filtypar message74=Oppdater no message75=Bandbreidd message76=Tilbake til hovudsida message77=øvste message78=yyyy-mm-dd - HH:MM message79=Berre vis message80=Full liste message81=Vertar message82=kjente message83=Robotar message84=Sø. message85=Må. message86=Ty. message87=On. message88=To. message89=Fr. message90=La. message91=Dagar i veka message92=Kven message93=Når message94=Autentiserte brukarar message95=Min. message96=Snitt message97=Maks. message98=Komprimering message99=Bandbreidd spart message100=Komprimering på message101=Komprimeringsresultat message102=Totalt message103=forskjellige søkjeuttrykk message104=Inngangssider message105=Kode message106=Snittstorleik message107=Lenkjer frå njusgrupper message108=KiB message109=MiB message110=GiB message111=Hentar message112=Ja message113=Nei message114=WhoIs-info message115=OK message116=Utgangssider message117=Besøkslengd message118=Lukk vindauge message119=Byte message120=Søkjeuttrykk message121=Søkjeord message122=forskjellige søkjemotorar message123=forskjellige nettstadar message124=Andre uttrykk message125=Andre pålogginar (og/eller anonyme brukarar) message126=Søkjemotorar message127=Nettstadar message128=Samandrag message129=Nøyaktige tal finst ikkje for årsoversikta message130=Verditabellar message131=E-post (avsendar) message132=E-post (mottakar) message133=Rapportperiode message134=Ekstra message135=Skjermstorleik message136=Orm- og virusåtak message137=Lagt til i bokmerkesamling (ikkje nøyaktig) message138=Dagar i månaden message139=Ymse message140=Nettlesarar med Java-støtte message141=Nettlesarar med Macromedia Director-støtte message142=Nettlesarar med Flash-støtte message143=Nettlesarar med RealAudio-lydstøtte message144=Nettlesarar med QuickTime-lydstøtte message145=Nettlesarar med Windows Media-lydstøtte message146=Nettlesarar med PDF-støtte message147=SMTP-feilkodar message148=Land message149=E-postar message150=Storleik message151=Første message152=Siste message153=Ikkje vis message154=* Kodar her gav treff eller trafikk «ikkje sett» av gjestane, og blir derfor vist for seg. message155=Klyngelang/awstats-dk.txt000064400000013126152532065620010321 0ustar00# Danish message file by Ole Stanstrup (revised and amended by soren@dacafe.com) # $Revision: 1.15 $ - $Date: 2007/10/01 20:58:37 $ # Danish message file Update by Michael Andreassen (revised michael@the-exterminator.dk) message0=Ukendt message1=Ukendt (uopløst IP-adresse) message2=Andre message3=Se detaljer message4=Dag message5=Måned message6=År message7=Statistik for message8=Første besøg message9=Sidste besøg message10=Antal besøg message11=Unikke besøgende message12=Besøg message13=forskellige søgeord message14=Søg message15=Procent message16=Trafik resume message17=Domæner/Lande message18=Besøgende message19=Sider/URL message20=Klokkeslæt (Servertid) message21=Browsere message22= message23=Henvisende sider message24=Aldrig opdateret (Se 'Build/Update' i awstats_setup.html) message25=Besøgende domæner/lande message26=hosts message27=sider message28=forskellige sider/URL message29=Viste sider message30=Andre ord message31=Ikke fundne sider message32=HTTP statuskoder message33=Netscape versioner message34=IE versioner message35=Seneste opdatering message36=Forbundet til websitet fra message37=Oprindelse message38=Direkte adgang/via bogmærker message39=Ukendt oprindelse message40=Links fra en internet søgemaskine message41=Links fra en ekstern side (andre websites, undtagen søgemaskiner) message42=Links fra en intern side (anden side på samme site) message43=Anvendte søgesætninger på søgemaskiner message44=Anvendte søgeord på søgemaskiner message45=Uopløste IP-adresser message46=Ukendte OS (useragent felt) message47=Krævet, men ikke fundet URL (HTTP-kode 404) message48=IP-adresse message49=Fejl Hits message50=Ukendte browsere (useragent felt) message51=forskellige robotter message52=besøg/besøgende message53=Robotter/Spiders besøgende message54=Gratis realtidsanalyse af logfiler med avancerede web-statistikker message55=af message56=Sider message57=Hits message58=Versioner message59=Operativsystemer message60=Jan message61=Feb message62=Mar message63=Apr message64=Maj message65=Jun message66=Jul message67=Aug message68=Sep message69=Okt message70=Nov message71=Dec message72=Navigation message73=Filtyper message74=Opdater nu message75=Båndbredde message76=Tilbage til forsiden message77=Top message78=dd mmm yyyy - HH:MM message79=Filter message80=Komplet liste message81=Hosts message82=Kendte message83=Robotter message84=Søn message85=Man message86=Tir message87=Ons message88=Tor message89=Fre message90=Lør message91=Dage i ugen message92=Hvem message93=Hvornår message94=Godkendte brugere message95=Min message96=Gennemsnit message97=Max message98=Webkomprimering message99=Båndbredde sparet message100=Før komprimering message101=Efter komprimering message102=Total message103=forskellige søgesætninger message104=Indgangssider message105=Kode message106=Gennemsnitsstørrelse message107=Links fra en nyhedsgruppe message108=KB message109=MB message110=GB message111=Grabber message112=Ja message113=Nej message114=WhoIs information message115=OK message116=Udgangssider message117=Besøgets varighed message118=Luk vindue message119=Bytes message120=Søgning Søgesætninger message121=Søgning Søgeord message122=forskellige henvisende søgemaskiner message123=forskellige henvisende sites message124=Andre sætninger message125=Andre logins (og/eller anonyme brugere) message126=Henvisende søgemaskiner message127=Henvisende web-steder message128=Sammendrag message129=Præcis værdi ikke tilgængelig ved 'helårlig' visning message130=Ordnet liste message131=Afsenderens E-mail message132=Modtagerens E-mail message133=Rapporteret periode message134=Ekstra message135=Skærmopløsninger message136=Orme/Virus angreb message137=Tilføjet til Foretrukne (estimeret) message138=Dage i måneden message139=Diverse message140=Browsere med Java understøttelse message141=Browsere med Macromedia Director understøttelse message142=Browsere med Flash Player understøttelse message143=Browsere med RealPlayer understøttelse message144=Browsere med Quicktime audio understøttelse message145=Browsere med Windows Mediaplayer understøttelse message146=Browsere med PDF understøttelse message147=SMTP Fejlkoder message148=Lande message149=E-Mails message150=Størrelse message151=Først message152=Sidst message153=Exclude filter message154=Koder, der er vist her, gav hits eller trafik, der 'ikke er set' af besøgende, så de medtages ikke i andre tabeller. message155=Cluster message156=Robotter, der er vist her, gav hits eller trafik, der 'ikke er set' af besøgende, så de medtages ikke i andre tabeller. message157=Tallet efter + er antallet af succesfulde hits på 'robots.txt'-filer. message158=Orme, der er vist her, gav hits eller trafik, der 'ikke er set' af besøgende, så de medtages ikke i andre tabeller. message159='Ikke set trafik' er trafik genereret af robotter, orme eller svar med speciel HTTP statuskode. message160=Set trafik message161=Ikke set trafik message162=Månedlig historie message163=Orme message164=forskellige orme message165=Antal succesfuldt afsendte e-mails message166=Antal fejlede/afviste e-mails message167=Sårbare systemer message168=Browsere med Javascript slået fra message169=Lavet af message170=plugins message171=Regioner message172=Byer lang/awstats-br.txt000064400000013304152532065620010324 0ustar00# Brazilian Portuguese message file (urban@ite.net.br) # $Revision: 1.8 $ - $Date: 2005/01/29 16:00:46 $ message0=Desconhecido message1=Desconhecido (ip não resolvido) message2=Outros visitantes message3=Ver detalhes message4=Dia message5=Mês message6=Ano message7=Estatísticas da message8=Primeira visita message9=Última visita message10=Número de visitas message11=Visitantes únicos message12=Visita message13=Palavra(s) chave(s) message14=Pesquisa message15=Por cento message16=Tráfego message17=Domínios/Países message18=Visitantes message19=Páginas/URL message20=Horas message21=Browsers message22=Erros HTTP message23=Referências message24=Busca Palavras message25=Visitas domínios/países message26=hosts message27=páginas message28=paginas diferentes message29=Acesso message30=Outras palavras message31=Páginas não existentes message32=Erros HTTP message33=Versões Netscape message34=Versões MS Internet Explorer message35=Última Atualização message36=Conectado a partir de message37=Origem message38=Endereço direto / Favoritos message39=Origem Desconhecida message40=Link de um Buscador message41=Link de uma página externa (outros sites que não buscadores) message42=Link de uma página interna (outras páginas no mesmo site) message43=Frases usadas em buscadores message44=Palavras usadas em mecanismos de busca message45=Endereço IP não resolvido message46=Sistemas Operacional Desconhecido (Campo Referer) message47=URLs solicitadas e não encontradas (HTTP code 404) message48=Endereço IP message49=Erro Hits message50=Browsers Desconhecidos(Campo Referer) message51=Buscadores Visitantes message52=visitas/visitante message53=Buscadores/Spiders visitantes message54=Estatísticas de acesso ao servidor WEB message55=de message56=Páginas message57=Hits message58=Versões message59=Sistema Operacional message60=Jan message61=Fev message62=Mar message63=Abr message64=Mai message65=Jun message66=Jul message67=Ago message68=Set message69=Out message70=Nov message71=Dez message72=Navegação message73=Tipos de Arquivos message74=Atualiza Agora message75=Bytes message76=Retorna à página inicial message77=Primeiros message78=dd mmm yyyy - HH:MM message79=Filtro message80=Lista completa message81=Hosts message82=Conhecido(a)(s) message83=Robôs message84=Dom message85=Seg message86=Ter message87=Qua message88=Qui message89=Sex message90=Sab message91=Dias da semana message92=Quem message93=Quando message94=Usuários autenticados message95=Min message96=Med message97=Max message98=Compressão Web message99=Banda economizada message100=Antes da compressão message101=Depois da compressão message102=Total message103=frases(s) diferente(s) message104=Páginas de entrada message105=Código message106=Tamanho médio message107=Links de um NewsGroup message108=KB message109=MB message110=GB message111=Grabber message112=Sim message113=Não message114=informação WhoIs (Quem é) message115=OK message116=Sair message117=Duração das visitas message118=Fechar janela message119=Bytes message120=Busca por Frases message121=Busca por Palavras message122=diferente referências em mecanismos de busca message123=diferente referências em sites message124=Outras frases message125=Outros logins (e/ou usuários anônimos) message126=Referência em mecanismos de busca message127=Referência em sites message128=Sumário message129=Valor exato não disponível na visualização 'Ano' message130=Disposições do valor dos dados message131=EMail Originário message132=EMail Destinatário message133=Período reportado message134=Extra/Marketing message135=Tamanhos de tela message136=Ataques de Worm/Virus message137=Adicionar em favoritos message138=Dias do Mês message139=Variados message140=Browsers com suporte ao Java message141=Browsers com suporte ao Macromedia Director message142=Browsers com suporte ao Flash message143=Browsers com suporte ao Real áudio message144=Browsers com suporte ao Quicktime áudio message145=Browsers com suporte ao Windows Media áudio message146=Browsers com suporte ao PDF message147=Códigos de Erro SMTP message148=Países message149=Mensagens message150=Tamanho message151=Primeiro message152=Último message153=Filtro de Exclusão message154=Códigos exibidos aqui indicam hits ou tráfego "não visto" pelos visitantes, então eles não são incluídos em outros gráficos. message155=Cluster message156=Robots exibidos aqui indicam hits ou tráfego "não visto" pelos visitantes, então eles não são incluídos em outros gráficos. message157=Números após + são hits com sucesso em arquivos "robots.txt". message158=Worms exibidos aqui indicam hits ou tráfego "não visto" pelos visitantes, então eles não sã incluídos em outros gráficoss. message159=Tráfego não visto é tráfego gerado por robots, worms ou respostas com código especial de status HTTP. message160=Tráfego visto message161=Tráfego não visto message162=Histórico Mensal message163=Worms message164=worms diferentes message165=Mails enviados com sucesso message166=Mails recusados/falha de entrega message167=Alvos sensíveis message168=Javascript desabilitado lang/awstats-gr.txt000064400000020773152532065620010341 0ustar00# Greek message file # Current maintainer: "Giannis Stoilis" # $Revision: 1.9 $ - $Date: 2008/05/02 22:09:10 $ # # Revision: 1.8 - Date: 2004/09/02 21:26:00 # By: Thomas Venieris # Updated for awstats version 6.1 # Also, changed some characters from the Windows-1253 encoding to the correct ISO-8859-7 (Specifically: Ά) PageCode=utf-8 message0=Άγνωστο message1=Άγνωστο (μη αναγνωÏ�ισμένη ip) message2=Άλλοι message3=Εμφάνιση λεπτομεÏ�ιών message4=ΗμέÏ�α message5=Μήνας message6=Έτος message7=Στατιστικά του message8=ΠÏ�ώτη επίσκεψη message9=Τελευταία επίσκεψη message10=ΑÏ�ιθμός επισκέψεων message11=Μοναδικοί επισκέπτες message12=Επίσκεψη message13=λέξεις-κλειδιά message14=Αναζήτηση message15=Ποσοστό message16=Διακίνηση message17=Επιθέματα/ΧώÏ�ες message18=Επισκέπτες message19=Σελίδες/URL message20=Î�Ï�ες message21=ΦυλλομετÏ�ητές message22=Σφάλματα HTTP message23=ΑναφοÏ�είς message24=Λεκτικά Î‘ναζήτησης message25=Επιθέματα/χώÏ�ες επισκεπτών message26=συστήματα message27=σελίδες message28=διαφοÏ�ετικές σελίδες message29=ΠÏ�όσβαση message30=Άλλα λεκτικά message31=Χαμένες σελίδες message32=Κωδικοί σφαλμάτων HTTP message33=Εκδόσεις Netscape message34=Εκδόσεις MS Internet Explorer message35=Τελευταία ανανέωση message36=ΣÏ�νδεση στο τόπο από message37=ΠÏ�οέλευση message38=ΕυθÏ�Ï‚ σÏ�νδεσμος / Αγαπημένα message39=Άγνωστη ΠÏ�οέλευση message40=ΣÏ�νδεσμος από Μηχανή Αναζήτησης του Internet message41=ΣÏ�νδεσμος από εξωτεÏ�ική σελίδα (άλλοι δικτυακοί τόποι εκτός μηχανών αναζήτησης) message42=ΣÏ�νδεσμος από εσωτεÏ�ική σελίδα (άλλη σελίδα στον ίδιο δικτυακό τόπο) message43=λεκτικά που χÏ�ησιμοποιήθηκαν σε μηχανές αναζήτησης message44=λέξεις που χÏ�ησιμοποιήθηκαν σε μηχανές αναζήτησης message45=ΔιευθÏ�νσεις IP που δεν αναγνωÏ�ίστηκαν message46=Άγνωστο λειτουÏ�γικό σÏ�στημα (Πεδίο παÏ�άπεμψης) message47=ΑπαιτοÏ�μενα αλλά χωÏ�ίς να βÏ�εθοÏ�ν URL (Κώδικας HTTP 404) message48=ΔιεÏ�θυνση IP message49=Συμβάντα Î£Ï†Î±Î»Î¼Î¬Ï„ων message50=Άγνωστοι φυλλομετÏ�ητές (Πεδίο παÏ�άπεμψης) message51=Ρομπότ επισκέπτες message52=επισκέψεις/επισκέπτη message53=Επισκέπτες Ρομπότ/ΑÏ�άχνες message54=ΕλεÏ�θεÏ�ος αναλυτής καταγÏ�αφών Ï€Ï�αγματικοÏ� χÏ�όνου για Ï€Ï�οηγμένα στατιστικά κίνησης WWW message55=από message56=Σελίδες message57=Επιτυχίες message58=Εκδόσεις message59=Λ/Σ message60=Ιαν message61=Φεβ message62=ΜάÏ� message63=ΑπÏ� message64=Μάϊ message65=ΙοÏ�ν message66=ΙοÏ�λ message67=ΑÏ�γ message68=Σεπ message69=Οκτ message70=Î�οέ message71=Δεκ message72=Πλοήγηση message73=ΤÏ�πος αÏ�χείων message74=Ανανέωση ΤώÏ�α message75=Bytes message76=ΕπιστÏ�οφή στην κεντÏ�ική σελίδα message77=ΔημοφιλέστεÏ�α message78=dd mmm yyyy - HH:MM message79=ΦίλτÏ�ο message80=ΠλήÏ�ης κατάλογος message81=Διακομιστές message82=Γνωστοί message83=Ρομπότ message84=ΚυÏ� message85=Δευ message86=ΤÏ�ι message87=Τετ message88=Πεμ message89=ΠαÏ� message90=Σαβ message91=ΗμέÏ�ες της εβδομάδας message92=Ποιος message93=Ποτε message94=ΑναγνωÏ�ισμένοι χÏ�ήστες message95=Ελάχιστο message96=Μέσος ÏŒÏ�ος message97=Μέγιστο message98=Συμπίεση ιστοÏ� message99=ΕÏ�Ï�ος που εξοικονομήθηκε message100=ΠÏ�ιν τη συμπίεση message101=Μετά τη συμπίεση message102=ΣÏ�νολο message103=διαφοÏ�ετικές φÏ�άσεις message104=Σελίδες Εισόδου message105=Κώδικας message106=Μέσο μέγεθος message107=ΣÏ�νδεσμοι από NewsGroup message108=KB message109=MB message110=GB message111=ΑÏ�πακτικό message112=Î�αι message113=Όχι message114=ΠληÏ�οφ. message115=Εντάξει message116=Έξοδος message117=ΔιάÏ�κεια επισκέψεων message118=Κλείσιμο παÏ�αθÏ�Ï�ου message119=Bytes message120=ΦÏ�άσεις-κλειδιά Î±Î½Î±Î¶Î·Ï„ήσεων message121=Λέξεις-κλειδιά Î±Î½Î±Î¶Î·Ï„ήσεων message122=ΔιαφοÏ�ετικές αναφοÏ�ές από μηχανές αναζήτησης message123=ΔιαφοÏ�ετικές αναφοÏ�ές από δικτυακοÏ�Ï‚ τόπους message124=Άλλες φÏ�άσεις message125=Άλλες συνδέσεις (και/ή ανώνυμοι χÏ�ήστες) message126=ΑναφοÏ�ές από μηχανές αναζήτησης message127=ΑναφοÏ�ές από δικτυακοÏ�Ï‚ τόπους message128=ΠεÏ�ίληψη message129=Η ακÏ�ιβής τιμή δεν είναι διαθέσιμη στην Ï€Ï�οβολή έτους message130=Πίνακες τιμών δεδομένων message131=ΔιεÏ�θυνση αποστολέα message132=ΔιεÏ�θυνση παÏ�αλήπτη message133=ΠεÏ�ίοδος αναφοÏ�άς message134=ΕπιπÏ�όσθετα/Marketing message135=Μεγέθη οθόνης message136=Επιθέσεις σκουλικιών/ιών message137=ΠÏ�οσθήκη σελιδοδείκτη (κατά Ï€Ï�οσέγγιση) message138=ΗμέÏ�ες του μήνα message139=ΔιάφοÏ�α message140=ΦυλλομετÏ�ητές με υποστήÏ�ιξη Java message141=ΦυλλομετÏ�ητές με υποστήÏ�ιξη Macromedia Director message142=ΦυλλομετÏ�ητές με υποστήÏ�ιξη Flash message143=ΦυλλομετÏ�ητές με υποστήÏ�ιξη αναπαÏ�αγωγής ήχου Real message144=ΦυλλομετÏ�ητές με υποστήÏ�ιξη αναπαÏ�αγωγής ήχου Quicktime message145=ΦυλλομετÏ�ητές με υποστήÏ�ιξη αναπαÏ�αγωγής ήχου Windows Media message146=ΦυλλομετÏ�ητές με υποστήÏ�ιξη PDF message147=Κωδικοί σφαλμάτων SMTP message148=ΧώÏ�ες message149=Επιστολές message150=Μέγεθος message151=ΠÏ�ώτη message152=Τελευταία message153=ΕξαίÏ�εση φίλτÏ�ου message154=Οι εμφανιζόμενοι κωδικοί αντιπÏ�οσωπεÏ�ουν αιτήσεις ή κίνηση που "δεν Ï€Ï�οβλήθηκε" στους επισκέπτες, οπότε δεν πεÏ�ιλαμβάνονται σε άλλα γÏ�αφήματα. message155=ΣυγκÏ�ότημα message156=Τα εμφανιζόμενα Ï�ομπότ αντιπÏ�οσωπεÏ�ουν αιτήσεις ή κίνηση που "δεν Ï€Ï�οβλήθηκε" στους επισκέπτες, οπότε δεν πεÏ�ιλαμβάνονται σε άλλα γÏ�αφήματα. message157=Οι αÏ�ιθμοί μετά το + είναι επιτυχημένες αιτήσεις σε αÏ�χεία "robots.txt". message158=Τα εμφανιζόμενα σκουλίκια αντιπÏ�οσωπεÏ�ουν αιτήσεις ή κίνηση που "δεν Ï€Ï�οβληθηκε" στους επισκέπτες, οπότε δεν πεÏ�ιλαμβάνονται σε άλλα γÏ�αφήματα. message159=Στην κίνηση που δεν Ï€Ï�οβλήθηκε πεÏ�ιλαμβάνεται κίνηση που Ï€Ï�οκλήθηκε από Ï�ομπότ, σκουλίκια ή απαντήσεις με ειδικοÏ�Ï‚ κωδικοÏ�Ï‚ κατάστασης HTTP. message160=Κίνηση που Ï€Ï�οβλήθηκε message161=Κίνηση που δεν Ï€Ï�οβλήθηκε message162=Μηνιαίο ιστοÏ�ικό message163=Σκουλίκια message164=ΔιαφοÏ�ετικά σκουλίκια message165=Επιτυχείς αποστολές μηνυμάτων message166=Αποτυχημένα/ΑπεÏ�Ï�ιφθέντα μηνÏ�ματα message167=Ευαίσθητοι στόχοιlang/awstats-tr.txt000064400000012160152532065620010345 0ustar00# Turkish message file # by giray@pultar.org 2002/08/29 # by Hakan A. 2007/05/18 # $Revision: 1.4 $ - $Date: 2007/05/27 15:46:17 $ message0=Bilinmeyen message1=Bilinmeyen (çözülemeyen IP) message2=Diðerleri message3=Detaylarý Gör message4=Gün message5=Ay message6=Yýl: message7=Site message8=Ýlk ziyaret message9=Son ziyaret message10=Ziyaretçi sayýsý message11=Ayrý Ziyaretçi message12=Ziyaret message13=Anahtar Sözcük message14=Arama message15=Yüzde message16=Trafik message17=Alan Adlarý/Ülkeler message18=Ziyaretçiler message19=Sayfalar-URL message20=Ziyaret Saatleri (Sunucu saati) message21=Tarayýcýlar message22=HTTP Hatalarý message23=Yönlendirenler message24=Aramada kullanýlan Anahtar Sözcükler message25=Ziyaretçilerin alan adlarý/ülkeleri message26=) bilgisayar message27=) sayfa message28=farklý sayfa message29=Eriþim message30=Diðer kelimeler message31=Bulunamayan Sayfalar message32=HTTP Hata kodlarý message33=Netscape sürümleri message34=IE sürümleri message35=Son Ýstatistik Güncellemesi message36=Siteye baðlantý yapanlar message37=Köken message38=Doðrudan adres / Yer imi message39=Kökeni bilinmeyen message40=Ýnternet arama motorundan baðlantý message41=Dýþ sayfalardan baðlantýlar (arama motorlarý hariç diðer web siteleri) message42=Ýçten sayfalar (ayný sitede bulunan baþka sayfalardan baðlantýlar) message43=) kullanýlan anahtar sözcükler (arama motorlarýnda) message44= message45=Çözülemeyen IP Adresleri message46=Bilinmeyen Ýþletim Sistemi (Yönlendiren alanýnda) message47=Gereken fakat bulunmayan URLler (HTTP kodu 404) message48=IP Adresi message49=Hata Hit sayýsý message50=Bilinmeyen Tarayýcýlar (Yönlendiren alanýnda) message51=Ziyaret eden robot message52=Ziyaret sayýsý/ziyaretçi sayýsý message53=Robot/Örümcek ziyaretleri message54=Geliþmiþ web istatistikleri için özgür, gerçek zamanlý kütük analizi programý message55=( toplam message56=Sayfa message57=Hit message58=Sürümler message59=Ýþletim Sistemleri message60=Oca message61=Þub message62=Mar message63=Nis message64=May message65=Haz message66=Tem message67=Agu message68=Eyl message69=Eki message70=Kas message71=Ara message72=Gezinim message73=Günlük istatistikler message74=Þimdi güncelle message75=Bayt message76=Ana sayfaya dön message77=En sýk kullanýlan message78=dd mmm yyyy - HH:MM message79=Süzgeç message80=Tüm liste message81=Hosts message82=Bilinen message83=Robotlar message84=Pzr message85=Pzt message86=Sal message87=Çar message88=Per message89=Cum message90=Cts message91=Haftanýn günleri message92=Kim message93=Ne zaman message94=Authenticated users message95=En düþük message96=Ortalama message97=En yüksek message98=Web sýkýþtýrmasý message99=kazanýlan bant geniþliði message100=Sýkýþtýrma öncesi message101=Sýkýþtýrma sonrasý message102=Toplam message103=Farklý Anahtar Kelime message104=Giriþ sayfalarý message105=Code message106=Ortalama boyut message107=Haber grubundan baðlantýlar message108=KB message109=MB message110=GB message111=Grabber message112=Evet message113=Hayýr message114=Info. message115=OK message116=Çýkýþ message117=Ziyaret süresi message118=Pencereyi kapat message119=Bytes message120=Arama Kalýplarý message121=Arama Kelimeleri message122=yönlendiren farklý arama motoru message123=yönlendiren farklý site message124=Diðer kalýplar message125=Diðer loginler (ve/veya anonim kullanýcý) message126=Yönlendiren arama motorlarý message127=Yönlendiren siteler message128=Özet message129='Yýl' görünümünde tam deðer yok message130=Data value arrays message131=Gönderen EMail message132=Alan EMail message133=Raporlama dönemi message134=Extra/Marketing message135=Ekran boyutlarý message136=Solucan/Virus saldýrýlarý message137=Favorilere ekle (relative indicator) message138=Ayýn günleri message139=Çeþitli message140=Java destekli tarayýcýlar message141=Macromedia Director destekli tarayýcýlar message142=Flash destekli tarayýcýlar message143=Real audio çalma destekli tarayýcýlar message144=Quicktime ses çalma destekli tarayýcýlar message145=Windows Media ses çalma destekli tarayýcýlar message146=PDF destekli tarayýcýlar message147=SMTP Hata kodlarý message148=Ülkeler message149=Postalar message150=Boyut message151=Ýlk message152=Son message153=Exclude filter message154=Burada görüntülenen kodlar ziyaretçiler tarafýndan görüntülenmeyen hit veya trafik yarattýðýndan diðer grafiklere dahil edilmemiþtir. message155=Cluster message156=Burada görülen robotlar, ziyaretçiler tarafýndan görüntülenmeyen hit veya trafik yarattýðýndan diðer grafiklere dahil edilmemiþtir. message157=+ iþaretinden sonraki numaralar "robots.txt" dosyasýndaki baþarýlý hitlerdir. message158=Burada görülen solucanlar, ziyaretçiler tarafýndan görüntülenmeyen hit veya trafik yarattýðýndan diðer grafiklere dahil edilmemiþtir. message159=Görüntülenmeyen trafik robotlar, solucanlar ve özel HTTP statüsü içeren yanýtlardýr. message160=Görüntülenen trafik message161=Görüntülenmeyen trafik message162=Aylýk geçmiþ message163=Solucanlar message164=farklý solucan message165=Baþarýyla gönderilen postalar message166=Gönderilemeyen/reddedilen postalar message167=Duyarlý hedef message168=Javascript kapalý message169=Hazýrlayan message170=eklentiler message171=Bölgeler message172=Þehirler lang/awstats-gl.txt000064400000013320152532065620010321 0ustar00# Galician message file by Ignacio Agulló (agullo@ati.es) # $Revision: 1.6 $ - $Date: 2005/01/17 21:34:11 $ message0=Descoñecido message1=Descoñecido (IP non resolto) message2=Outros message3=Ver detalles message4=Día message5=Mes message6=Ano message7=Estatísticas de message8=Primeira visita message9=última visita message10=Número de visitas message11=Visitantes distintos message12=Visita message13=palabras clave distintas message14=Procura message15=Porcentaxe message16=Tráfico message17=Dominios/Países message18=Visitantes message19=Páxinas/URLs message20=Horas message21=Navegadores message22=Erros message23=Enlaces message24=Nunca actualizado message25=Visitas por dominios/países message26=máquinas message27=páxinas message28=distintas páxinas/urls message29=Vistas message30=Outras palabras message31=Páxinas non atopadas message32=Códigos de status HTTP message33=Versións de Netscape Navigator message34=Versións de MS Internet Explorer message35=última actualización message36=Procedencia das conexións ó sitio message37=Orixe message38=Enderezo directo/Favoritos message39=Orixe descoñecida message40=Enlaces dende procuradores de Internet message41=Enlaces dende páxinas externas (outros sitios web exceptuando procuradores) message42=Enlaces dende páxinas internas (outras páxinas no mesmo sitio) message43=Frases clave usadas por procuradores message44=Palabras clave usadas polo procurador message45=Enderezo IP non resolto message46=SO descoñecido (campo do axente do usuario) message47=URLs solicitadas pero non atopadas (código HTTP 404) message48=Enderezo IP message49=Accesos erróneos message50=Navegadores descoñecidos (campo do axente do usuario) message51=robots diferentes message52=visitas/visitante message53=Visitantes Robots/Arañas message54=Analizador gratuíto de rexistros para estadísticas Web avanzadas message55=de message56=Páxinas message57=Accesos message58=Versións message59=Sistemas Operativos message60=Xan message61=Feb message62=Mar message63=Abr message64=Mai message65=Xuñ message66=Xul message67=Ago message68=Set message69=Out message70=Nov message71=Dec message72=Navegación message73=Tipo de ficheiros message74=Actualizar agora message75=Ancho de banda message76=Volver á páxina principal message77=Primeiros message78=dd mmm yyyy - HH:MM message79=Filtro message80=Lista completa message81=Máquinas message82=Coñecidos message83=Robots message84=Dom message85=Lun message86=Mar message87=Mer message88=Xov message89=Ven message90=Sab message91=Días da semana message92=Quen message93=Cando message94=Usuarios Autentificados message95=Mín message96=Media message97=Máx message98=Compresión web message99=Ancho de banda aforrado message100=Compresión message101=Resultado da compresión message102=Total message103=frases clave distintas message104=Entrada message105=Código message106=Tamaño medio message107=Grupos de noticias message108=KO message109=MO message110=GO message111=Capturador message112=Sí message113=Non message114=Infor. message115=Aceptar message116=Saída message117=Duración das visitas message118=Pechar fiestra message119=Octetos message120=Frases clave de procura message121=Palabras clave de procura message122=diferentes procuradores referintes message123=diferentes sitios referentes message124=Outras frases message125=Outros identificadores (e/ou usuarios anónimos) message126=Procuradores referentes message127=Sitios referentes message128=Resumo message129=Valor exacto non dispoñible na vista por anos message130=Matrices de valores de datos message131=Enderezo do emisor message132=Enderezo do receptor message133=Período rexistrado message134=Extra/Mercadotecnia message135=Tamaños de pantalla message136=Ataques de Vermes/Virus message137=Engadido a favoritos (estimado) message138=Días do mes message139=Miscelánea message140=Navegadores con soporte Java message141=Navegadores con soporte Macromedia Director message142=Navegadores con soporte Flash message143=Navegadores con soporte de reproductor Real audio message144=Navegadores con soporte de reproductor Quicktime audio message145=Navegadores con soporte de reproductor Windows Media audio message146=Navegadores con soporte PDF message147=Códigos de erro SMTP message148=Países message149=Correos message150=Tamaño message151=Primeiro message152=último message153=Excluir Filtro message154=Os códigos amosados aquí contan accesos ou tráfico "non visto" por visitantes, logo están aillados nesta táboa. message155=Grupo message156=Os robots amosados aquí fixeron accesos ou tráfico "non visto" polos visitantes, polo tanto non se inclúen en outras táboas. message157=Os números despois do + son accesos hachados en arquivos "robots.txt". message158=Os gusanos amosados aquí fixeron accesos ou tráfico "non visto" polos visitantes, polo tanto non se inclúen en outras táboas. message159=O tráfico non visto é tráfico xerado por robots, gusanos ou respostas con códigos especiais de estado de HTTP. message160=Tráfico visto message161=Tráfico non visto message162=Historial mensual message163=Gusanos message164=gusanos distintos message165=Mensaxes enviadas con éxito message166=Mensaxes fallidas/rexeitadas message167=obxectivos sensibles message168=Javascript deshabilitado