moriarty-project 0.1.14__py3-none-any.whl → 0.1.15__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.
moriarty/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  __all__ = ["__version__"]
4
- __version__ = "0.1.14"
4
+ __version__ = "0.1.15"
@@ -6,6 +6,7 @@ import sys
6
6
  import re
7
7
  import subprocess
8
8
  import shlex
9
+ import shutil
9
10
  import logging
10
11
  import socket
11
12
  import fcntl
@@ -100,24 +101,41 @@ def check_dependencies() -> List[str]:
100
101
  if not command_exists(dep):
101
102
  missing.append(dep)
102
103
 
103
- return missing
104
104
 
105
105
  def command_exists(cmd: str) -> bool:
106
106
  """Verifica se um comando existe no sistema."""
107
107
  return shutil.which(cmd) is not None
108
108
 
109
- def get_network_interfaces() -> List[str]:
110
- """Retorna a lista de interfaces de rede sem fio disponíveis."""
111
- interfaces = []
109
+ # A função get_wireless_interfaces já está definida acima, então não precisamos duplicá-la
110
+
111
+ def run_command(cmd: Union[str, List[str]], capture_output: bool = False,
112
+ check: bool = True, **kwargs) -> subprocess.CompletedProcess:
113
+ """
114
+ Executa um comando no shell com tratamento de erros.
112
115
 
113
- try:
114
- for interface in netifaces.interfaces():
115
- if interface.startswith(('wlan', 'wlp', 'wlo', 'wlp')):
116
- interfaces.append(interface)
117
- except Exception as e:
118
- logger.error(f"Erro ao obter interfaces de rede: {e}")
116
+ Args:
117
+ cmd: Comando a ser executado (string ou lista)
118
+ capture_output: Se deve capturar a saída padrão e de erro
119
+ check: Se deve lançar uma exceção em caso de código de saída diferente de zero
120
+ **kwargs: Argumentos adicionais para subprocess.run()
121
+
122
+ Returns:
123
+ subprocess.ClosedProcess: Resultado da execução do comando
124
+ """
125
+ if isinstance(cmd, str):
126
+ cmd = cmd.split()
127
+
128
+ kwargs.setdefault('stdout', subprocess.PIPE if capture_output else None)
129
+ kwargs.setdefault('stderr', subprocess.PIPE if capture_output else None)
130
+ kwargs.setdefault('text', True)
119
131
 
120
- return interfaces
132
+ try:
133
+ return subprocess.run(cmd, check=check, **kwargs)
134
+ except subprocess.CalledProcessError as e:
135
+ logger.error(f"Command failed with exit code {e.returncode}: {' '.join(cmd)}")
136
+ if capture_output and e.stderr:
137
+ logger.error(f"Error output: {e.stderr.strip()}")
138
+ raise
121
139
 
122
140
  def get_monitor_interfaces() -> List[str]:
123
141
  """Retorna a lista de interfaces em modo monitor."""
@@ -600,13 +618,3 @@ def randomize_mac(interface: str) -> bool:
600
618
  except subprocess.CalledProcessError as e:
601
619
  logger.error(f"Falha ao aleatorizar o endereço MAC: {e}")
602
620
  return False
603
-
604
- def get_wireless_interfaces() -> List[Dict[str, Any]]:
605
- """
606
- Obtém uma lista de interfaces de rede sem fio.
607
-
608
- Returns:
609
- List[Dict[str, Any]]: Lista de interfaces sem fio com suas propriedades
610
- """
611
- return [iface for iface in get_network_interfaces()
612
- if iface.get('wireless', False)]
@@ -173,13 +173,54 @@ def get_network_interfaces() -> List[Dict[str, Any]]:
173
173
 
174
174
  def get_wireless_interfaces() -> List[Dict[str, Any]]:
175
175
  """
176
- Get a list of wireless network interfaces.
176
+ Obtém uma lista de interfaces de rede sem fio.
177
177
 
178
178
  Returns:
179
- List[Dict[str, Any]]: List of wireless interfaces with their properties
179
+ List[Dict[str, Any]]: Lista de interfaces sem fio com suas propriedades.
180
+ Cada dicionário contém as seguintes chaves:
181
+ - name: Nome da interface
182
+ - mac: Endereço MAC da interface
183
+ - ip: Endereço IP da interface
184
+ - wireless: True se for uma interface sem fio
185
+ - up: True se a interface estiver ativa
186
+ - mtu: Tamanho máximo de unidade de transmissão
187
+
188
+ Raises:
189
+ RuntimeError: Se ocorrer um erro ao obter as interfaces de rede
180
190
  """
181
- return [iface for iface in get_network_interfaces()
182
- if iface.get('wireless', False)]
191
+ try:
192
+ interfaces = get_network_interfaces()
193
+ if not interfaces:
194
+ logger.warning("Nenhuma interface de rede encontrada")
195
+ return []
196
+
197
+ wireless_interfaces = []
198
+ for iface in interfaces:
199
+ try:
200
+ if iface.get('wireless', False):
201
+ # Adiciona informações adicionais à interface
202
+ iface_info = {
203
+ 'name': iface.get('name', ''),
204
+ 'mac': iface.get('mac', ''),
205
+ 'ip': iface.get('ip', ''),
206
+ 'wireless': True,
207
+ 'up': iface.get('up', False),
208
+ 'mtu': iface.get('mtu', 0)
209
+ }
210
+ wireless_interfaces.append(iface_info)
211
+ except Exception as e:
212
+ logger.error(f"Erro ao processar interface {iface.get('name', 'desconhecida')}: {e}")
213
+ continue
214
+
215
+ if not wireless_interfaces:
216
+ logger.warning("Nenhuma interface sem fio encontrada")
217
+
218
+ return wireless_interfaces
219
+
220
+ except Exception as e:
221
+ error_msg = f"Erro ao obter interfaces sem fio: {e}"
222
+ logger.error(error_msg)
223
+ raise RuntimeError(error_msg) from e
183
224
 
184
225
  def get_interface_mac(interface: str) -> Optional[str]:
185
226
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: moriarty-project
3
- Version: 0.1.14
3
+ Version: 0.1.15
4
4
  Summary: Client-side OSINT toolkit with forensic-grade evidence handling.
5
5
  Project-URL: Homepage, https://github.com/DonatoReis/moriarty
6
6
  Project-URL: Documentation, https://github.com/DonatoReis/moriarty#readme
@@ -98,7 +98,7 @@ Description-Content-Type: text/markdown
98
98
  <!-- Badges -->
99
99
  <p align="center">
100
100
  <a href="https://pypi.org/project/moriarty-project/">
101
- <img src="https://img.shields.io/pypi/v/moriarty-project?color=blue&label=PyPI" alt="PyPI version">
101
+ <img src="https://img.shields.io/badge/version-0.1.15-blue" alt="Version 0.1.15">
102
102
  </a>
103
103
  <a href="https://www.python.org/downloads/">
104
104
  <img src="https://img.shields.io/pypi/pyversions/moriarty-project?color=blue" alt="Python Versions">
@@ -1,4 +1,4 @@
1
- moriarty/__init__.py,sha256=jEn3UteTDAw1jlf0nhlURjRcsW93Ql41vu0u7DKO81g,85
1
+ moriarty/__init__.py,sha256=oeGgeUqzdScmKTNDU6lm8G2kjLq3vSxInExsbwMg1FU,85
2
2
  moriarty/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  moriarty/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  moriarty/assets/modules/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -403,7 +403,7 @@ moriarty/modules/web_crawler.py,sha256=hxWbnD2GO_IbIb2FChCxCesgGu4dNhlloVqr5u1MC
403
403
  moriarty/modules/wifippler/__init__.py,sha256=x3Qs7_qVtVjaf8V2hVJxbjEJNK66tOcic1NCS6ZQNQ4,1316
404
404
  moriarty/modules/wifippler/core/__init__.py,sha256=D1HzfyFmxhNzpC5m7ZLsRlC0xYx4viMz7CiBU2aoZrA,1831
405
405
  moriarty/modules/wifippler/core/scanner.py,sha256=bjCBwDAybUMintwfUORZEl24Wr0zRJHfVg-j8-OUoKg,34193
406
- moriarty/modules/wifippler/core/utils.py,sha256=b2qUvyuQFS7yxhzegATC3A2Oq8hvr2LnZG8tsF6gMXw,26497
406
+ moriarty/modules/wifippler/core/utils.py,sha256=byGdpd0TrwYi9-HrqSDWRIvCTCpPZ9Xw7-ZYQqSnTx4,28135
407
407
  moriarty/modules/wifippler/core/attacks/__init__.py,sha256=Ch9qg0PUB1Q8aSiZuoJRJl5iVyy7muMgZ88e2bkG_Zs,370
408
408
  moriarty/modules/wifippler/core/attacks/deauth.py,sha256=ikOmHLb5NzuhiLRP1xBVzSM8JivjZh7zyFJffKWTwuY,13127
409
409
  moriarty/modules/wifippler/core/attacks/handshake.py,sha256=OGGtL9V69SukJXMrPyQ-NMXHGpDBsZU1-K5_Nm-iufM,16029
@@ -413,7 +413,7 @@ moriarty/modules/wifippler/core/attacks/wpa.py,sha256=meYN_ZOeAghXnht2GWUpLcXAbz
413
413
  moriarty/modules/wifippler/core/attacks/wps.py,sha256=yYx6VITE3QYGBwM8J1RO6yu_r45ZLWNDWwdVMaU6xho,17504
414
414
  moriarty/modules/wifippler/core/models/__init__.py,sha256=J6GPV457hbFy7Tdk2PNKzT8LnO9Cj3xqRDaQ8IoDptA,148
415
415
  moriarty/modules/wifippler/core/models/network.py,sha256=xUi1Ac7LWWsrihq8RfDu9dHLZFN4oALlNvfJhHxWgok,6709
416
- moriarty/modules/wifippler/core/utils/__init__.py,sha256=bfvSH1Ii2UI9v8ViwAj2gRn8pYE7gh2DYT-K129jELQ,20272
416
+ moriarty/modules/wifippler/core/utils/__init__.py,sha256=5XQkC4YR9G_6v5ZQ4djvgRU9eqm8DbS3sMu9DzpgcUI,20796
417
417
  moriarty/net/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
418
  moriarty/net/dns_cache.py,sha256=JwuDYKqmuSD-hl7PMyyQAen57ut-uvIszYrMKT-i8pY,6022
419
419
  moriarty/net/dns_client.py,sha256=iem7FekC79ruwxWzG6eFkicYJi-urkRV0kNvj9uakM0,6591
@@ -427,7 +427,7 @@ moriarty/tests/test_email_service.py,sha256=mWqimjQRlljZNBuNePvSzhfq5FZ4mljrILGW
427
427
  moriarty/tests/test_models.py,sha256=etklIISEUts3banaSRDSjhv-g6kd4wxucchCmlJkx6Y,1282
428
428
  moriarty/tests/test_orchestrator.py,sha256=Do3M1qnbqPf_1pR3v89FXxhiwfYPZfXRvcfl05isQvs,856
429
429
  moriarty/tests/test_tls_client.py,sha256=bQ46yXlIYNZwPTd8WGs6eUynHj56hVosxBycSU1gJe4,461
430
- moriarty_project-0.1.14.dist-info/METADATA,sha256=TnqMNfwpqijeaRYgkpsfElIAZykgYDWEfCLrBY0fWMk,11727
431
- moriarty_project-0.1.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
432
- moriarty_project-0.1.14.dist-info/entry_points.txt,sha256=L4TAUKy7HAy5hT46ZqS6eNOCmUTMi4x7ehZkIkTNnuE,51
433
- moriarty_project-0.1.14.dist-info/RECORD,,
430
+ moriarty_project-0.1.15.dist-info/METADATA,sha256=n7Z4Jido-NEgxQdgHUpMsX9tq9opKcVuBoTRMPtcuIE,11709
431
+ moriarty_project-0.1.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
432
+ moriarty_project-0.1.15.dist-info/entry_points.txt,sha256=L4TAUKy7HAy5hT46ZqS6eNOCmUTMi4x7ehZkIkTNnuE,51
433
+ moriarty_project-0.1.15.dist-info/RECORD,,