PHP文件流处理日志IP条数,从Apache访问日志统计IP访问数,发现采集者屏蔽

在Drupal网站中使用PHP程序来屏蔽采集者效果还不错,可以自己任意设定判断标准。不过我们以前的MediaWiki平台上的网站还没有使用这套PHP程序来屏蔽,最近发现采集又太多了,搞得服务器负载太高,老是从Apache日志人工排查太麻烦、太慢(以前的办法见博文《Apache中设置屏蔽IP地址和URL网址来禁止采集》),今天花一些时间编写了一个小程序来统计日志中的IP访问数,程序很简短,如下:

/*

* 统计Apache日志文件的IP,找出访问最多的IP地址,方便发现采集者

* James Qi 2013-11-8

*/

//0、设置

$file=$argv[1];//文件名称

$number=50;//需要获取IP的数量

//1、读取

$fp=fopen($file,"r");//以只读的方式打开文件

$ip_array=array();//IP数组赋空值

while(!(feof($fp))) {//循环读取文件中所有行

$line=fgets($fp);//读取文件的一行

if (strpos($line,'HTTP/1.1" 200 ')!=false) {//只寻找访问成功的,排除已经被屏蔽的

$ip=strtok($line,' ');//取前面的IP地址

$ip_array[]=$ip;//添加到数组中

}

}

//2、统计

$count_array=array_count_values($ip_array);//统计生成带计数的新数组

asort ($count_array);//带指针排序

$output_array=array_slice($count_array,-$number);//取后面的设置数量的IP

//3、输出

foreach ($output_array as $output_ip=>$output_count) {//循环遍历输出数组

$output_host=gethostbyaddr($output_ip);//获取host name

$output_line="$output_ip : $output_count - $output_host\n";//组合输出行

print $output_line;//打印输出行

}

$output_line="output_ip : output_count - output_host\n";//组成标题行

print $output_line;//打印标题行

//4、结束

?>

输出如下:

122.146.207.159 : 27 - 122.146.207.159

115.196.76.138 : 28 - 115.196.76.138

121.237.123.91 : 29 - 91.123.237.121.broad.nj.js.dynamic.163data.com.cn

14.114.33.12 : 30 - 14.114.33.12

157.55.33.31 : 30 - msnbot-157-55-33-31.search.msn.com

123.202.147.103 : 32 - 123202147103.ctinets.com

157.56.93.150 : 33 - msnbot-157-56-93-150.search.msn.com

180.158.138.101 : 33 - 180.158.138.101

67.128.22.254 : 34 - 67.128.22.254

112.230.96.7 : 34 - 112.230.96.7

1.36.80.43 : 34 - 1-36-80-043.static.netvigator.com

203.218.185.20 : 36 - pcd395020.netvigator.com

61.15.142.137 : 36 - cm61-15-142-137.hkcable.com.hk

173.243.112.214 : 46 - ded4u.com

183.159.73.30 : 52 - 183.159.73.30

122.238.225.66 : 59 - 122.238.225.66

41.190.2.41 : 73 - 41.190.2.41

157.56.93.42 : 120 - msnbot-157-56-93-42.search.msn.com

157.55.33.111 : 128 - msnbot-157-55-33-111.search.msn.com

157.55.34.25 : 221 - msnbot-157-55-34-25.search.msn.com

91.237.52.132 : 3333 - 91-237-52-132.greendata.pl

output_ip : output_count - output_host

如果host name不是搜索引擎,就可以屏蔽。

可以专门建个deny.conf,内容为:

Order allow,deny

Deny from 113.97.135.10 118.249.151.175 180.140.161.253

Deny from 185.24.233.4182.149.62.217 58.60.196.51 183.0.85.6

Allow from all

然后把这个文件包含到需要的虚拟主机设置中:

Include conf/deny.conf

再重启Apache就可以生效了。

这个程序以后还可以设法做得更完善、更智能一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值