errorやwarningが無いかと、apacheのログを見ていて気が付いた。
MicrosoftのBotが入ってきている。
序でに、どんなipが多いか調べてみた。(ま、クローラだろうけど)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/opt/local/bin/perl use Socket; use utf8; use Encode 'encode'; my $logFile = "/なんたらかたら/access_log"; open ( LOGFILE, '< ' . $logFile ) or die qq/Can't open file "$logFile" : $!/; my $ip = {}; while ( my $line = <LOGFILE> ) { if ( $line =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,4})/m ) { if ( $1 !~ /^192.168/m ) { $ip{$1}++; } } } for my $key ( sort { $ip{$a} <=> $ip{$b} || $a cmp $b } keys %ip ) { if ( $ip{$key} > 50 ) { printf ( "%15s : %4d (%s)\n", $key, $ip{$key}, GetHostByAddr ( $key ) ); } } sub GetHostByAddr { my($ip) = @_; my @addr = split(/\./, $ip); my $packed_ip = pack ( "C4", $addr[0], $addr[1], $addr[2], $addr[3] ); my($name) = gethostbyaddr ( $packed_ip, AF_INET ); return $name; } |
比較的多い(50以上のアクセスとか無茶苦茶多い)ところをホスト名と件数を表示する。
ここでGetHostByAddrの引数がよく判らなかった。
stringみたいなので”192.168.0.1″とかで良いんじゃね?……が違う。幾つか見て回ったところでは、「それでいい」となっていたのだが。
ここでpackとか出てくるんだけど、入力するは4bytesの16真数みたいだね。因みにAF_INETはuse Socket内で定義されていると思われる。値は2だそうだ。(ここに2を直接入れているサイトもあった)
その前にinet_aton()なんてのがあたりかと見当違いをしていたのは秘密だ。
そこで、やっぱり多かったのはGoogle。これはSit Kitとか入れてるし、Botも「どうぞお入りください」にしているから問題ない。
問題はMSN系のBotである。
robot.txtで
|
1 2 3 4 |
User-agent: bingbot Disallow: / User-agent: msnbot Disallow: / |
と弾いているのにも関わらず侵入してくる。roboto.txt無視するなら、こちらからも排除するしかない。
なので、
.htaccessに
|
1 2 3 4 5 |
order allow,deny allow from all deny from 40.77.139.0/24 deny from 40.77.167.0/24 |
と、「入っちゃいやん」にしておいた。今後とも見つけたら弾いてやる。もしもこの範囲に入っちゃったらゴメンなさい。msn.comって幾つものadressからクロールするから纏めて外したんよ。(ま、その人コレ見られんがな〜)
それと、ホスト名が引けないipも幾つかあった。これも排除の対象とする。
私のサイトは、見てくれる人が居なくなってもいいんだ(涙)
検索エンジンはGoogle先生だけでええねん。


