Skip to content

Instantly share code, notes, and snippets.

@hldr4
Created January 22, 2022 17:27
Show Gist options
  • Save hldr4/7142f89d963d29586217a2871441fd86 to your computer and use it in GitHub Desktop.
Save hldr4/7142f89d963d29586217a2871441fd86 to your computer and use it in GitHub Desktop.
Simple python port of https://github.com/zackmark29/NetflixESNGenerator for cli use
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