Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Lucksi
GitHub Repository: Lucksi/Mr.Holmes
Path: blob/master/Core/Support/Phone/Numbers.py
1071 views
1
# ORIGINAL CREATOR: Luca Garofalo (Lucksi)
2
# AUTHOR: Luca Garofalo (Lucksi)
3
# Copyright (C) 2021-2023 Lucksi <[email protected]>
4
# License: GNU General Public License v3.0
5
6
import phonenumbers
7
import MrHolmes as holmes
8
import json
9
import urllib
10
from phonenumbers import carrier
11
from phonenumbers import geocoder
12
from phonenumbers import timezone
13
from Core.Support import Font
14
from Core.Support import Language
15
from Core.Support import Map
16
from time import sleep
17
18
filename = Language.Translation.Get_Language()
19
filename
20
21
22
class Phony:
23
24
@staticmethod
25
def Get_GeoLocation(zone, param1, param2, jsonfile, num, Type):
26
req = "https://nominatim.openstreetmap.org/search.php?q={}&format=json".format(
27
zone)
28
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
29
Language.Translation.Translate_Language(filename, "Phone", "Geo", "None").format(num))
30
sleep(2)
31
url = urllib.request.urlopen(req)
32
try:
33
Reader = url.read()
34
parser = json.loads(Reader)
35
Lat = parser[0]["lat"]
36
Lon = parser[0]["lon"]
37
data = {
38
"Geolocation": {
39
"Latitude": Lat,
40
"Longitude": Lon
41
}
42
}
43
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
44
"LATITUDE:" + Font.Color.GREEN + " {}".format(Lat))
45
sleep(2)
46
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
47
"LONGITUDE:" + Font.Color.GREEN + " {}".format(Lon))
48
sleep(2)
49
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
50
"GOOGLE MAPS LINK: https://www.google.it/maps/place/{},{}".format(Lat, Lon))
51
datafile = open(jsonfile, "a", encoding="utf-8")
52
json.dump(data, datafile,
53
ensure_ascii=False, indent=4)
54
datafile.close()
55
Map.Creation.mapPhone(jsonfile, Lat, Lon, num, Type)
56
57
except Exception as e:
58
print(Font.Color.RED + "\n[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(
59
filename, "Phone", "NoGeo", "None") + str(e))
60
pass
61
62
@staticmethod
63
def Number(num, report, code, Mode, Type, username):
64
phoneList=[]
65
print(Font.Color.GREEN +
66
"\n[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(filename, "Phone", "Scan", "None").format(num))
67
sleep(4)
68
FormattedPhoneNumber = "+" + num
69
try:
70
Phone = phonenumbers.parse(FormattedPhoneNumber, None)
71
except Exception as e:
72
inp = input(Font.Color.RED + "\n[!]" + Font.Color.WHITE +
73
Language.Translation.Translate_Language(filename, "Phone", "NotFound2", "None"))
74
holmes.Main.Menu(Mode)
75
else:
76
if not phonenumbers.is_valid_number(Phone):
77
reality = (Language.Translation.Translate_Language(
78
filename, "Phone", "NoReal", "None"))
79
else:
80
reality = Language.Translation.Translate_Language(
81
filename, "Phone", "Real", "None")
82
print(Font.Color.BLUE + "\n[I]" + Font.Color.WHITE + reality)
83
84
number = phonenumbers.format_number(
85
Phone, phonenumbers.PhoneNumberFormat.E164
86
).replace("+", "")
87
numberCode = phonenumbers.format_number(
88
Phone, phonenumbers.PhoneNumberFormat.INTERNATIONAL
89
).split(" ")[0]
90
numberNation = phonenumbers.region_code_for_country_code(
91
int(numberCode)
92
)
93
94
localNumber = phonenumbers.format_number(
95
Phone, phonenumbers.PhoneNumberFormat.E164
96
).replace(numberCode, "")
97
international = phonenumbers.format_number(
98
Phone, phonenumbers.PhoneNumberFormat.INTERNATIONAL
99
)
100
101
nation = geocoder.country_name_for_number(Phone, "en")
102
location = geocoder.description_for_number(Phone, "en")
103
carrierName = carrier.name_for_number(Phone, "en")
104
105
print(Font.Color.YELLOW + "\n[v]" + Font.Color.WHITE +
106
"INTERNATIONAL NUMBER: {}".format(international))
107
print(Font.Color.YELLOW +
108
"[v]" + Font.Color.WHITE + "LOCAL NUMBER: {}".format(localNumber))
109
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
110
"COUNTRY PREFIX: {}".format(numberCode))
111
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
112
"COUNTRY CODE: {}".format(numberNation))
113
print(Font.Color.YELLOW +
114
"[v]" + Font.Color.WHITE + "COUNTRY: {}".format(nation))
115
print(Font.Color.YELLOW +
116
"[v]" + Font.Color.WHITE + "AREA/ZONE: {}".format(location))
117
print(Font.Color.YELLOW +
118
"[v]" + Font.Color.WHITE + "CARRIER/ISP: {}".format(carrierName))
119
i = 1
120
for timezoneResult in timezone.time_zones_for_number(Phone):
121
print(Font.Color.YELLOW +
122
"[v]" + Font.Color.WHITE + "TIMEZONE N°{}: {}".format(i, timezoneResult))
123
i = i+1
124
sleep(2)
125
if location != "":
126
jsonfile = report.replace(
127
num + ".txt", "Area_GeoLocation.json")
128
if " " in location:
129
zone = location.split(" ", 1)[1]
130
else:
131
zone = location
132
print(Font.Color.YELLOW + "\n[v]" + Font.Color.WHITE +
133
Language.Translation.Translate_Language(filename, "Phone", "Area", "None"))
134
try:
135
Phony.Get_GeoLocation(zone, "Lat", "Long", jsonfile, num, Type)
136
except Exception as e:
137
print(Font.Color.RED + "[!]" + Font.Color.WHITE + "SOMETHING WENT WRONG")
138
pass
139
else:
140
print(Font.Color.RED + "[!]" + Font.Color.WHITE +
141
Language.Translation.Translate_Language(filename, "Phone", "NoArea", "None"))
142
zone = timezoneResult.split("/", 1)[-1]
143
144
if zone != "Unknown":
145
print(Font.Color.YELLOW + "\n[v]" + Font.Color.WHITE +
146
Language.Translation.Translate_Language(filename, "Phone", "Zone", "None"))
147
jsonfile = report.replace(
148
num + ".txt", "Zone_GeoLocation.json")
149
Phony.Get_GeoLocation(zone, "Lat", "Long", jsonfile, num, Type)
150
151
else:
152
print(Font.Color.RED + "\n[!]" + Font.Color.WHITE +
153
Language.Translation.Translate_Language(filename, "Phone", "NoZone", "None").format(number))
154
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
155
Language.Translation.Translate_Language(filename, "Phone", "Affidability", "None"))
156
sleep(2)
157
if phonenumbers.is_possible_number(Phone):
158
print(Font.Color.YELLOW + "\n[v]" + Font.Color.WHITE +
159
Language.Translation.Translate_Language(filename, "Phone", "Exist", "None"))
160
else:
161
print(Font.Color.RED +
162
"\n[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(filename, "Phone", "NoExist", "None"))
163
164
f = open(report, "a")
165
f.write("INTERNATIONAL NUMBER: " + international + "\n")
166
f.write("LOCAL NUMBER: " + localNumber + "\n")
167
f.write("COUNTRY PREFIX: " + numberCode + "\n")
168
f.write("COUNTRY CODE: " + numberNation + "\n")
169
f.write("COUNTRY:" + nation + "\n")
170
f.write("AREA/ZONE" + location + "\n")
171
f.write("CARRIER/ISP: " + carrierName + "\n")
172
f.write("TIMEZONE: " + timezoneResult + "\n")
173
f.close()
174
175
if code == 0:
176
pass
177
elif code == 1:
178
f = open("Temp/Phone/Code.txt", "w")
179
f.write(numberNation)
180
f.close()
181
formatted2 = str(international).replace(numberCode,"").replace(" ","-")
182
formatted3 = formatted2.replace("-","",1)
183
formatted4 = str(international).replace(numberCode,"0").replace(" ","")
184
formatted1 = "(%2B{}){}".format(numberCode,str(formatted2).replace("-","",1))
185
formatted5 = formatted4.replace("0","")
186
phoneList.append(formatted1)
187
phoneList.append(formatted2)
188
phoneList.append(formatted4)
189
phoneList.append(formatted5)
190
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE + "FORMATTING PHONE NUMBER...")
191
sleep(2)
192
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "INTERNATIONAL-FORMAT: "+ international)
193
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "RFC3966-FORMAT: "+ formatted1.replace("%2B",""))
194
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "LOCAL-FORMAT: " + formatted3)
195
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "LOCAL-FORMAT(2): " + formatted4)
196
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
197
"LOCAL-FORMAT(3): " + formatted5)
198
return phoneList
199
200