moriarty-project 0.1.20__py3-none-any.whl → 0.1.23__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 +1 -1
- moriarty/cli/app.py +5 -6
- moriarty/modules/port_scanner.py +1 -5
- {moriarty_project-0.1.20.dist-info → moriarty_project-0.1.23.dist-info}/METADATA +36 -49
- {moriarty_project-0.1.20.dist-info → moriarty_project-0.1.23.dist-info}/RECORD +7 -22
- moriarty/cli/wifippler.py +0 -124
- moriarty/modules/wifippler/__init__.py +0 -65
- moriarty/modules/wifippler/core/__init__.py +0 -80
- moriarty/modules/wifippler/core/attacks/__init__.py +0 -19
- moriarty/modules/wifippler/core/attacks/deauth.py +0 -340
- moriarty/modules/wifippler/core/attacks/handshake.py +0 -402
- moriarty/modules/wifippler/core/attacks/pmkid.py +0 -424
- moriarty/modules/wifippler/core/attacks/wep.py +0 -467
- moriarty/modules/wifippler/core/attacks/wpa.py +0 -446
- moriarty/modules/wifippler/core/attacks/wps.py +0 -474
- moriarty/modules/wifippler/core/models/__init__.py +0 -10
- moriarty/modules/wifippler/core/models/network.py +0 -216
- moriarty/modules/wifippler/core/scanner.py +0 -901
- moriarty/modules/wifippler/core/utils/__init__.py +0 -622
- moriarty/modules/wifippler/core/utils.py +0 -851
- {moriarty_project-0.1.20.dist-info → moriarty_project-0.1.23.dist-info}/WHEEL +0 -0
- {moriarty_project-0.1.20.dist-info → moriarty_project-0.1.23.dist-info}/entry_points.txt +0 -0
moriarty/__init__.py
CHANGED
moriarty/cli/app.py
CHANGED
@@ -8,7 +8,7 @@ from rich.console import Console
|
|
8
8
|
from rich.theme import Theme
|
9
9
|
|
10
10
|
from ..logging.config import LogStyle, configure_logging
|
11
|
-
from . import dns, email, rdap, tls, user, domain_cmd, intelligence
|
11
|
+
from . import dns, email, rdap, tls, user, domain_cmd, intelligence
|
12
12
|
from .state import CLIState, GlobalOptions
|
13
13
|
|
14
14
|
console = Console(theme=Theme({
|
@@ -111,20 +111,19 @@ def main(
|
|
111
111
|
)
|
112
112
|
)
|
113
113
|
|
114
|
+
|
114
115
|
app.add_typer(email.app, name="email", help="Email reconnaissance primitives.")
|
115
116
|
app.add_typer(dns.app, name="dns", help="Consultas DNS.")
|
116
117
|
app.add_typer(rdap.app, name="rdap", help="Consultas RDAP.")
|
117
118
|
app.add_typer(tls.app, name="tls", help="Inspeções TLS.")
|
118
|
-
app.add_typer(
|
119
|
-
app.add_typer(domain_cmd.app, name="domain", help="
|
120
|
-
app.add_typer(wifippler.app, name="wifippler", help="Análise de redes WiFi.")
|
121
|
-
app.add_typer(user.app, name="user", help="User/IP reconnaissance and scanning.")
|
119
|
+
app.add_typer(user.app, name="user", help="Enumeração de usernames.")
|
120
|
+
app.add_typer(domain_cmd.app, name="domain", help="🌐 Domain/IP reconnaissance and scanning.")
|
122
121
|
|
123
122
|
# Registra os comandos de inteligência
|
124
123
|
intelligence.register_app(app)
|
125
124
|
|
126
125
|
|
127
|
-
|
126
|
+
def main_entry() -> None:
|
128
127
|
app()
|
129
128
|
|
130
129
|
|
moriarty/modules/port_scanner.py
CHANGED
@@ -11,11 +11,8 @@ from dataclasses import dataclass, field
|
|
11
11
|
from datetime import datetime
|
12
12
|
from typing import Dict, List, Optional, Tuple, Any
|
13
13
|
|
14
|
-
# Importa a classe ServiceInfo para uso no código
|
15
|
-
|
16
14
|
import aiohttp
|
17
15
|
import dns.resolver
|
18
|
-
import dns.asyncresolver
|
19
16
|
import OpenSSL.crypto
|
20
17
|
import structlog
|
21
18
|
from rich.console import Console
|
@@ -156,7 +153,6 @@ class PortScanResult:
|
|
156
153
|
port: int
|
157
154
|
protocol: str = "tcp"
|
158
155
|
status: str = "open"
|
159
|
-
target: Optional[str] = None
|
160
156
|
service: Optional[ServiceInfo] = None
|
161
157
|
banner: Optional[str] = None
|
162
158
|
timestamp: str = field(default_factory=lambda: datetime.utcnow().isoformat())
|
@@ -294,7 +290,7 @@ class PortScanner:
|
|
294
290
|
)
|
295
291
|
|
296
292
|
# Se chegou aqui, a porta está aberta
|
297
|
-
result = PortScanResult(port=port, status="open"
|
293
|
+
result = PortScanResult(port=port, status="open")
|
298
294
|
|
299
295
|
# Tenta obter o banner do serviço
|
300
296
|
try:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: moriarty-project
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.23
|
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
|
@@ -12,57 +12,44 @@ Classifier: License :: OSI Approved :: MIT License
|
|
12
12
|
Classifier: Programming Language :: Python
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
14
14
|
Classifier: Programming Language :: Python :: 3 :: Only
|
15
|
-
Classifier: Programming Language :: Python :: 3.11
|
16
|
-
Classifier: Programming Language :: Python :: 3.12
|
17
15
|
Classifier: Programming Language :: Python :: 3.13
|
18
16
|
Classifier: Topic :: Security
|
19
17
|
Classifier: Topic :: Utilities
|
20
|
-
Requires-Python: >=3.
|
21
|
-
Requires-Dist: aiodns
|
22
|
-
Requires-Dist: aiohttp
|
23
|
-
Requires-Dist: aiolimiter
|
24
|
-
Requires-Dist: aiosmtplib
|
25
|
-
Requires-Dist:
|
26
|
-
Requires-Dist:
|
27
|
-
Requires-Dist:
|
28
|
-
Requires-Dist:
|
29
|
-
Requires-Dist:
|
30
|
-
Requires-Dist:
|
31
|
-
Requires-Dist:
|
32
|
-
Requires-Dist:
|
33
|
-
Requires-Dist:
|
34
|
-
Requires-Dist:
|
35
|
-
Requires-Dist:
|
36
|
-
Requires-Dist:
|
37
|
-
Requires-Dist:
|
38
|
-
Requires-Dist:
|
39
|
-
Requires-Dist:
|
40
|
-
Requires-Dist:
|
41
|
-
Requires-Dist:
|
42
|
-
Requires-Dist:
|
43
|
-
Requires-Dist:
|
44
|
-
Requires-Dist:
|
45
|
-
Requires-Dist:
|
46
|
-
Requires-Dist: scapy>=2.5.0
|
47
|
-
Requires-Dist: selectolax>=0.3.20
|
48
|
-
Requires-Dist: structlog>=24.1.0
|
49
|
-
Requires-Dist: tqdm>=4.67.0
|
50
|
-
Requires-Dist: typer[all]>=0.12.0
|
51
|
-
Requires-Dist: uvloop>=0.19.0; platform_system != 'Windows'
|
52
|
-
Provides-Extra: capture
|
53
|
-
Requires-Dist: pypcap>=1.2.3; (platform_system == 'Linux' or platform_system == 'Windows') and extra == 'capture'
|
54
|
-
Requires-Dist: python-libpcap>=0.5; (platform_system == 'Darwin') and extra == 'capture'
|
55
|
-
Requires-Dist: python-wifi>=0.6.1; (platform_system == 'Linux' or platform_system == 'Windows') and extra == 'capture'
|
56
|
-
Requires-Dist: pywifi>=1.1.12; (platform_system == 'Linux' or platform_system == 'Windows') and extra == 'capture'
|
18
|
+
Requires-Python: >=3.13
|
19
|
+
Requires-Dist: aiodns
|
20
|
+
Requires-Dist: aiohttp
|
21
|
+
Requires-Dist: aiolimiter
|
22
|
+
Requires-Dist: aiosmtplib
|
23
|
+
Requires-Dist: dnspython>=2.0.0
|
24
|
+
Requires-Dist: email-validator
|
25
|
+
Requires-Dist: httpx[http2]
|
26
|
+
Requires-Dist: idna>=3.0
|
27
|
+
Requires-Dist: jsonpath-ng
|
28
|
+
Requires-Dist: lxml
|
29
|
+
Requires-Dist: networkx
|
30
|
+
Requires-Dist: orjson
|
31
|
+
Requires-Dist: phonenumbers
|
32
|
+
Requires-Dist: pillow
|
33
|
+
Requires-Dist: pydantic>=2
|
34
|
+
Requires-Dist: pyopenssl>=23.0.0
|
35
|
+
Requires-Dist: pyyaml>=6
|
36
|
+
Requires-Dist: rapidfuzz
|
37
|
+
Requires-Dist: requests
|
38
|
+
Requires-Dist: rich
|
39
|
+
Requires-Dist: scapy
|
40
|
+
Requires-Dist: selectolax
|
41
|
+
Requires-Dist: structlog
|
42
|
+
Requires-Dist: typer[all]
|
43
|
+
Requires-Dist: uvloop; platform_system != 'Windows'
|
57
44
|
Provides-Extra: dev
|
58
|
-
Requires-Dist: cyclonedx-bom
|
45
|
+
Requires-Dist: cyclonedx-bom; extra == 'dev'
|
59
46
|
Requires-Dist: deptry>=0.23.0; extra == 'dev'
|
60
|
-
Requires-Dist: hypothesis
|
61
|
-
Requires-Dist: mypy
|
62
|
-
Requires-Dist: pip-audit
|
63
|
-
Requires-Dist: pytest
|
64
|
-
Requires-Dist: pytest
|
65
|
-
Requires-Dist: ruff
|
47
|
+
Requires-Dist: hypothesis; extra == 'dev'
|
48
|
+
Requires-Dist: mypy; extra == 'dev'
|
49
|
+
Requires-Dist: pip-audit; extra == 'dev'
|
50
|
+
Requires-Dist: pytest; extra == 'dev'
|
51
|
+
Requires-Dist: pytest-xdist; extra == 'dev'
|
52
|
+
Requires-Dist: ruff; extra == 'dev'
|
66
53
|
Provides-Extra: headless
|
67
54
|
Requires-Dist: playwright>=1.40.0; extra == 'headless'
|
68
55
|
Provides-Extra: http3
|
@@ -98,7 +85,7 @@ Description-Content-Type: text/markdown
|
|
98
85
|
<!-- Badges -->
|
99
86
|
<p align="center">
|
100
87
|
<a href="https://pypi.org/project/moriarty-project/">
|
101
|
-
<img src="https://img.shields.io/
|
88
|
+
<img src="https://img.shields.io/pypi/v/moriarty-project?color=blue&label=PyPI" alt="PyPI version">
|
102
89
|
</a>
|
103
90
|
<a href="https://www.python.org/downloads/">
|
104
91
|
<img src="https://img.shields.io/pypi/pyversions/moriarty-project?color=blue" alt="Python Versions">
|
@@ -152,7 +139,7 @@ Description-Content-Type: text/markdown
|
|
152
139
|
pipx install moriarty-project
|
153
140
|
|
154
141
|
# OU para instalar uma versão específica
|
155
|
-
# pipx install moriarty-project==0.1.
|
142
|
+
# pipx install moriarty-project==0.1.23
|
156
143
|
|
157
144
|
# Verificar a instalação
|
158
145
|
moriarty --help
|
@@ -1,4 +1,4 @@
|
|
1
|
-
moriarty/__init__.py,sha256=
|
1
|
+
moriarty/__init__.py,sha256=xHQKlSMGcl0-ubP4s1a46VztIjLcTbQOpNHv-F_3yUk,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
|
@@ -328,7 +328,7 @@ moriarty/assets/templates/vulnerabilities/xss-reflected.yaml,sha256=iG0WphhygN2p
|
|
328
328
|
moriarty/assets/templates/vulnerabilities/xxe-basic.yaml,sha256=7bG1KT5jBm8SAQp-pbjxknFuW5fIkF9yrufsq2OghRk,565
|
329
329
|
moriarty/assets/wordlists/subdomains-1000.txt,sha256=XKDCiJMJ2wnDRngglAiv7iuDnwlUIr_-LnjlNwWp4sc,8032
|
330
330
|
moriarty/cli/__init__.py,sha256=PQ8kA28EJ9h8mIK_VJtH1PtJ3xfVsF3d7IsmpZfl_Bc,54
|
331
|
-
moriarty/cli/app.py,sha256=
|
331
|
+
moriarty/cli/app.py,sha256=uo5SxblJGG340F1cChad4W78ASFLk7k3x_ETtg-0mts,7825
|
332
332
|
moriarty/cli/async_utils.py,sha256=jleTd2nyAVsNqJae2kKlo514gKKcH3nBXvfoLubOq6A,393
|
333
333
|
moriarty/cli/dns.py,sha256=QhDwe9uoAmk243XbO9YBYk3YlPmiXYT_vLqUXum9i70,2735
|
334
334
|
moriarty/cli/domain_cmd.py,sha256=CgpTN0kMKlAvrH72wDPuAodXOhBb0hgR4HBfZYfSTEg,24193
|
@@ -340,7 +340,6 @@ moriarty/cli/rdap.py,sha256=OVtYSsx37te0TxvY7K8iBMerPBSByXocm8kLeoUEhOw,3079
|
|
340
340
|
moriarty/cli/state.py,sha256=5_HXXff9KWiYw8R763NgUAFuCAKHTZZe2zYD9JEvJxw,855
|
341
341
|
moriarty/cli/tls.py,sha256=j4ieW_Vt0QG7AuDHfjUEAOYkvk4GJguB9hY6dYJW3K0,3269
|
342
342
|
moriarty/cli/user.py,sha256=EWtRp4pzY7kOiWE16Yokc71pB4GP-ItguF1E2Lkri3Q,8169
|
343
|
-
moriarty/cli/wifippler.py,sha256=sFjtwiN0-wSbBZ2MXE2Kb8kMBmz-BG1bsBcgo4G36SY,4431
|
344
343
|
moriarty/core/cache_backend.py,sha256=tu_szkoRfZOmHh9g4ZTGc3gN-gZ-zTJGVKxlHhtvIHY,7032
|
345
344
|
moriarty/core/config_manager.py,sha256=iXrH4UgMU05U7vsqfyFmwzybQIYH5s9hyjJlS9T9CKM,11751
|
346
345
|
moriarty/correlator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -386,7 +385,7 @@ moriarty/modules/orchestrator.py,sha256=uhK4UP69uWUxCK4a_bGk_BI8I-coBM8mO8Ear3pc
|
|
386
385
|
moriarty/modules/passive_recon.py,sha256=5XUJgyWvITMUf4W76QyNfbRgF1AitQ5xK9MbwzVURxM,16568
|
387
386
|
moriarty/modules/phone_extractor.py,sha256=Bv4VVWPqf67CQfkMDJddggtEU5UUbra2FP5DLik2Gxw,5298
|
388
387
|
moriarty/modules/pipeline_orchestrator.py,sha256=qP2WcvorM_pAjacJ8VuZ-1TQ7lDVLvnyFD9T4PvWq9I,26337
|
389
|
-
moriarty/modules/port_scanner.py,sha256=
|
388
|
+
moriarty/modules/port_scanner.py,sha256=fbz7ECgdcQ9OtummUc94xxOHLnKy7BaTDHWt9CNYITU,33302
|
390
389
|
moriarty/modules/rdap.py,sha256=XlrTDalbSxszEwIQFHt-XWON_P9UsLLiR84DGSKAwrk,1859
|
391
390
|
moriarty/modules/rdap_extended.py,sha256=Gef7zyOY5nuS2qn8a9iaXA7Tx3TJHZJBWpqa-BZaq4U,6447
|
392
391
|
moriarty/modules/stealth_mode.py,sha256=9LJWXSgBjDsTZYslHz4zSnzDoC3JFdBcu3oOYN1IPhA,24459
|
@@ -400,20 +399,6 @@ moriarty/modules/vuln_scanner.py,sha256=-sRWOPzmrzUP9Mly471JCbP7iAxSwoho9DVn-6bF
|
|
400
399
|
moriarty/modules/waf_detector.py,sha256=5biF5OVBHbLAj_5x0ZXzCS-94bQeJNzIcYm7kMDAX0I,20744
|
401
400
|
moriarty/modules/wayback_discovery.py,sha256=sJN9at7Py-ZiUWuwnMU7fHOc_F3WwN1R3Y72qNSmxck,8573
|
402
401
|
moriarty/modules/web_crawler.py,sha256=hxWbnD2GO_IbIb2FChCxCesgGu4dNhlloVqr5u1MC1k,5890
|
403
|
-
moriarty/modules/wifippler/__init__.py,sha256=xt08XjvurzzID-rN5G7zEKtrYljrnP0p9XxzCi3KCUo,1376
|
404
|
-
moriarty/modules/wifippler/core/__init__.py,sha256=2WBNJv6ipNpG3McJ3sBu4zJrFshP6Aan6dch_LHvDM4,1832
|
405
|
-
moriarty/modules/wifippler/core/scanner.py,sha256=bjCBwDAybUMintwfUORZEl24Wr0zRJHfVg-j8-OUoKg,34193
|
406
|
-
moriarty/modules/wifippler/core/utils.py,sha256=byGdpd0TrwYi9-HrqSDWRIvCTCpPZ9Xw7-ZYQqSnTx4,28135
|
407
|
-
moriarty/modules/wifippler/core/attacks/__init__.py,sha256=Ch9qg0PUB1Q8aSiZuoJRJl5iVyy7muMgZ88e2bkG_Zs,370
|
408
|
-
moriarty/modules/wifippler/core/attacks/deauth.py,sha256=ikOmHLb5NzuhiLRP1xBVzSM8JivjZh7zyFJffKWTwuY,13127
|
409
|
-
moriarty/modules/wifippler/core/attacks/handshake.py,sha256=OGGtL9V69SukJXMrPyQ-NMXHGpDBsZU1-K5_Nm-iufM,16029
|
410
|
-
moriarty/modules/wifippler/core/attacks/pmkid.py,sha256=gc83t2ejr_nH2GIom_Pui4xqKSbhr4AUa8vQ-zxQ1tg,16992
|
411
|
-
moriarty/modules/wifippler/core/attacks/wep.py,sha256=GPr30ZcFwECjjs2-A7g-TutgSO3oZAZ4spjMPBOXZ0I,17299
|
412
|
-
moriarty/modules/wifippler/core/attacks/wpa.py,sha256=meYN_ZOeAghXnht2GWUpLcXAbz8miaiU3S0fB7Yw8fQ,17327
|
413
|
-
moriarty/modules/wifippler/core/attacks/wps.py,sha256=yYx6VITE3QYGBwM8J1RO6yu_r45ZLWNDWwdVMaU6xho,17504
|
414
|
-
moriarty/modules/wifippler/core/models/__init__.py,sha256=J6GPV457hbFy7Tdk2PNKzT8LnO9Cj3xqRDaQ8IoDptA,148
|
415
|
-
moriarty/modules/wifippler/core/models/network.py,sha256=xUi1Ac7LWWsrihq8RfDu9dHLZFN4oALlNvfJhHxWgok,6709
|
416
|
-
moriarty/modules/wifippler/core/utils/__init__.py,sha256=rI06D6Ke0TfhBt-kU_uBTE46yOWIosNejlPdqRh3i3k,20422
|
417
402
|
moriarty/net/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
418
403
|
moriarty/net/dns_cache.py,sha256=JwuDYKqmuSD-hl7PMyyQAen57ut-uvIszYrMKT-i8pY,6022
|
419
404
|
moriarty/net/dns_client.py,sha256=iem7FekC79ruwxWzG6eFkicYJi-urkRV0kNvj9uakM0,6591
|
@@ -427,7 +412,7 @@ moriarty/tests/test_email_service.py,sha256=mWqimjQRlljZNBuNePvSzhfq5FZ4mljrILGW
|
|
427
412
|
moriarty/tests/test_models.py,sha256=etklIISEUts3banaSRDSjhv-g6kd4wxucchCmlJkx6Y,1282
|
428
413
|
moriarty/tests/test_orchestrator.py,sha256=Do3M1qnbqPf_1pR3v89FXxhiwfYPZfXRvcfl05isQvs,856
|
429
414
|
moriarty/tests/test_tls_client.py,sha256=bQ46yXlIYNZwPTd8WGs6eUynHj56hVosxBycSU1gJe4,461
|
430
|
-
moriarty_project-0.1.
|
431
|
-
moriarty_project-0.1.
|
432
|
-
moriarty_project-0.1.
|
433
|
-
moriarty_project-0.1.
|
415
|
+
moriarty_project-0.1.23.dist-info/METADATA,sha256=-oxq6hJrBVqq1G-gjUh7Z9uG_hb0uuiJutK29BZo8cM,10766
|
416
|
+
moriarty_project-0.1.23.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
417
|
+
moriarty_project-0.1.23.dist-info/entry_points.txt,sha256=L4TAUKy7HAy5hT46ZqS6eNOCmUTMi4x7ehZkIkTNnuE,51
|
418
|
+
moriarty_project-0.1.23.dist-info/RECORD,,
|
moriarty/cli/wifippler.py
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Módulo CLI para análise de redes WiFi usando WifiPPLER.
|
3
|
-
"""
|
4
|
-
import asyncio
|
5
|
-
import typer
|
6
|
-
from typing import Optional
|
7
|
-
from rich.console import Console
|
8
|
-
from rich.progress import Progress, SpinnerColumn, TextColumn
|
9
|
-
|
10
|
-
from moriarty.modules.wifippler import WiFiScanner, check_dependencies, is_root, get_network_interfaces
|
11
|
-
|
12
|
-
app = typer.Typer(help="Análise de redes WiFi com WifiPPLER")
|
13
|
-
console = Console()
|
14
|
-
|
15
|
-
@app.command("scan")
|
16
|
-
def scan_networks(
|
17
|
-
interface: str = typer.Option(
|
18
|
-
None,
|
19
|
-
"--interface", "-i",
|
20
|
-
help="Interface de rede para escaneamento"
|
21
|
-
),
|
22
|
-
scan_time: int = typer.Option(
|
23
|
-
5,
|
24
|
-
"--scan-time", "-t",
|
25
|
-
help="Tempo de escaneamento em segundos"
|
26
|
-
),
|
27
|
-
output: str = typer.Option(
|
28
|
-
None,
|
29
|
-
"--output", "-o",
|
30
|
-
help="Arquivo para salvar os resultados (JSON)"
|
31
|
-
)
|
32
|
-
):
|
33
|
-
"""Escaneia redes WiFi próximas."""
|
34
|
-
# Verifica se o usuário tem privilégios de root
|
35
|
-
if not is_root():
|
36
|
-
console.print("[red]Erro:[/] Este comando requer privilégios de root/sudo")
|
37
|
-
raise typer.Exit(1)
|
38
|
-
|
39
|
-
# Verifica dependências
|
40
|
-
missing = check_dependencies()
|
41
|
-
if missing:
|
42
|
-
console.print("[red]Erro:[/] As seguintes dependências estão faltando:")
|
43
|
-
for dep in missing:
|
44
|
-
console.print(f"- {dep}")
|
45
|
-
raise typer.Exit(1)
|
46
|
-
|
47
|
-
# Se nenhuma interface for fornecida, lista as disponíveis
|
48
|
-
if not interface:
|
49
|
-
interfaces = get_network_interfaces()
|
50
|
-
if not interfaces:
|
51
|
-
console.print("[red]Erro:[/] Nenhuma interface de rede encontrada")
|
52
|
-
raise typer.Exit(1)
|
53
|
-
|
54
|
-
console.print("[yellow]Interfaces disponíveis:[/]")
|
55
|
-
for i, iface in enumerate(interfaces, 1):
|
56
|
-
console.print(f"{i}. {iface}")
|
57
|
-
|
58
|
-
try:
|
59
|
-
choice = int(typer.prompt("\nSelecione o número da interface")) - 1
|
60
|
-
interface = interfaces[choice]
|
61
|
-
except (ValueError, IndexError):
|
62
|
-
console.print("[red]Erro:[/] Seleção inválida")
|
63
|
-
raise typer.Exit(1)
|
64
|
-
|
65
|
-
# Executa o escaneamento
|
66
|
-
async def run_scan():
|
67
|
-
scanner = WiFiScanner(interface=interface, scan_time=scan_time)
|
68
|
-
|
69
|
-
with Progress(
|
70
|
-
SpinnerColumn(),
|
71
|
-
TextColumn("[progress.description]{task.description}"),
|
72
|
-
console=console,
|
73
|
-
transient=True,
|
74
|
-
) as progress:
|
75
|
-
task = progress.add_task("[cyan]Escaneando redes WiFi...", total=None)
|
76
|
-
networks = await scanner.scan_networks()
|
77
|
-
progress.update(task, completed=1, visible=False)
|
78
|
-
|
79
|
-
# Exibe os resultados
|
80
|
-
if networks:
|
81
|
-
scanner.display_networks(networks)
|
82
|
-
|
83
|
-
# Salva em arquivo se solicitado
|
84
|
-
if output:
|
85
|
-
import json
|
86
|
-
with open(output, 'w') as f:
|
87
|
-
json.dump([n.to_dict() for n in networks], f, indent=2)
|
88
|
-
console.print(f"\n[green]Resultados salvos em:[/] {output}")
|
89
|
-
else:
|
90
|
-
console.print("[yellow]Nenhuma rede encontrada.[/]")
|
91
|
-
|
92
|
-
try:
|
93
|
-
asyncio.run(run_scan())
|
94
|
-
except Exception as e:
|
95
|
-
console.print(f"[red]Erro durante o escaneamento:[/] {str(e)}")
|
96
|
-
raise typer.Exit(1)
|
97
|
-
|
98
|
-
# Adiciona o comando de ataque WPS
|
99
|
-
@app.command("wps")
|
100
|
-
def wps_attack(
|
101
|
-
interface: str = typer.Option(..., "--interface", "-i", help="Interface de rede para o ataque"),
|
102
|
-
bssid: str = typer.Option(..., "--bssid", "-b", help="BSSID do alvo"),
|
103
|
-
channel: int = typer.Option(..., "--channel", "-c", help="Canal da rede alvo")
|
104
|
-
):
|
105
|
-
"""Executa um ataque WPS contra uma rede WiFi."""
|
106
|
-
console.print(f"[yellow]Iniciando ataque WPS contra {bssid} no canal {channel}...[/]")
|
107
|
-
# Implementação do ataque WPS será adicionada aqui
|
108
|
-
console.print("[green]Ataque WPS concluído com sucesso![/]")
|
109
|
-
|
110
|
-
# Adiciona o comando para verificar dependências
|
111
|
-
@app.command("check-deps")
|
112
|
-
def check_deps():
|
113
|
-
"""Verifica se todas as dependências estão instaladas."""
|
114
|
-
missing = check_dependencies()
|
115
|
-
if missing:
|
116
|
-
console.print("[red]As seguintes dependências estão faltando:[/]")
|
117
|
-
for dep in missing:
|
118
|
-
console.print(f"- {dep}")
|
119
|
-
raise typer.Exit(1)
|
120
|
-
else:
|
121
|
-
console.print("[green]Todas as dependências estão instaladas![/]")
|
122
|
-
|
123
|
-
if __name__ == "__main__":
|
124
|
-
app()
|
@@ -1,65 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
WifiPPLER - Ferramenta Avançada de Análise de Segurança WiFi
|
3
|
-
|
4
|
-
Uma ferramenta abrangente de auditoria de segurança WiFi que combina os melhores
|
5
|
-
recursos de ferramentas existentes com técnicas modernas e uma interface limpa.
|
6
|
-
"""
|
7
|
-
|
8
|
-
__version__ = "1.0.0"
|
9
|
-
__author__ = "Moriarty Team"
|
10
|
-
__license__ = "MIT"
|
11
|
-
|
12
|
-
# Importações principais
|
13
|
-
from .core.scanner import WiFiScanner
|
14
|
-
from .core.attacks import (
|
15
|
-
WPSAttack,
|
16
|
-
WPAHandshakeAttack,
|
17
|
-
PMKIDAttack,
|
18
|
-
WEPAttack,
|
19
|
-
DeauthAttack,
|
20
|
-
HandshakeCapture
|
21
|
-
)
|
22
|
-
|
23
|
-
# Utilitários
|
24
|
-
from .core.utils import (
|
25
|
-
is_root,
|
26
|
-
check_dependencies,
|
27
|
-
get_network_interfaces,
|
28
|
-
set_monitor_mode,
|
29
|
-
restore_network_interface,
|
30
|
-
get_monitor_interfaces,
|
31
|
-
start_monitor_mode,
|
32
|
-
get_wireless_interfaces,
|
33
|
-
stop_monitor_mode
|
34
|
-
)
|
35
|
-
|
36
|
-
# Modelos de dados
|
37
|
-
from .core.models.network import WiFiNetwork, WiFiClient
|
38
|
-
|
39
|
-
__all__ = [
|
40
|
-
# Classes principais
|
41
|
-
'WiFiScanner',
|
42
|
-
|
43
|
-
# Ataques
|
44
|
-
'WPSAttack',
|
45
|
-
'WPAHandshakeAttack',
|
46
|
-
'PMKIDAttack',
|
47
|
-
'WEPAttack',
|
48
|
-
'DeauthAttack',
|
49
|
-
'HandshakeCapture',
|
50
|
-
|
51
|
-
# Utilitários
|
52
|
-
'is_root',
|
53
|
-
'check_dependencies',
|
54
|
-
'get_network_interfaces',
|
55
|
-
'set_monitor_mode',
|
56
|
-
'restore_network_interface',
|
57
|
-
'get_monitor_interfaces',
|
58
|
-
'get_wireless_interfaces',
|
59
|
-
'start_monitor_mode',
|
60
|
-
'stop_monitor_mode',
|
61
|
-
|
62
|
-
# Modelos
|
63
|
-
'WiFiNetwork',
|
64
|
-
'WiFiClient'
|
65
|
-
]
|
@@ -1,80 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Core functionality for the WifiPPLER module.
|
3
|
-
|
4
|
-
This module provides the core functionality for the WifiPPLER tool,
|
5
|
-
including network scanning, packet analysis, and attack modules.
|
6
|
-
"""
|
7
|
-
|
8
|
-
from .scanner import WiFiScanner
|
9
|
-
from .attacks import (
|
10
|
-
WPSAttack,
|
11
|
-
WPAHandshakeAttack,
|
12
|
-
PMKIDAttack,
|
13
|
-
WEPAttack,
|
14
|
-
DeauthAttack,
|
15
|
-
HandshakeCapture
|
16
|
-
)
|
17
|
-
|
18
|
-
# Import utility functions
|
19
|
-
from .utils import (
|
20
|
-
is_root,
|
21
|
-
get_wireless_interfaces,
|
22
|
-
check_dependencies,
|
23
|
-
get_network_interfaces,
|
24
|
-
get_monitor_interfaces,
|
25
|
-
set_monitor_mode,
|
26
|
-
restore_network_interface,
|
27
|
-
start_monitor_mode,
|
28
|
-
stop_monitor_mode,
|
29
|
-
run_command_async,
|
30
|
-
randomize_mac,
|
31
|
-
get_interface_mac,
|
32
|
-
get_interface_ip,
|
33
|
-
get_interface_netmask,
|
34
|
-
get_interface_gateway,
|
35
|
-
is_wireless_interface,
|
36
|
-
get_interface_signal,
|
37
|
-
get_interface_ssid,
|
38
|
-
get_interface_channel,
|
39
|
-
get_interface_bitrate,
|
40
|
-
create_deauth_packet,
|
41
|
-
parse_airodump_csv,
|
42
|
-
parse_airodump_stations,
|
43
|
-
run_command,
|
44
|
-
command_exists
|
45
|
-
)
|
46
|
-
|
47
|
-
__all__ = [
|
48
|
-
'WiFiScanner',
|
49
|
-
'WPSAttack',
|
50
|
-
'WPAHandshakeAttack',
|
51
|
-
'PMKIDAttack',
|
52
|
-
'WEPAttack',
|
53
|
-
'DeauthAttack',
|
54
|
-
'HandshakeCapture',
|
55
|
-
'is_root',
|
56
|
-
'check_dependencies',
|
57
|
-
'command_exists',
|
58
|
-
'get_network_interfaces',
|
59
|
-
'get_monitor_interfaces',
|
60
|
-
'set_monitor_mode',
|
61
|
-
'restore_network_interface',
|
62
|
-
'start_monitor_mode',
|
63
|
-
'stop_monitor_mode',
|
64
|
-
'get_interface_mac',
|
65
|
-
'get_interface_ip',
|
66
|
-
'get_interface_netmask',
|
67
|
-
'get_interface_gateway',
|
68
|
-
'is_wireless_interface',
|
69
|
-
'get_interface_signal',
|
70
|
-
'get_interface_ssid',
|
71
|
-
'get_interface_channel',
|
72
|
-
'get_interface_bitrate',
|
73
|
-
'create_deauth_packet',
|
74
|
-
'parse_airodump_csv',
|
75
|
-
'parse_airodump_stations',
|
76
|
-
'run_command',
|
77
|
-
'run_command_async',
|
78
|
-
'randomize_mac',
|
79
|
-
'get_wireless_interfaces'
|
80
|
-
]
|
@@ -1,19 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Attack modules for WifiPPLER.
|
3
|
-
"""
|
4
|
-
|
5
|
-
from .wps import WPSAttack
|
6
|
-
from .wpa import WPAHandshakeAttack
|
7
|
-
from .pmkid import PMKIDAttack
|
8
|
-
from .wep import WEPAttack
|
9
|
-
from .deauth import DeauthAttack
|
10
|
-
from .handshake import HandshakeCapture
|
11
|
-
|
12
|
-
__all__ = [
|
13
|
-
'WPSAttack',
|
14
|
-
'WPAHandshakeAttack',
|
15
|
-
'PMKIDAttack',
|
16
|
-
'WEPAttack',
|
17
|
-
'DeauthAttack',
|
18
|
-
'HandshakeCapture'
|
19
|
-
]
|