前段时间抓了一个握手包,使用网上的字典没有破解,个人猜想现在大部分人会使用自己的手机号码作为密码,但从网上找到的字典没有专门针对某个市的电话号码,就想自己制作一个。
到网上搜了一下号码归属地数据库,免费的更新时间已经过去好几年了,又不想自己花钱,发现部分网站提供了在线查询功能,且数据比较新,就想可以用穷举法得到号码归属地数据库。
因为刚开始学习python,这是第一篇学习笔记,程序还有很多不规范的地方,请看到的大神们提出改进建议。
最后结果是进行了32万次页面请求,属于我们市的号码条数1932条,生成破解字典1932万条记录,顺利找到密码。
如非特殊需要,请慎重运行程序,会对数据查询网站造成冲击,我是在晚上开机6个小时才跑完的。
import requests
import re
#电话号码列表,不多,手写
phonelist = [134,135,136,137,138,139,147,150,151,152,157,158,159,178,182,183,184,187,188,186,185,156,131,130,155,132,176,133,153,181,189,177]
dzlist = [] # 定义前7位的列表,初始值为空
for i in phonelist:
for j in range(0, 10000):
url = 'http://www.ip138.com:8080/search.asp?mobile=' + str(i) + str("%04d" % j) + '&action=mobile'
html = requests.get(url).content
html_doc = str(html, 'gb2312') #读取每个7位数的返回文本
if str('某某市') in html_doc: #如果返回文本包含某某市,则添加到列表中
dzlist = dzlist + re.findall(r'class=tdc2>(\d\d\d\d\d\d\d) <a href',html_doc)
# 下面根据列表生成字典
pjzd = open(r'd:\phone_zd.txt','a')
for m in dzlist:
for n in range(0,10000):
pjzd.write(m+"%04d" %n+'\n')
pjzd.close()