Created
January 22, 2022 17:27
-
-
Save hldr4/7142f89d963d29586217a2871441fd86 to your computer and use it in GitHub Desktop.
Simple python port of https://github.com/zackmark29/NetflixESNGenerator for cli use
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
from typing import Tuple | |
""" | |
Examples: | |
esngen.py -p a -dt tv -4k -mf hisense -m 75A6G -sid 19793 -c | |
NFANDROID2-PRV-HISEN75A6G-19793-97FB2CAF2688F9459551F0096E075B68B6FF551FC8636BFAA35B4E68258D2B26 | |
esngen.py -p c | |
NFCDCH-02-45A51BA00DEEBDAF20796A164BECC6 | |
""" | |
aparser = argparse.ArgumentParser() | |
aparser.add_argument('-p', '--platform', choices = ['c', 'a'], help = 'Chrome or Android', required = True) | |
aparser.add_argument('-dt', '--devicetype', choices = ['tb', 'p', 'tv'], help = 'Tablet, Phone, or TV', required = False) | |
aparser.add_argument('-mf', '--manufacturer', required = False) | |
aparser.add_argument('-m', '--model', required = False) | |
aparser.add_argument('-sid', '--systemid', required = False) | |
aparser.add_argument('-4k', dest = 'uhd', help = '4K capable device', action = 'store_true') | |
aparser.add_argument('-c', dest = 'copy', help = 'Copy ESN to clipboard', action = 'store_true') | |
args = aparser.parse_args() | |
def get_types(platform: str, **kwargs) -> Tuple[str, Tuple[None, str], bool]: | |
prefixes = {'Chrome':'NFCDCH-02-', 'Android':'NFANDROID1', 'Android4K':'NFANDROID2'} | |
suffixes = {'Tablet':'-PRV-T', 'Phone':'-PRV-P', 'TV':'-PRV'} | |
if platform == 'c': | |
browser = True | |
prefix = prefixes['Chrome'] | |
suffix = None | |
elif platform == 'a': | |
browser = False | |
devicetype = kwargs['devicetype'] | |
prefix = (prefixes['Android4K'] if args.uhd else prefixes['Android']) | |
suffix = (suffixes['Tablet'] if devicetype == 'tb' | |
else suffixes['Phone'] if devicetype == 'p' | |
else suffixes['TV']) | |
return prefix, suffix, browser | |
def generate(prefix: str, suffix: Tuple[None, str], browser: bool, **kwargs) -> str: | |
def make_sn(len: int) -> str: | |
import random | |
return "".join(random.choice("0123456789ABCDEF") for _ in range(len)) | |
sn = (make_sn(64) if not browser else make_sn(30)) | |
if not browser: | |
manufacturer = kwargs['manufacturer'].upper()[:5] | |
model = kwargs['model'].upper() | |
systemid = kwargs['systemid'] | |
if len(systemid) > 5: | |
exit('Incorrect system id length') | |
return f'\n{prefix}{suffix}-{manufacturer}{model}-{systemid}-{sn}' | |
return f'\n{prefix}{sn}' | |
prefix, suffix, browser = get_types(platform = args.platform, devicetype = args.devicetype) | |
esn = generate(prefix = prefix, suffix = suffix, browser = browser, manufacturer = args.manufacturer, model = args.model, systemid = args.systemid) | |
if args.copy: | |
import pyperclip | |
pyperclip.copy(esn) | |
print(esn) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment