CC 主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,一般来说,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当大, 一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,看一个帖子,系统需要到数据库中判断是否有读读帖子的权限,如果有,就读出帖子里面的内容,显示出来 —— 这里至少访问了 2 次数据库,如果数据库的体积有 200MB 大小,系统很可能就要在这 200MB 大小的数据空间搜索一遍,这需要多少的 CPU 资源和时间?如果我是查找一个关键字,那么时间更加长,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
CC 就是充分利用了这个特点,模拟多个用户 (多少线程就是多少用户) 不停的进行访问 (访问那些需要大量数据操作,就是需要大量 CPU 时间的页面)。很多人会问到,为什么要使用代理呢?因为代理可以有效地隐藏自己的身份,也可以绕开所有的防火墙,因为基本上所有的防火墙都会检测并发的 TCP/IP 连接数目,超过一定数目一定频率就会被认为是 Connection-Flood。
使用代理攻击还能很好的保持连接,我们这里发送了数据,代理帮我们转发给对方服务器,我们就可以马上断开,代理还会继续保持着和对方连接 (我知道的记录是有人利用 2000 个代理产生了 35 万并发连接)。我们假设服务器 A 对 Search.asp 的处理时间需要 0.01S (多线程只是时间分割,对结论没有影响),也就是说他一秒可以保证 100 个用户的 Search 请求,服务器允许的最大连接时间为 60s,那么我们使用 CC 模拟 120 个用户并发连接,那么经过 1 分钟,服务器的被请求了 7200 次,处理了 6000 次,于是剩下了 1200 个并发连接没有被处理。有的朋友会说:丢掉连接!问题是服务器是按先来后到的顺序丢的,这 1200 个是在最后 10 秒的时候发起的,想丢还早,经过计算,服务器满负开始丢连接的时候,应该是有 7200 个并发连接存在队列,然后服务器开始 120 个 / 秒的丢连接,我们发动的连接也是 120 个 / 秒,服务器永远有处理不完的连接,服务器的 CPU 100% 并长时间保持,然后丢连接的 60 秒服务器也判断处理不过来了,新的连接也处理不了,这样服务器达到了超级繁忙状态。