注意:本文没有恶意行为,只是技术探讨,不要封我得号哦,转载请注明出处,谢谢。

http://hi.baidu.com/popey/blog/item/c2febd51d7ccee1e377abea5.html

 今天发现了百度的个人宠物有了一个新得功能,就是说喂食以后可以升级等级,这个功能在追求等级得年代还是有吸引力的,每点击一次,宠物就可以升级3个点,也就说你点击一次就会发送一次数据给服务器,这样就可以进行升级。但是现在有一个问题:

我们看数据包:

当我们点击宠物,喂食得时候,浏览器就会发送一个这样的数据包:

Http: Request, GET /pet/3909c1d4c8cbbadfbadfdb00/eat

服务器返回

HTTP: Response, HTTP/1.1, Status Code = 200

然后我们响应一次,说明接收

TCP: Flags=....A..., SrcPort=3846, DstPort=HTTP(80), Len=0, Seq=2520224419, Ack=1436688214, Win=65101 (scale factor not found)

这就完成一个喂食全过程

通过多次测试,可以确定/pet/3909c1d4c8cbbadfbadfdb00/ 这个是我的宠物编号 eat 当然是喂食得动作了

通过请求完成喂食过程,这里面有一个问题,如果我做一个循环呢

       伪代码如下

       while(true)

{

    send("喂食得数据包即 request pet/xxxxxxxxxx/eat ");

     //下面要有一个响应函数

     send("响应数据");//没有响应得话,服务器不给我们得宠物升级~~~

}

这样得话,我得宠物不就无敌了吗?

当然,对于数据类得网络程序,总是要有一个限制得,编程也要求有。当然百度也是考虑到了。

宠物每天进食有一个上限,通过时间消耗上限,然后才能升级,这个限制可以保证你不能一天中连续的升级。

同时测试发现,当宠物得饥饿值已经满得话,那么你点击喂食,浏览器是不发送数据的,也就是说在flash得设计中就已经考虑到这个问题了,在登陆得时候,我们会读取服务器上宠物得饥饿值,当饥饿值到达上限得时候,我们点喂食得按钮,是无效得的,它是不会发送数据包的。

但是如果我们不通过flash来发送数据,而是我们自己构造数据呢?

那会发生什么事情呢?

会是阻止? 继续升级 ? 还是一个数据溢出呢?

到这里吧,不测试了。

... ...

其他升级方法就是时间了,这个和服务器有关了,应该是没有办法得,可惜得是施放魔法不消耗体力值,嘿嘿,不然,这个循环可就可以实现无限升级了。