mirror of
https://github.com/Sneed-Group/pypush-plus-plus
synced 2024-12-25 04:12:34 -06:00
80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
|
import requests, random, plistlib, zipfile
|
||
|
from io import BytesIO
|
||
|
|
||
|
appleplist = None
|
||
|
|
||
|
def getMasterList():
|
||
|
global appleplist
|
||
|
if (appleplist is None):
|
||
|
appleplist = plistlib.loads(requests.get("https://itunes.apple.com/WebObjects/MZStore.woa/wa/com.apple.jingle.appserver.client.MZITunesClientCheck/version?languageCode=en").content)
|
||
|
return appleplist
|
||
|
|
||
|
def getGatewayMCCMNC(MCCMNC):
|
||
|
gateways = getGatewaysMCCMNC(MCCMNC)
|
||
|
if gateways is None:
|
||
|
return None
|
||
|
return gateways[random.randrange(0, len(gateways))]
|
||
|
|
||
|
def getGatewaysMCCMNC(MCCMNC):
|
||
|
bundles = getBundlesMCCMNC(MCCMNC)
|
||
|
gateway = None
|
||
|
if bundles is None:
|
||
|
return
|
||
|
for bundle in bundles:
|
||
|
gateway = getGatewayFromBundle(parseBundle(bundle["Bundle"]))
|
||
|
if gateway is not None:
|
||
|
break
|
||
|
return gateway
|
||
|
|
||
|
def getBundlesMCCMNC(MCCMNC):
|
||
|
appleplist = getMasterList()
|
||
|
bundlelist = []
|
||
|
if MCCMNC in appleplist["MobileDeviceCarriersByMccMnc"]:
|
||
|
mmo = appleplist["MobileDeviceCarriersByMccMnc"][MCCMNC]
|
||
|
if "BundleName" in mmo:
|
||
|
bundle = getBundleByName(mmo["BundleName"])
|
||
|
if bundle is not None:
|
||
|
bundlelist.append({"Name": mmo["BundleName"], "Bundle": bundle})
|
||
|
if "MVNOs" in mmo:
|
||
|
for mv in mmo["MVNOs"]:
|
||
|
if "BundleName" in mv:
|
||
|
bundle = getBundleByName(mv["BundleName"])
|
||
|
if bundle is not None:
|
||
|
bundlelist.append({"Name": mv["BundleName"], "Bundle": bundle})
|
||
|
return bundlelist
|
||
|
else:
|
||
|
return None
|
||
|
|
||
|
def getGatewayFromBundle(bundledict):
|
||
|
applecarrierplist = bundledict
|
||
|
if "PhoneNumberRegistrationGatewayAddress" in applecarrierplist:
|
||
|
regnum = applecarrierplist["PhoneNumberRegistrationGatewayAddress"]
|
||
|
if (type(regnum) == str):
|
||
|
regnum = [regnum]
|
||
|
return regnum
|
||
|
return None
|
||
|
|
||
|
def parseBundle(bundle):
|
||
|
bundlebytes = BytesIO(bundle)
|
||
|
bundlezip = zipfile.ZipFile(bundlebytes)
|
||
|
carrierpath = [path for path in bundlezip.namelist() if path.startswith("Payload/") and path.endswith("/carrier.plist")][0]
|
||
|
applecarrierplist = plistlib.load(bundlezip.open(carrierpath, "r"))
|
||
|
return applecarrierplist
|
||
|
|
||
|
def getBundleByName(BundleName):
|
||
|
appleplist = getMasterList()
|
||
|
if BundleName in appleplist["MobileDeviceCarrierBundlesByProductVersion"]:
|
||
|
x = BundleName
|
||
|
greatestver = "0"
|
||
|
for y in appleplist["MobileDeviceCarrierBundlesByProductVersion"][x]:
|
||
|
try:
|
||
|
inty = float(y)
|
||
|
except:
|
||
|
continue
|
||
|
if (inty > float(greatestver)):
|
||
|
greatestver = y
|
||
|
if greatestver != "0":
|
||
|
return requests.get(appleplist["MobileDeviceCarrierBundlesByProductVersion"][x][greatestver]["BundleURL"]).content
|
||
|
else:
|
||
|
return None
|
||
|
return None
|