#!/usr/bin/perl # Squid の url_rewrite_program によって呼び出される。 # アクセス禁止であれば、違うページに飛ばす。 # Kids goo の判定用ページ $kg_query = "http://kids.goo.ne.jp/tool/kgbody.php?TP=" ; $kg_referer = "http://kids.goo.ne.jp/tool/kgbody.php" ; $kg_redirect = "http://localhost/error.php?url=" ; $kg_timeout = 3 ; # schemeの白黒判定用の正規表現群 %scheme_regexp = ( qr/^https$/i => 1 ) ; # pathの白黒判定用の正規表現群 %path_regexp = ( qr/\.(gif|png|jpg|jpeg|css)$/i => 1 ) ; # ホスト部分の白黒判定用の正規表現群 %host_regexp = ( qr/^localhost/ => 1 , qr/^192\.168\./ => 1 , qr/\.ac\.jp$/ => 1 , qr/\.ed\.jp$/ => 1 , # qr/(kids|wii)\.goo\.ne\.jp$/ => 1 , qr/^(www|kids)\.yahoo\.(co\.jp|com)$/ => 1 , qr/\.nhk\.(co|or)\.jp$/ => 1 , qr/\.(ntv|ytv|tv-asahi)\.co\.jp$/ => 1 , qr/\.nintendo\.(com|co\.jp)$/ => 1 , qr/.wii\.com$/ => 1 , qr/microsoft\.(com|co\.jp)$/ => 1 , # qr/2ch\.net$/ => 0 , ) ; use URI ; use LWP::UserAgent ; use HTTP::Request ; use HTTP::Response ; # squid から取得する情報 my $url,$from,$ident,$method ; # アクセス禁止時に飛ばすURL sub rewrite_url { return "$kg_redirect$url" ; } # Kids goo を呼び出して判定する sub check_by_kidsgoo { local( $u ) = @_ ; my $ua = new LWP::UserAgent ; $ua->agent( 'Mozilla' ) ; my $req = HTTP::Request->new( 'GET' => $kg_query.$u ) ; $req->referer( $kg_referer ) ; my $res = $ua->request( $req ) ; # print $kg_query.$u."\n" ; return $res->content !~ /^/ ; } # 指定URLの判定を行う sub check_url { my $uri = URI->new( $url ) ; my $host = $uri->host ; my $path = $uri->path ; my $scheme = $uri->scheme ; # my $query = $uri->query ; # print "check_url : $host\n" ; # 正規表現群でチェック foreach $reg ( keys %scheme_regexp ) { return $scheme_regexp{$reg} if ( $scheme =~ /$reg/g ) ; } foreach $reg ( keys %host_regexp ) { return $host_regexp{$reg} if ( $host =~ /$reg/g ) ; } foreach $reg ( keys %path_regexp ) { return $path_regexp{$reg} if ( $path =~ /$reg/g ) ; } return check_by_kidsgoo( $url ) ; } # no cache $|=1; while(<>) { # Query ($url,$from,$ident,$method) = split ; # 301:$url\n # 302:$url\n if ( ( $method eq "" || $method =~ /^GET$/i) && $url =~ /^http:/ ) { if ( check_url() ) { print "$url\n" ; } else { print rewrite_url()."\n" ; } } else { print "$url\n" ; } }