atomicshop 3.3.28__py3-none-any.whl → 3.10.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of atomicshop might be problematic. Click here for more details.

Files changed (99) hide show
  1. atomicshop/__init__.py +1 -1
  2. atomicshop/a_mains/get_local_tcp_ports.py +85 -0
  3. atomicshop/a_mains/install_ca_certificate.py +172 -0
  4. atomicshop/a_mains/process_from_port.py +119 -0
  5. atomicshop/a_mains/set_default_dns_gateway.py +90 -0
  6. atomicshop/basics/strings.py +1 -1
  7. atomicshop/certificates.py +2 -2
  8. atomicshop/dns.py +26 -28
  9. atomicshop/etws/traces/trace_tcp.py +1 -2
  10. atomicshop/mitm/centered_settings.py +133 -0
  11. atomicshop/mitm/config_static.py +18 -43
  12. atomicshop/mitm/connection_thread_worker.py +376 -162
  13. atomicshop/mitm/engines/__parent/recorder___parent.py +1 -1
  14. atomicshop/mitm/engines/__parent/requester___parent.py +1 -1
  15. atomicshop/mitm/engines/__parent/responder___parent.py +15 -2
  16. atomicshop/mitm/engines/create_module_template.py +1 -2
  17. atomicshop/mitm/import_config.py +79 -88
  18. atomicshop/mitm/initialize_engines.py +1 -2
  19. atomicshop/mitm/message.py +5 -4
  20. atomicshop/mitm/mitm_main.py +222 -121
  21. atomicshop/mitm/recs_files.py +61 -5
  22. atomicshop/mitm/ssh_tester.py +82 -0
  23. atomicshop/networks.py +108 -93
  24. atomicshop/package_mains_processor.py +84 -0
  25. atomicshop/permissions/ubuntu_permissions.py +47 -0
  26. atomicshop/print_api.py +3 -5
  27. atomicshop/python_functions.py +23 -108
  28. atomicshop/speech_recognize.py +8 -0
  29. atomicshop/ssh_remote.py +115 -51
  30. atomicshop/web.py +20 -7
  31. atomicshop/web_apis/google_llm.py +22 -14
  32. atomicshop/wrappers/ctyping/msi_windows_installer/cabs.py +2 -1
  33. atomicshop/wrappers/ctyping/msi_windows_installer/extract_msi_main.py +2 -1
  34. atomicshop/wrappers/dockerw/dockerw.py +2 -2
  35. atomicshop/wrappers/factw/install/pre_install_and_install_before_restart.py +5 -5
  36. atomicshop/wrappers/githubw.py +175 -63
  37. atomicshop/wrappers/loggingw/handlers.py +1 -1
  38. atomicshop/wrappers/loggingw/loggingw.py +17 -1
  39. atomicshop/wrappers/netshw.py +124 -3
  40. atomicshop/wrappers/playwrightw/scenarios.py +1 -1
  41. atomicshop/wrappers/powershell_networking.py +80 -0
  42. atomicshop/wrappers/psutilw/psutil_networks.py +9 -0
  43. atomicshop/wrappers/pywin32w/win_event_log/fetch.py +174 -0
  44. atomicshop/wrappers/pywin32w/win_event_log/subscribes/process_create.py +3 -105
  45. atomicshop/wrappers/pywin32w/win_event_log/subscribes/process_terminate.py +3 -57
  46. atomicshop/wrappers/pywin32w/wmis/win32_networkadapterconfiguration.py +12 -27
  47. atomicshop/wrappers/pywin32w/wmis/win32networkadapter.py +15 -9
  48. atomicshop/wrappers/socketw/certificator.py +19 -9
  49. atomicshop/wrappers/socketw/creator.py +30 -7
  50. atomicshop/wrappers/socketw/dns_server.py +6 -6
  51. atomicshop/wrappers/socketw/exception_wrapper.py +3 -3
  52. atomicshop/wrappers/socketw/process_getter.py +86 -0
  53. atomicshop/wrappers/socketw/receiver.py +29 -9
  54. atomicshop/wrappers/socketw/sender.py +10 -9
  55. atomicshop/wrappers/socketw/sni.py +23 -6
  56. atomicshop/wrappers/socketw/{base.py → socket_base.py} +33 -1
  57. atomicshop/wrappers/socketw/socket_client.py +6 -8
  58. atomicshop/wrappers/socketw/socket_wrapper.py +82 -21
  59. atomicshop/wrappers/socketw/ssl_base.py +6 -2
  60. atomicshop/wrappers/win_auditw.py +189 -0
  61. {atomicshop-3.3.28.dist-info → atomicshop-3.10.0.dist-info}/METADATA +25 -30
  62. {atomicshop-3.3.28.dist-info → atomicshop-3.10.0.dist-info}/RECORD +74 -88
  63. atomicshop/_basics_temp.py +0 -101
  64. atomicshop/a_installs/ubuntu/docker_rootless.py +0 -11
  65. atomicshop/a_installs/ubuntu/docker_sudo.py +0 -11
  66. atomicshop/addons/a_setup_scripts/install_psycopg2_ubuntu.sh +0 -3
  67. atomicshop/addons/package_setup/CreateWheel.cmd +0 -7
  68. atomicshop/addons/package_setup/Setup in Edit mode.cmd +0 -6
  69. atomicshop/addons/package_setup/Setup.cmd +0 -7
  70. atomicshop/archiver/__init__.py +0 -0
  71. atomicshop/archiver/_search_in_zip.py +0 -189
  72. atomicshop/archiver/search_in_archive.py +0 -284
  73. atomicshop/archiver/sevenz_app_w.py +0 -86
  74. atomicshop/archiver/sevenzs.py +0 -73
  75. atomicshop/archiver/shutils.py +0 -34
  76. atomicshop/archiver/zips.py +0 -353
  77. atomicshop/file_types.py +0 -24
  78. atomicshop/pbtkmultifile_argparse.py +0 -88
  79. atomicshop/script_as_string_processor.py +0 -42
  80. atomicshop/ssh_scripts/process_from_ipv4.py +0 -37
  81. atomicshop/ssh_scripts/process_from_port.py +0 -27
  82. atomicshop/wrappers/_process_wrapper_curl.py +0 -27
  83. atomicshop/wrappers/_process_wrapper_tar.py +0 -21
  84. atomicshop/wrappers/dockerw/install_docker.py +0 -449
  85. atomicshop/wrappers/ffmpegw.py +0 -125
  86. atomicshop/wrappers/process_wrapper_pbtk.py +0 -16
  87. atomicshop/wrappers/socketw/get_process.py +0 -123
  88. /atomicshop/{addons → a_mains/addons}/PlayWrightCodegen.cmd +0 -0
  89. /atomicshop/{addons → a_mains/addons}/ScriptExecution.cmd +0 -0
  90. /atomicshop/{addons → a_mains/addons}/inits/init_to_import_all_modules.py +0 -0
  91. /atomicshop/{addons → a_mains/addons}/process_list/ReadMe.txt +0 -0
  92. /atomicshop/{addons → a_mains/addons}/process_list/compile.cmd +0 -0
  93. /atomicshop/{addons → a_mains/addons}/process_list/compiled/Win10x64/process_list.dll +0 -0
  94. /atomicshop/{addons → a_mains/addons}/process_list/compiled/Win10x64/process_list.exp +0 -0
  95. /atomicshop/{addons → a_mains/addons}/process_list/compiled/Win10x64/process_list.lib +0 -0
  96. /atomicshop/{addons → a_mains/addons}/process_list/process_list.cpp +0 -0
  97. {atomicshop-3.3.28.dist-info → atomicshop-3.10.0.dist-info}/WHEEL +0 -0
  98. {atomicshop-3.3.28.dist-info → atomicshop-3.10.0.dist-info}/licenses/LICENSE.txt +0 -0
  99. {atomicshop-3.3.28.dist-info → atomicshop-3.10.0.dist-info}/top_level.txt +0 -0
@@ -76,7 +76,7 @@ class RecorderParent:
76
76
  self.recorder_worker_thread = threading.Thread(
77
77
  target=save_message_worker,
78
78
  args=(self.record_file_path, self.message_queue, self.logger),
79
- name=f"Thread-{self.class_client_message.thread_id}-Recorder",
79
+ name=f"{self.class_client_message.thread_process} | Thread-{self.class_client_message.thread_id}-Recorder",
80
80
  daemon=True
81
81
  )
82
82
  self.recorder_worker_thread.start()
@@ -112,5 +112,5 @@ class RequesterParent:
112
112
  def create_request(self, class_client_message: ClientMessage, **kwargs) -> bytes:
113
113
  """ This function should be overridden in the child class. """
114
114
 
115
- request_bytes: bytes = class_client_message.request_raw_bytes
115
+ request_bytes: bytes = None
116
116
  return request_bytes
@@ -18,6 +18,20 @@ class ResponderParent:
18
18
  """The class that is responsible for generating response to client based on the received message."""
19
19
  def __init__(self):
20
20
  self.logger = create_custom_logger()
21
+ # engine: initialize_engines.ModuleCategory
22
+ self.engine = None
23
+
24
+ def add_args(
25
+ self,
26
+ # engine: initialize_engines.ModuleCategory
27
+ engine = None
28
+ ):
29
+ """
30
+ Add more arguments to the class.
31
+ This is needed to be backwards compatible and not to change the child class apis.
32
+ """
33
+
34
+ self.engine = engine
21
35
 
22
36
  @staticmethod
23
37
  def get_path_parts(path: str):
@@ -202,5 +216,4 @@ class ResponderParent:
202
216
  def create_response(self, class_client_message: ClientMessage):
203
217
  """ This function should be overridden in the child class. """
204
218
 
205
- response_bytes_list: list[bytes] = [class_client_message.response_raw_bytes]
206
- return response_bytes_list
219
+ return None
@@ -85,8 +85,7 @@ class CreateModuleTemplate:
85
85
  domains_with_quotes: list = [f'"{domain}"' for domain in self.domains]
86
86
 
87
87
  config_lines_list.append('[engine]')
88
- config_lines_list.append(f'domains = [{", ".join(domains_with_quotes)}]')
89
- config_lines_list.append('localhost = 1\n')
88
+ config_lines_list.append(f'domains = [{", ".join(domains_with_quotes)}]\n')
90
89
  config_lines_list.append('[on_port_connect]')
91
90
  config_lines_list.append('#5000 = "31.31.31.31:443"')
92
91
  config_lines_list.append('#5000 = "ip_port_address.txt"\n')
@@ -5,35 +5,12 @@ import socket
5
5
  from ..print_api import print_api
6
6
  from .. import config_init, filesystem, dns
7
7
  from ..permissions import permissions
8
- from ..wrappers.socketw import base
8
+ from ..wrappers.socketw import socket_base
9
9
  from ..basics import booleans
10
10
 
11
11
  from . import config_static, initialize_engines
12
12
 
13
13
 
14
- def assign_bool(dict_instance: dict, section: str, key: str):
15
- # If the value is already boolean, don't do anything.
16
- if dict_instance[section][key] is True or dict_instance[section][key] is False:
17
- return
18
- elif dict_instance[section][key] == 1:
19
- dict_instance[section][key] = True
20
- elif dict_instance[section][key] == 0:
21
- dict_instance[section][key] = False
22
- elif isinstance(dict_instance[section][key], dict):
23
- for subkey, subvalue in dict_instance[section][key].items():
24
- if subkey == '1':
25
- dict_instance[section][key] = {True: subvalue}
26
- elif subkey == '0':
27
- dict_instance[section][key] = {False: subvalue}
28
- else:
29
- print_api(f"Error: {section}.{key}.{subkey} must be 0 or 1.", color='red')
30
- return 1
31
- break
32
- else:
33
- print_api(f"Error: {section}.{key} must be 0 or 1.", color='red')
34
- return 1
35
-
36
-
37
14
  def import_config_files(
38
15
  config_file_path: str,
39
16
  print_kwargs: dict = None
@@ -52,17 +29,48 @@ def import_config_files(
52
29
  print_kwargs=print_kwargs or {}
53
30
  )
54
31
 
55
- # Assign boolean values to the toml dict module.
56
- for boolean_tuple in config_static.LIST_OF_BOOLEANS:
57
- assign_bool(config_toml, boolean_tuple[0], boolean_tuple[1])
58
32
 
59
- # Assign the configuration file content to the 'config_static' dataclasses module.
60
- for category, category_settings in config_toml.items():
61
- for setting_name, value in category_settings.items():
62
- # Get the dynamic class or dataclass from the 'config_static' module.
63
- dynamic_class = getattr(config_static, config_static.TOML_TO_STATIC_CATEGORIES[category])
64
- # Set the value to the dynamic class setting.
65
- setattr(dynamic_class, setting_name, value)
33
+ config_static.MainConfig.is_offline = bool(config_toml['dnstcp']['offline'])
34
+ config_static.MainConfig.network_interface = config_toml['dnstcp']['network_interface']
35
+ config_static.MainConfig.is_localhost = bool(config_toml['dnstcp']['localhost'])
36
+ config_static.MainConfig.set_default_dns_gateway = config_toml['dnstcp']['set_default_dns_gateway']
37
+
38
+ config_static.DNSServer.is_enabled = bool(config_toml['dns']['enable'])
39
+ config_static.DNSServer.listening_ipv4 = config_toml['dns']['listening_ipv4']
40
+ config_static.DNSServer.listening_port = config_toml['dns']['listening_port']
41
+ config_static.DNSServer.forwarding_dns_service_ipv4 = config_toml['dns']['forwarding_dns_service_ipv4']
42
+ config_static.DNSServer.cache_timeout_minutes = config_toml['dns']['cache_timeout_minutes']
43
+ config_static.DNSServer.resolve_by_engine = bool(config_toml['dns']['resolve_by_engine'])
44
+ config_static.DNSServer.resolve_regular_pass_thru = bool(config_toml['dns']['resolve_regular_pass_thru'])
45
+ config_static.DNSServer.resolve_all_domains_to_ipv4 = config_toml['dns']['resolve_all_domains_to_ipv4']
46
+
47
+ config_static.TCPServer.is_enabled = bool(config_toml['tcp']['enable'])
48
+ config_static.TCPServer.no_engines_usage_to_listen_addresses = config_toml['tcp']['no_engines_usage_to_listen_addresses']
49
+
50
+ config_static.LogRec.logs_path = config_toml['logrec']['logs_path']
51
+ config_static.LogRec.enable_request_response_recordings_in_logs = bool(config_toml['logrec']['enable_request_response_recordings_in_logs'])
52
+ config_static.LogRec.store_logs_for_x_days = config_toml['logrec']['store_logs_for_x_days']
53
+
54
+ config_static.Certificates.install_ca_certificate_to_root_store = bool(config_toml['certificates']['install_ca_certificate_to_root_store'])
55
+ config_static.Certificates.uninstall_unused_ca_certificates_with_mitm_ca_name = bool(config_toml['certificates']['uninstall_unused_ca_certificates_with_mitm_ca_name'])
56
+ config_static.Certificates.default_server_certificate_usage = bool(config_toml['certificates']['default_server_certificate_usage'])
57
+ config_static.Certificates.sni_add_new_domains_to_default_server_certificate = bool(config_toml['certificates']['sni_add_new_domains_to_default_server_certificate'])
58
+ config_static.Certificates.custom_server_certificate_usage = bool(config_toml['certificates']['custom_server_certificate_usage'])
59
+ config_static.Certificates.custom_server_certificate_path = config_toml['certificates']['custom_server_certificate_path']
60
+ config_static.Certificates.custom_private_key_path = config_toml['certificates']['custom_private_key_path']
61
+ config_static.Certificates.sni_create_server_certificate_for_each_domain = bool(config_toml['certificates']['sni_create_server_certificate_for_each_domain'])
62
+ config_static.Certificates.sni_server_certificates_cache_directory = config_toml['certificates']['sni_server_certificates_cache_directory']
63
+ config_static.Certificates.sni_get_server_certificate_from_server_socket = bool(config_toml['certificates']['sni_get_server_certificate_from_server_socket'])
64
+ config_static.Certificates.sni_server_certificate_from_server_socket_download_directory = config_toml['certificates']['sni_server_certificate_from_server_socket_download_directory']
65
+
66
+ config_static.SkipExtensions.tls_web_client_authentication = bool(config_toml['skip_extensions']['tls_web_client_authentication'])
67
+ config_static.SkipExtensions.crl_distribution_points = bool(config_toml['skip_extensions']['crl_distribution_points'])
68
+ config_static.SkipExtensions.authority_information_access = bool(config_toml['skip_extensions']['authority_information_access'])
69
+
70
+ config_static.ProcessName.get_process_name = bool(config_toml['process_name']['get_process_name'])
71
+ config_static.ProcessName.ssh_user = config_toml['process_name']['ssh_user']
72
+ config_static.ProcessName.ssh_pass = config_toml['process_name']['ssh_pass']
73
+
66
74
 
67
75
  manipulations_after_import()
68
76
 
@@ -93,14 +101,14 @@ def import_engines_configs(print_kwargs: dict) -> int:
93
101
  for engine_config_path in engine_config_path_list:
94
102
  # Initialize engine.
95
103
  current_module: initialize_engines.ModuleCategory = initialize_engines.ModuleCategory(config_static.MainConfig.SCRIPT_DIRECTORY)
96
- result_code, error = current_module.fill_engine_fields_from_config(engine_config_path.path, print_kwargs=print_kwargs or {})
97
- if result_code != 0:
104
+ rc, error = current_module.fill_engine_fields_from_config(engine_config_path.path, print_kwargs=print_kwargs or {})
105
+ if rc != 0:
98
106
  print_api(f"Error reading engine config file: {engine_config_path.path}\n{error}", color='red')
99
- return result_code
100
- result_code, error = current_module.initialize_engine(print_kwargs=print_kwargs or {})
101
- if result_code != 0:
107
+ return rc
108
+ rc, error = current_module.initialize_engine(print_kwargs=print_kwargs or {})
109
+ if rc != 0:
102
110
  print_api(f"Error initializing engine from directory: {Path(engine_config_path.path).parent}\n{error}", color='red')
103
- return result_code
111
+ return rc
104
112
 
105
113
  # Extending the full engine domain list with this list.
106
114
  domains_engine_list_full.extend(current_module.domain_list)
@@ -142,7 +150,7 @@ def check_configurations() -> int:
142
150
  is_admin = permissions.is_admin()
143
151
 
144
152
  # Check if both DNS and TCP servers are disabled. ==============================================================
145
- if not config_static.DNSServer.enable and not config_static.TCPServer.enable:
153
+ if not config_static.DNSServer.is_enabled and not config_static.TCPServer.is_enabled:
146
154
  print_api("Both DNS and TCP servers in config ini file, nothing to run. Exiting...", color='red')
147
155
  return 1
148
156
 
@@ -173,7 +181,6 @@ def check_configurations() -> int:
173
181
  print_api(error_message, color="red")
174
182
  return 1
175
183
 
176
- is_localhost: bool | None = None
177
184
  for engine in config_static.ENGINES_LIST:
178
185
  port_list: list[str] = []
179
186
  for domain_port in engine.domain_list:
@@ -214,20 +221,11 @@ def check_configurations() -> int:
214
221
  return 1
215
222
 
216
223
 
217
- # Check if 'localhost' is set in all the engines, or not.
218
- # There can't be mixed engines where local host is set and not set.
219
- # It can be all engines will be localhost or none of them.
220
- if is_localhost is None:
221
- is_localhost = engine.is_localhost
222
- else:
223
- if is_localhost != engine.is_localhost:
224
- message = (
225
- f"[*] Mixed [localhost] setting in the engines found.\n"
226
- f"[*] Some engines are set to [localhost] and some are not.\n"
227
- f"[*] This is not allowed. All engines must be set to [localhost = 1] or All engines must be set to [localhost = 0].\n"
228
- f"Please check your engine configuration files.")
229
- print_api(message, color="red")
230
- return 1
224
+ if not config_static.MainConfig.is_localhost and not is_admin:
225
+ # If we're not in localhost mode, this means we need to set virtual IPv4 addresses, which requires admin rights.
226
+ message = "In order to run the server in non-localhost mode, administrative rights are required.\nExiting..."
227
+ print_api(message, color='red')
228
+ return 1
231
229
 
232
230
  # Check admin right if on localhost ============================================================================
233
231
  # If any of the DNS IP target addresses is localhost loopback, then we need to check if the script
@@ -238,16 +236,15 @@ def check_configurations() -> int:
238
236
  if config_static.ProcessName.get_process_name:
239
237
  # If the DNS server was set to resolve by engines, we need to check all relevant engine settings.
240
238
  if config_static.DNSServer.resolve_by_engine:
241
- for engine in config_static.ENGINES_LIST:
242
- # Check if the DNS target is localhost loopback.
243
- if engine.is_localhost and not is_admin:
244
- message: str = \
245
- ("Need to run the script with administrative rights to get the process name while TCP "
246
- "running on the same computer.\nExiting...")
247
- print_api(message, color='red')
248
- return 1
239
+ # Check if the DNS target is localhost loopback.
240
+ if config_static.MainConfig.is_localhost and not is_admin:
241
+ message: str = \
242
+ ("Need to run the script with administrative rights to get the process name while TCP "
243
+ "running on the same computer.\nExiting...")
244
+ print_api(message, color='red')
245
+ return 1
249
246
  if config_static.DNSServer.resolve_all_domains_to_ipv4:
250
- if config_static.DNSServer.target_ipv4 in base.THIS_DEVICE_IP_LIST or \
247
+ if config_static.DNSServer.target_ipv4 in socket_base.THIS_DEVICE_IP_LIST or \
251
248
  config_static.DNSServer.target_ipv4.startswith('127.'):
252
249
  if not is_admin:
253
250
  message: str = \
@@ -256,33 +253,17 @@ def check_configurations() -> int:
256
253
  print_api(message, color='red')
257
254
  return 1
258
255
 
259
- try:
260
- booleans.is_only_1_true_in_list(
261
- booleans_list_of_tuples=[
262
- (config_static.DNSServer.set_default_dns_gateway, '[dns][set_default_dns_gateway]'),
263
- (config_static.DNSServer.set_default_dns_gateway_to_localhost,
264
- '[dns][set_default_dns_gateway_to_localhost]'),
265
- (config_static.DNSServer.set_default_dns_gateway_to_default_interface_ipv4,
266
- '[dns][set_default_dns_gateway_to_default_interface_ipv4]')
267
- ],
268
- raise_if_all_false=False
269
- )
270
- except ValueError as e:
271
- print_api(str(e), color='red')
272
- return 1
273
-
274
- if (config_static.DNSServer.set_default_dns_gateway or
275
- config_static.DNSServer.set_default_dns_gateway_to_localhost or
276
- config_static.DNSServer.set_default_dns_gateway_to_default_interface_ipv4):
256
+ if (config_static.MainConfig.set_default_dns_gateway or
257
+ config_static.MainConfig.set_default_dns_gateway_to_network_interface_ipv4):
277
258
  # Get current settings of the DNS gateway.
278
259
  is_dns_dynamic, current_dns_gateway = dns.get_default_dns_gateway()
279
260
 
280
261
  if not is_admin:
281
- if config_static.DNSServer.set_default_dns_gateway:
282
- ipv4_address_list = config_static.DNSServer.set_default_dns_gateway
283
- elif config_static.DNSServer.set_default_dns_gateway_to_localhost:
284
- ipv4_address_list = ['127.0.0.1']
285
- elif config_static.DNSServer.set_default_dns_gateway_to_default_interface_ipv4:
262
+ if config_static.MainConfig.set_default_dns_gateway:
263
+ ipv4_address_list = config_static.MainConfig.set_default_dns_gateway
264
+ elif config_static.MainConfig.set_default_dns_gateway_to_network_interface_ipv4 and config_static.MainConfig.is_localhost:
265
+ ipv4_address_list = [config_static.MainConfig.default_localhost_dns_gateway_ipv4]
266
+ elif config_static.MainConfig.set_default_dns_gateway_to_network_interface_ipv4 and not config_static.MainConfig.is_localhost:
286
267
  ipv4_address_list = [socket.gethostbyname(socket.gethostname())]
287
268
  else:
288
269
  raise ValueError("Error: DNS gateway configuration is not set.")
@@ -319,11 +300,21 @@ def check_configurations() -> int:
319
300
 
320
301
  def manipulations_after_import():
321
302
  for key, value in config_static.DNSServer.resolve_all_domains_to_ipv4.items():
303
+ key = bool(int(key))
322
304
  config_static.DNSServer.resolve_all_domains_to_ipv4_enable = key
323
305
  config_static.DNSServer.target_ipv4 = value
324
306
  break
325
307
 
308
+ if config_static.MainConfig.set_default_dns_gateway:
309
+ if config_static.MainConfig.set_default_dns_gateway[0] == 'l':
310
+ config_static.MainConfig.set_default_dns_gateway_to_localhost = True
311
+ config_static.MainConfig.set_default_dns_gateway = list()
312
+ elif config_static.MainConfig.set_default_dns_gateway[0] == 'n':
313
+ config_static.MainConfig.set_default_dns_gateway_to_network_interface_ipv4 = True
314
+ config_static.MainConfig.set_default_dns_gateway = list()
315
+
326
316
  for key, value in config_static.TCPServer.no_engines_usage_to_listen_addresses.items():
317
+ key = bool(int(key))
327
318
  # If the key is False, it means that the user doesn't want to use the no_engines_listening_address_list.
328
319
  # So, we'll assign an empty list to it.
329
320
  if not key:
@@ -54,7 +54,6 @@ class ModuleCategory:
54
54
 
55
55
  # Getting the parameters from engine config file
56
56
  self.domain_list = configuration_data['engine']['domains']
57
- self.is_localhost = bool(configuration_data['engine']['localhost'])
58
57
 
59
58
  if 'on_port_connect' in configuration_data:
60
59
  self.on_port_connect = configuration_data['on_port_connect']
@@ -88,7 +87,7 @@ class ModuleCategory:
88
87
  error_string: str = f"No [domain:port] pair found in: {domain_port_string}"
89
88
  return 1, error_string
90
89
 
91
- self.domain_target_dict[domain] = {'ip': None, 'port': port}
90
+ self.domain_target_dict[domain] = {'ip': None, 'port': int(port)}
92
91
 
93
92
  for port, value in self.on_port_connect.items():
94
93
  self.port_target_dict[port] = {'ip': None, 'port': int(port)}
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import Union
2
+ from typing import Union, Any
3
3
 
4
4
  from .. import http_parse
5
5
  from ..basics import dicts
@@ -14,12 +14,12 @@ class ClientMessage:
14
14
  # noinspection PyTypeChecker
15
15
  self.request_raw_bytes: bytes = None
16
16
  self.request_auto_parsed: Union[http_parse.HTTPRequestParse, any] = None
17
- self.request_custom_parsed: any = None
17
+ self.request_custom_parsed: Any = None
18
18
  self.request_raw_hex: hex = None
19
19
  # noinspection PyTypeChecker
20
20
  self.response_raw_bytes: bytes = None
21
- self.response_auto_parsed: any = None
22
- self.response_custom_parsed: any = None
21
+ self.response_auto_parsed: Any = None
22
+ self.response_custom_parsed: Any = None
23
23
  self.response_raw_hex: hex = None
24
24
  self.server_name: str = str()
25
25
  self.server_ip: str = str()
@@ -29,6 +29,7 @@ class ClientMessage:
29
29
  self.destination_port: int = int()
30
30
  self.process_name: str = str()
31
31
  self.thread_id = None
32
+ self.thread_process: str = str()
32
33
  self.info: str = str()
33
34
  self.errors: list = list()
34
35
  self.protocol: str = str()