forked from ls0f/phone
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget_phone_info.py
45 lines (38 loc) · 1.29 KB
/
get_phone_info.py
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
#coding:utf-8
import struct
PHONE_DAT = "phone.dat"
def getHumanCartType(cartType):
if cartType == 1:
return "移动"
elif cartType ==2:
return "联通"
else:
return "电信"
def getPhoneInfo(phone):
phone = int(str(phone)[0:7] )
with open(PHONE_DAT) as f:
content = f.read()
headFmt = "!4si"
version,firstRecordOffset = struct.unpack(headFmt,content[:struct.calcsize(headFmt)])
# print version,firstRecordOffset
recordFmt = "!iiB"
singelRecordLength = struct.calcsize(recordFmt)
recordNum = ( len(content) - firstRecordOffset) / singelRecordLength
l = 0
r = recordNum
while l<=r:
m = (l+r)/2
currentOffset = firstRecordOffset+m*singelRecordLength
currentPhone,recordOffset,cartType = struct.unpack(recordFmt,content[ currentOffset:currentOffset+singelRecordLength ])
if currentPhone > phone:
r = m -1
elif currentPhone < phone:
l = m + 1
else:
start = recordOffset + struct.calcsize(headFmt)
end = start + content[start:].find('\0')
return "%s|%s"%(content[start:end],getHumanCartType(cartType))
return None
if __name__ == "__main__":
for i in range(1890000,1890100):
print i,getPhoneInfo(i)