package Get; use base Bbs; use strict; sub datetime {use POSIX qw(strftime); my $t=time; my $wdays=('日','月','火','水','木','金','土')[(localtime $t)[6]]; my $str=$_[1] || $_[0]->conf('date_time_format') || '%Y/%m/%d (%v) %H:%M'; $str =~ s/\%v/$wdays/g; strftime($str, localtime $t);} sub id { require Digest::MD5; my($md5,@t)=(new Digest::MD5,localtime time); $md5->reset(); $md5->add(Digest::MD5::md5_hex($ENV{'REMOTE_ADDR'}),$_[0]->from('bbs'),$t[3],$t[4],$t[5],(stat $0)[9]); substr $md5->b64digest(), -11; } sub cap {my($p,$n); my $cap_file=$_[0]->path('caps') . $_[0]->file('caps'); $p = substr ${$_[1]}, index( ${$_[1]}, '#' ) + 1; open(FH_R, "<$cap_file") || return; while(){ /^(?:.*?)<>(.*?)<>(.*?)<>.*$/; $n = $1, last if $p eq $2; } close FH_R; $n;} sub trip {my($k,$s); $k = substr( ${$_[1]}, index( ${$_[1]}, '#' ) + 1 ); $s = substr( substr($k,0,8).'H.', 1, 2 ); $s =~ s/[^\.-z]/\./go; $s =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/; substr crypt($k, $s), -10;} sub host {my($host1,$host2,$use_proxy) = ($ENV{'REMOTE_ADDR'},undef,undef); $host1 = gethostbyaddr(pack('c4',split(/\./, $host1)),2) || $host1 if $host1 =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; $host2 = $ENV{'HTTP_VIA'} if $ENV{'HTTP_VIA'} =~ s/.*\s(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/; $host2 = $ENV{'HTTP_X_FORWARDED_FOR'} if $ENV{'HTTP_X_FORWARDED_FOR'} =~ s/^(\d+)\.(\d+)\.(\d+)\.(\d+)(\D*).*/$1.$2.$3.$4/; $host2 = $ENV{'HTTP_FORWARDED'} if $ENV{'HTTP_FORWARDED'} =~ s/.*\s(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/; $host2 = gethostbyaddr(pack('c4',split(/\./, $host2)),2) if defined $host2; $host1 .= "[$host2]" if defined $host2; $use_proxy = 1 if $host2 || $host1 =~ /proxy/i && $host2 eq '' || $ENV{'HTTP_USER_AGENT'} =~ /ANONYMIZER/i; wantarray ? ($host1,$use_proxy) : $host1;} sub spid { require Digest::MD5; my($md5,@t)=(new Digest::MD5,localtime time); $md5->reset(); $md5->add(Digest::MD5::md5_hex($ENV{'REMOTE_ADDR'}),$_[0]->from('bbs'),$t[3],$t[4],$t[5],(stat $0)[9]); $md5->b64digest(); # my $addr = gethostbyaddr(pack('c4',split(/\./,$ENV{'REMOTE_ADDR'})),2); # my $s = substr substr($addr,0,8).'.H', 1, 2; # $s =~ s/[^\.-z]/\./go; # $s =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/; # substr crypt($addr, $s), -8; } 1; __END__