导航
导航
文章目录
  1. 手机号
  2. 归属地
  3. 生成vCard文件
  4. 导入手机号
  5. 支付宝查看头像
  6. trouble shooting

Python脚本寻人

校庆返校食堂蹭饭,求助同学帮忙刷饭卡转账,之后保持联系。
在只有一张支付宝收款的截图的情况下,找到微信。

截图信息有:
1、手机号首三位:123
2、手机号末四位:4567
3、支付宝头像

技术分享……

手机号

循环频出所有可能手机号,共10000种可能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
f = file("~/phones","a+")

for i in range(1, 10000):
tmp = i
digits = 0
prefix = ''

while tmp != 0:
tmp /= 10
digits += 1
while digits < 4:
prefix += '0'
digits += 1

phone = '123' + prefix + str(i) + '4567'
f.write(phone + '\n')

f.close()

归属地

根据手机号,调用在线接口,取得归属地:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import urllib2
import sys
# import time
import xml.etree.ElementTree as ET

# encoding
reload(sys)
sys.setdefaultencoding('utf-8')

resfile = file("~/phones.txt", "a+")
failfile = file("~/fails.txt", "a+")

for i in range(1, 10000):
prefix = ''
tmp = i
digits = 0

while tmp != 0:
tmp /= 10
digits += 1
while digits < 4:
digits += 1
prefix += '0'

phone = '123' + prefix + str(i) + '4567'

url = 'http://life.tenpay.com/cgi-bin/mobile/MobileQueryAttribution.cgi?chgmobile=' + phone
try:
xmlres = urllib2.urlopen(url).read()
xmlres = xmlres.decode('gb2312').encode('utf-8')
xmlres = xmlres.replace('gb2312', 'utf-8')
except:
print('Fail: ' + phone)
failfile.write(phone + '\n')
continue

root = ET.fromstring(xmlres)
province = root.find('province')
city = root.find('city')

resfile.write(phone + '\t' + province.text + '\t' + city.text + '\n')
print(phone + '\t' + province.text + '\t' + city.text)
# time.sleep(2)
resfile.close()
failfile.close()

结果:

手机号
12320004567 北京 北京
12320014567 北京 北京
12320024567 北京 北京
12320034567 北京 北京
12320044567 北京 北京
12320054567 北京 北京
12320064567 北京 北京
12320074567 北京 北京
12320084567 北京 北京
12320094567 北京 北京
12320104567 北京 北京
12320114567 北京 北京
12320124567 北京 北京
12320134567 北京 北京
12320144567 北京 北京
12320154567 北京 北京
12320164567 北京 北京
12320174567 北京 北京
12320184567 北京 北京
12320194567 北京 北京
12320204567 北京 北京
12320214567 北京 北京
12320224567 北京 北京
12320234567 北京 北京
12320244567 北京 北京
12320254567 北京 北京
12320264567 北京 北京
12320274567 北京 北京
12320284567 北京 北京
12320294567 北京 北京
12320304567 北京 北京
12320314567 北京 北京
12320324567 北京 北京
12320334567 北京 北京
12320344567 北京 北京
12320354567 北京 北京
12320364567 北京 北京
12320374567 北京 北京
12320384567 北京 北京
12320394567 北京 北京
12320404567 北京 北京
12320414567 北京 北京
12320424567 北京 北京
12320434567 北京 北京
12320444567 北京 北京
12320454567 北京 北京
12320464567 北京 北京
12320474567 北京 北京
12320484567 北京 北京
12320494567 北京 北京
12321004567 北京 北京
12321014567 北京 北京
12321024567 北京 北京
12321034567 北京 北京
12321044567 北京 北京
12321054567 北京 北京
12321064567 北京 北京
12321074567 北京 北京
12321084567 北京 北京
12321094567 北京 北京
12321104567 北京 北京
12321114567 北京 北京
12321124567 北京 北京
12321134567 北京 北京
12321144567 北京 北京
12321154567 北京 北京
12321164567 北京 北京
12321174567 北京 北京
12321184567 北京 北京
12321194567 北京 北京
12321204567 北京 北京
12321214567 北京 北京
12321224567 北京 北京
12321234567 北京 北京
12321244567 北京 北京
12321254567 北京 北京
12321264567 北京 北京
12321274567 北京 北京
12321284567 北京 北京
12321294567 北京 北京
12321304567 北京 北京
12321234567 北京 北京
12321324567 北京 北京
12321334567 北京 北京
12321344567 北京 北京
12321354567 北京 北京
12321364567 北京 北京
12321374567 北京 北京
12321384567 北京 北京
12321394567 北京 北京
12321404567 北京 北京
12321414567 北京 北京
12321424567 北京 北京
12321434567 北京 北京
12321454567 北京 北京
12321464567 北京 北京
12321474567 北京 北京
12321484567 北京 北京
12321494567 北京 北京
12321504567 北京 北京
12321514567 北京 北京
12321524567 北京 北京
12321534567 北京 北京
12321544567 北京 北京
12321554567 北京 北京
12321564567 北京 北京
12321574567 北京 北京
12321584567 北京 北京
12321594567 北京 北京
12321604567 北京 北京
12321614567 北京 北京
12321624567 北京 北京
12321634567 北京 北京
12321644567 北京 北京
12321654567 北京 北京
12321664567 北京 北京
12321674567 北京 北京
12321684567 北京 北京
12321694567 北京 北京
12321704567 北京 北京
12321714567 北京 北京
12321724567 北京 北京
12321734567 北京 北京
12321754567 北京 北京
12321764567 北京 北京
12321774567 北京 北京
12321784567 北京 北京
12321794567 北京 北京
12321804567 北京 北京
12321814567 北京 北京
12321824567 北京 北京
12321834567 北京 北京
12321844567 北京 北京
12321854567 北京 北京
12321864567 北京 北京
12321874567 北京 北京
12321884567 北京 北京
12321894567 北京 北京
12321904567 北京 北京
12321914567 北京 北京
12321924567 北京 北京
12321934567 北京 北京
12321944567 北京 北京
12321954567 北京 北京
12321964567 北京 北京
12321974567 北京 北京
12321984567 北京 北京
12321994567 北京 北京
12324704567 北京 北京
12324714567 北京 北京
12324724567 北京 北京
12324734567 北京 北京
12324744567 北京 北京
12324754567 北京 北京
12324764567 北京 北京
12324774567 北京 北京
12324784567 北京 北京
12324794567 北京 北京
12326504567 北京 北京
12326514567 北京 北京
12326524567 北京 北京
12326534567 北京 北京
12326554567 北京 北京
12326564567 北京 北京
12326574567 北京 北京
12326584567 北京 北京
12326594567 北京 北京
12326604567 北京 北京
12326614567 北京 北京
12326624567 北京 北京
12326634567 北京 北京
12326644567 北京 北京
12326654567 北京 北京
12326664567 北京 北京
12326674567 北京 北京
12326684567 北京 北京
12326694567 北京 北京
12326704567 北京 北京
12326714567 北京 北京
12326724567 北京 北京
12326734567 北京 北京
12326754567 北京 北京
12326764567 北京 北京
12326774567 北京 北京
12326784567 北京 北京
12326794567 北京 北京
12326804567 北京 北京
12326814567 北京 北京
12326824567 北京 北京
12326834567 北京 北京
12326854567 北京 北京
12326864567 北京 北京
12326874567 北京 北京
12326884567 北京 北京
12326894567 北京 北京
12326904567 北京 北京
12326914567 北京 北京
12326924567 北京 北京
12326934567 北京 北京
12326954567 北京 北京
12326964567 北京 北京
12326974567 北京 北京
12326984567 北京 北京
12326994567 北京 北京
12341004567 北京 北京
12341014567 北京 北京
12341024567 北京 北京
12341034567 北京 北京
12341044567 北京 北京
12341054567 北京 北京
12341064567 北京 北京
12341074567 北京 北京
12341084567 北京 北京
12341094567 北京 北京
12341104567 北京 北京
12341114567 北京 北京
12341124567 北京 北京
12341134567 北京 北京
12341144567 北京 北京
12341154567 北京 北京
12341164567 北京 北京
12341174567 北京 北京
12341184567 北京 北京
12341194567 北京 北京
12341204567 北京 北京
12341214567 北京 北京
12341224567 北京 北京
12341234567 北京 北京
12341244567 北京 北京
12341254567 北京 北京
12341264567 北京 北京
12341274567 北京 北京
12341284567 北京 北京
12341294567 北京 北京
12341304567 北京 北京
12341234567 北京 北京
12341324567 北京 北京
12341334567 北京 北京
12341344567 北京 北京
12341354567 北京 北京
12341364567 北京 北京
12341374567 北京 北京
12341384567 北京 北京
12341394567 北京 北京
12341404567 北京 北京
12341414567 北京 北京
12341424567 北京 北京
12341434567 北京 北京
12341444567 北京 北京
12341454567 北京 北京
12341464567 北京 北京
12341474567 北京 北京
12341484567 北京 北京
12341494567 北京 北京
12346004567 北京 北京
12346014567 北京 北京
12346024567 北京 北京
12346034567 北京 北京
12346044567 北京 北京
12346054567 北京 北京
12346064567 北京 北京
12346074567 北京 北京
12346084567 北京 北京
12346094567 北京 北京
12346104567 北京 北京
12346114567 北京 北京
12346124567 北京 北京
12346134567 北京 北京
12346144567 北京 北京
12346154567 北京 北京
12346164567 北京 北京
12346174567 北京 北京
12346184567 北京 北京
12346194567 北京 北京
12346204567 北京 北京
12346214567 北京 北京
12346224567 北京 北京
12346234567 北京 北京
12346244567 北京 北京
12346254567 北京 北京
12346264567 北京 北京
12346274567 北京 北京
12346284567 北京 北京
12346294567 北京 北京
12346304567 北京 北京
12346314567 北京 北京
12346324567 北京 北京
12346334567 北京 北京
12346344567 北京 北京
12346354567 北京 北京
12346364567 北京 北京
12346374567 北京 北京
12346384567 北京 北京
12346394567 北京 北京
12346404567 北京 北京
12346414567 北京 北京
12346424567 北京 北京
12346434567 北京 北京
12346444567 北京 北京
12346454567 北京 北京
12346464567 北京 北京
12346474567 北京 北京
12346484567 北京 北京
12346494567 北京 北京
12346504567 北京 北京
12346514567 北京 北京
12346524567 北京 北京
12346534567 北京 北京
12346544567 北京 北京
12346554567 北京 北京
12346564567 北京 北京
12346574567 北京 北京
12346584567 北京 北京
12346594567 北京 北京
12346604567 北京 北京
12346614567 北京 北京
12346624567 北京 北京
12346634567 北京 北京
12346644567 北京 北京
12346654567 北京 北京
12346664567 北京 北京
12346674567 北京 北京
12346684567 北京 北京
12346694567 北京 北京
12346704567 北京 北京
12346714567 北京 北京
12346724567 北京 北京
12346734567 北京 北京
12346744567 北京 北京
12346754567 北京 北京
12346764567 北京 北京
12346774567 北京 北京
12346784567 北京 北京
12346794567 北京 北京
12346804567 北京 北京
12346814567 北京 北京
12346824567 北京 北京
12346834567 北京 北京
12346844567 北京 北京
12346854567 北京 北京
12346864567 北京 北京
12346874567 北京 北京
12346884567 北京 北京
12346894567 北京 北京
12346904567 北京 北京
12346914567 北京 北京
12346924567 北京 北京
12346934567 北京 北京
12346944567 北京 北京
12346954567 北京 北京
12346964567 北京 北京
12346974567 北京 北京
12346984567 北京 北京
12346994567 北京 北京
12361004567 北京 北京
12361014567 北京 北京
12361024567 北京 北京
12361034567 北京 北京
12361044567 北京 北京
12361054567 北京 北京
12361064567 北京 北京
12361074567 北京 北京
12361084567 北京 北京
12361094567 北京 北京
12361104567 北京 北京
12361114567 北京 北京
12361124567 北京 北京
12361134567 北京 北京
12361144567 北京 北京
12361154567 北京 北京
12361164567 北京 北京
12361174567 北京 北京
12361184567 北京 北京
12361194567 北京 北京
12361204567 北京 北京
12361214567 北京 北京
12361224567 北京 北京
12361234567 北京 北京
12361244567 北京 北京
12361254567 北京 北京
12361264567 北京 北京
12361274567 北京 北京
12361284567 北京 北京
12361294567 北京 北京
12361304567 北京 北京
12361234567 北京 北京
12361324567 北京 北京
12361334567 北京 北京
12361344567 北京 北京
12361354567 北京 北京
12361364567 北京 北京
12361374567 北京 北京
12361384567 北京 北京
12361394567 北京 北京
12361404567 北京 北京
12361414567 北京 北京
12361424567 北京 北京
12361434567 北京 北京
12361444567 北京 北京
12361454567 北京 北京
12361464567 北京 北京
12361474567 北京 北京
12361484567 北京 北京
12361494567 北京 北京
12361504567 北京 北京
12361514567 北京 北京
12361524567 北京 北京
12361534567 北京 北京
12361544567 北京 北京
12361554567 北京 北京
12361564567 北京 北京
12361574567 北京 北京
12361584567 北京 北京
12361594567 北京 北京
12361604567 北京 北京
12361614567 北京 北京
12361624567 北京 北京
12361634567 北京 北京
12361644567 北京 北京
12361654567 北京 北京
12361664567 北京 北京
12361674567 北京 北京
12361684567 北京 北京
12361694567 北京 北京
12361704567 北京 北京
12361714567 北京 北京
12361724567 北京 北京
12361734567 北京 北京
12361744567 北京 北京
12361754567 北京 北京
12361764567 北京 北京
12361774567 北京 北京
12361784567 北京 北京
12361794567 北京 北京
12361804567 北京 北京
12361814567 北京 北京
12361824567 北京 北京
12361834567 北京 北京
12361844567 北京 北京
12361854567 北京 北京
12361864567 北京 北京
12361874567 北京 北京
12361884567 北京 北京
12361894567 北京 北京
12361904567 北京 北京
12361914567 北京 北京
12361924567 北京 北京
12361934567 北京 北京
12361944567 北京 北京
12361954567 北京 北京
12361964567 北京 北京
12361974567 北京 北京
12361984567 北京 北京
12361994567 北京 北京
12364204567 北京 北京
12364214567 北京 北京
12364224567 北京 北京
12364234567 北京 北京
12364244567 北京 北京
12364254567 北京 北京
12364264567 北京 北京
12364274567 北京 北京
12364284567 北京 北京
12364294567 北京 北京
12367304567 北京 北京
12367314567 北京 北京
12367324567 北京 北京
12367334567 北京 北京
12367344567 北京 北京
12367354567 北京 北京
12367364567 北京 北京
12367374567 北京 北京
12367384567 北京 北京
12367394567 北京 北京
12367504567 北京 北京
12367514567 北京 北京
12367524567 北京 北京
12367534567 北京 北京
12367544567 北京 北京
12367554567 北京 北京
12367564567 北京 北京
12367574567 北京 北京
12367584567 北京 北京
12367594567 北京 北京

本意是根据归属地简单过滤一下,然后逐个在支付宝上搜索,但是效果不好……

生成vCard文件

iCloud导出通讯录vCard文件,根据格式,生成所有号码的通讯录记录,名称即为手机号,方便管理

1
2
3
4
5
6
7
8
f1 = file("~/test.vcard", "a+")
f = open("~/phones","r")
lines = f.readlines()
for line in lines:
line=line.strip('\n')
f1.write("BEGIN:VCARD\nVERSION:3.0\nN:#" + line + ";;;;\nFN:#" + line + "\nTEL;TYPE=CELL;TYPE=pref;TYPE=VOICE:" + line + "\nPRODID:-//Apple Inc.//iCloud Web Address Book XXXXX//EN\nREV:2016-07-05T00:00:00Z\nEND:VCARD\n")
f1.close()
f.close()

导入手机号

登录iCloud导入vCard文件,同步到手机通讯录

支付宝查看头像

开启支付宝访问通讯录,查看所有新导入的手机号的支付宝账号头像,与转账截图比对。
加支付宝好友,加微信,删除之前导入的vCard通讯录,结束……

trouble shooting

1、ValueError: multi-byte encodings are not supported
解:
解析xml报错,原因是xml文档为gb2312编码,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="gb2312" ?>

<root>
<ENV_CgiName>/cgi-bin/mobile/MobileQueryAttribution.cgi</ENV_CgiName>
<ENV_ClientAgent>
XXXX
</ENV_ClientAgent>
<ENV_ClientIp>xxx.xxx.xx.xx</ENV_ClientIp>
<ENV_QueryString>chgmobile=12300011234</ENV_QueryString>
<ENV_RequestMethod>GET</ENV_RequestMethod>
<ENV_referer/>
<chgmobile>12300011234</chgmobile>
<city>太原</city>
<province>山西</province>
<retcode>0</retcode>
<retmsg>OK</retmsg>
<supplier>XX</supplier>
<tid/>
</root>

解决办法为先用gb2312解码,再用utf-8编码,同时xml中的encoding由gb2312替换为utf-8:

1
2
xmlres = xmlres.decode('gb2312').encode('utf-8')
xmlres = xmlres.replace('gb2312', 'utf-8')

2、UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position ..
解:
Python默认ascii编码,需要转换为utf-8:

1
2
3
4
import sys

reload(sys)
sys.setdefaultencoding('utf-8')