前段时间,为了测试做的网站的稳定性和安全性。简单的写了一个灌水的程序。建议结合Fiddler使用。

Fiddler下载地址:

http://dlsw.baidu.com/sw-search-sp/soft/47/10963/fiddler4setup.1415771658.exe

Fiddler使用说明:

1:正确安装之后,windows8以上系统会出现弹窗,请无视。


2:Fiddler介绍



3:使用说明,raw就是报头,可以直接被服务器端接收,通过复制之后构造新的raw,便可以构造新的http请求



4:构造新的http请求



php代码


具体的使用以及问题,请看注释。不再赘述,有些需要登陆才能发送消息,可能会无法使用。

<?php
header("Content-type:text/html;charset=utf-8");
include  'water.class.php';
//设置需要传递的cookie值
$cookie = array(
	'thinkphp_show_page_trace' => '0|0',
	'PHPSESSID' => 'oq7o6a9hkaj6upoqhkm34lu5k5',
	);
//使用的方式
$method ='post';
//灌水的内容,注意和表单内容对应
$data = array('id'=>'1','content' =>'content');
$data = http_build_query($data);
//接收数据的url
$url = '';
//执行的次数
$executions = 1;
//合并参数
$conf = array(
	'cookie' => $cookie,
	'method' => $method,
	'data' => $data,
	'url' => $url,
	'executions' => $executions
	);
$robot = new water($conf);
?>
<span style="font-family: Arial, Helvetica, sans-serif;"><?php</span>
header("Content-type:text/html;charset=utf-8");

/**
* @param  请求相关参数
* @author gglinux
* @date   2014-11-9 
* @contact gglinux@163.com
*/
class water 
{
	public $executions = 100;				//执行的次数,int 默认为100次
	public $method = 'post';				//使用post/get方法类型,默认为post
	public $data = '';						//传递的数据,默认为空
	public $url = '';						//接收的url,默认为空
	public $http;							//构造的报头
	public $cookie = array();				//设置的cookie数组,cookie名和cookie的值


	/**
	 * 设置参数
	 */
	public function water($params)
	{
		foreach ($params as $key => $value) {
			$this->$key = $value;
		}
		$this->http_header();
		$this->execute();
	}

	/**
	 * 构造发送的HTTP报头
	 */
	public function http_header($value='')
	{
		$this->http = array(
			'method' => $this->method, 
			'header' => '',
			'content' => $this->data
			);
		$this->http['header'] = "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\nContent-Length:".strlen($this->data)."\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36\r\nCookie: ";
		foreach ($this->cookie as $key => $value) {
			$this->http['header']=$this->http['header'].$key.'='.$value.'; ';
		}
		//去掉最后一个分号和空格
		$this->http['header'] = substr($this->http['header'],0,-2);
		$this->http['header'] =$this->http['header']."\r\n";
		//去掉post中url的最后一个‘/’的部分
		 if(strripos ( $this->url,  '/' )){
		 	$referer = substr($this->url, 0,strripos($this->url, '/'));
		 }else{
		 	$referer=$this->url;
		 }
		$this->http['header'] = $this->http['header'].'Referer:'.$referer."\r\n";
	}
	/**
	 * 开始执行灌水
	 */
	public function execute($value='')
	{
		for ($i=0; $i < $this->executions; $i++) {
			$context = @stream_context_create($this->http);
			$html = @file_get_contents($this->url,false,$context);
			var_dump($html);
		}
		
	}
}
?>


 
 
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐