Advertisement
SLPRYSQUID

source code

Jan 24th, 2024 (edited)
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. from importlib.machinery import ModuleSpec
  2. import sys
  3. from types import ModuleType
  4. from urllib.request import urlopen
  5. import importlib.util
  6. import importlib.machinery
  7. import importlib.abc
  8.  
  9. import urllib3
  10. #this file will load and remotely import modules from a url
  11.  
  12.  
  13. class Finder(importlib.abc.MetaPathFinder):
  14.  
  15. def __init__(self, base_url) -> None:
  16. self.base_url = base_url
  17.  
  18. def find_spec(self, fullname, path, target=None):
  19. spec = self.find_py_file_spec(fullname)
  20. if spec is not None:
  21. return spec
  22. spec = self.find_pyd_file_spec(fullname)
  23. if spec is not None:
  24. return spec
  25. spec = self.find_package_spec_init(fullname)
  26. if spec is not None:
  27. return spec
  28. return None
  29.  
  30. def find_py_file_spec(self, fullname):
  31. if len(fullname.split(".")) == 1:
  32. url = "{}/{}/{}.py".format(self.base_url,fullname.split(".")[0],fullname.replace(".","/"))
  33. else:
  34. url = "{}/{}.py".format(self.base_url,fullname.replace(".","/"))
  35. print(url)
  36. source = self.get_source_code(url)
  37. if source is None:
  38. print("no thing found")
  39. return None
  40. loader = Loader(fullname,url,source)
  41. return importlib.machinery.ModuleSpec(fullname, loader)
  42.  
  43. def find_package_spec_init(self,fullname):
  44.  
  45. url = "{}/{}/__init__.py".format(self.base_url,fullname.replace(".","/"))
  46. source = self.get_source_code(url)
  47. if source is None:
  48. print("no init found")
  49. return None
  50. loader = Loader(fullname,source,url,zip=True)
  51. return importlib.machinery.ModuleSpec(fullname, loader,is_package=True,)
  52.  
  53. def get_source_code(self, url):
  54. try:
  55. response = urlopen("http://"+url)
  56. except Exception:
  57. return None
  58. print("import failed due to HTTP")
  59.  
  60.  
  61. source = response.read()
  62. return source
  63. class Loader(importlib.abc.Loader):
  64.  
  65. def __init__(self, name, source_code, url:str,zip=False) -> None:
  66. self.name = name
  67. self.source_code = source_code
  68. self.url = url
  69. self.zip = zip
  70.  
  71. def create_module(self, spec: ModuleSpec) -> ModuleType | None:
  72. module = sys.modules.get(spec.name)
  73. if module is None:
  74. module = ModuleType(spec.name)
  75. sys.modules[spec.name] = module
  76. return module
  77.  
  78. def exec_module(self, module: ModuleType) -> None:
  79. module.__file__ = self.url
  80. print("url is {}".format(self.url))
  81. exec(self.source_code, module.__dict__)
  82. return module
  83.  
  84. def get_source(self,name):
  85. return self.source_code
  86.  
  87. def add_server(ip,port):
  88. sys.meta_path.append(Finder(f"{ip}:{port}"))
  89.  
  90.  
  91. add_server("127.0.0.1",5002)
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement