Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
violent-python3 — Codice sorgente del libro "Violent Python" di TJ O'Connor. Il codice è stato completamente convertito in Python 3, riformattato per essere conforme agli standard PEP8 e rifattorizzato per eliminare problemi di dipendenza relativi all'implementazione di librerie deprecate. | Kitploit
Strumenti/GitHubGitHub/eonraider/violent-python3
OSINT (Open Source Intelligence)RicognizioneSicurezza BluetoothAttacchi alle PasswordExploitInformatica ForenseSicurezza WebSicurezza di ReteSicurezza Wireless

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Penetration Testing
Apprendimento e Formazione
GitHubeonraider/violent-python3

violent-python3

Codice sorgente del libro "Violent Python" di TJ O'Connor. Il codice è stato completamente convertito in Python 3, riformattato per essere conforme agli standard PEP8 e rifattorizzato per eliminare problemi di dipendenza relativi all'implementazione di librerie deprecate.

Vedi Repository
1.0k1799 giorni faRevisionato da Kitploit

Codice Sorgente di "Violent Python" per Python 3

Codice sorgente per il libro "Violent Python" di TJ O'Connor. Il codice è stato completamente convertito a Python 3, riformattato per conformarsi agli standard PEP8 e rifattorizzato per eliminare problemi di dipendenza derivanti dall'implementazione di librerie deprecate.

Una conversione simile a questa è stata resa disponibile da me sul codice sorgente del libro "Black Hat Python" di Justin Seitz. Dai un'occhiata qui se non l'hai ancora fatto.

Utilizzo

Crea semplicemente una nuova directory (DIR) per il progetto, crea un nuovo ambiente virtuale o venv (consigliato), clona questo repository usando git clone e installa i requisiti usando pip install.

root@kitploit:~
user@host:~/DIR$ git clone https://github.com/EONRaider/violent-python3
user@host:~/DIR$ python3 -m venv venv
user@host:~/DIR$ source venv/bin/activate
(venv) user@host:~/DIR$ pip install -r requirements.txt

Note

  • Le directory e i file sono stati nominati in modo tale da essere facilmente correlati al contenuto presentato in ogni capitolo.
  • Il frequente uso di concatenazione di stringhe da parte dell'autore è stato sostituito con l'interpolazione di stringhe per consentire una maggiore leggibilità e conformarsi a uno standard più moderno.
  • I nomi di file, variabili, funzioni, classi e metodi ora sono conformi agli standard di denominazione PEP 8.
  • La libreria optparse, ora deprecata, è stata sostituita con argparse in tutto il codice sorgente. Tutto il parsing degli argomenti ora è contenuto nell'ambito di esecuzione __main__ per ogni file. Tutti gli argomenti CLI che erano obbligatori per l'esecuzione degli script ma erano trattati come opzionali nel codice originale sono ora implementati come posizionali. Un prompt di usage è ora disponibile per tutti gli script che usano argparse fornendo l'argomento -h alla CLI. Lasciare le responsabilità sia di boundary che di controller al parser CLI non è certamente la scelta migliore in termini di architettura software, ma è stato lasciato così per la necessità di conformarsi all'intento del programmatore originale.
  • Tutte le occorrenze di violazioni PEP 8: E722 do not use bare except sono state rifattorizzate con clausole di eccezione più specifiche.
  • L'autore ha l'abitudine di aprire file/database e lasciarli in questo stato invece di chiamare il metodo close() sugli oggetti file/database aperti. Per questo motivo tutte le istanze di manipolazione di file e database sono state rifattorizzate utilizzando context manager.
  • L'uso di commenti che fanno riferimento alla codifica da utilizzare da parte dell'interprete (cioè # -*- coding: utf-8 -*-) è stato eliminato a causa della standardizzazione di UTF-8 come codifica predefinita per Python 3 (in sostituzione di ASCII da Python 2).

Refactoring

I file non elencati di seguito possono essere considerati rifattorizzati in un modo o nell'altro come stabilito nella sezione "Note".

  • chapter01/vuln_scanner.py era strutturato in modo tale che un file inesistente portasse a un'eccezione OSError in fase di esecuzione. Per questo motivo il controllo dell'iterazione che chiama check_vulns() è stato spostato nell'istruzione condizionale definita nella funzione principale.
  • chapter02/nmap_scan.py implementava una funzione principale unicamente allo scopo di chiamare la libreria deprecata optparse, che è stata sostituita da argparse. Per questo motivo la funzione principale è stata rimossa. Una struttura di controllo dell'iterazione che faceva parte della chiamata a optparse nel codice originale era implementata in modo tale che una nuova chiamata a nmap veniva eseguita per ogni porta scansionata. L'iterazione è stata spostata nella funzione nmap_scan per evitare spreco di cicli.
  • chapter02/ssh_command.py ha visto il suo codice di inizializzazione spostato nell'ambito di esecuzione __main__. I nomi delle variabili utilizzate nell'ambito esterno che entravano in conflitto con i nomi dei parametri delle funzioni sono stati modificati. Le informazioni del prompt di ritorno erano originariamente codificate e ora sono state decodificate per offrire una migliore leggibilità.

Traduzioni

I contributi in altre lingue possono essere consultati qui:

  • Tradotto in Turco da Bedirhan Budak

Contribuire

Per buon senso, prova prima a discutere il cambiamento che desideri apportare a questo repository tramite un ticket (issue).

  1. Assicurati che le modifiche che intendi introdurre portino effettivamente a una pull request. La modifica di una o due righe dovrebbe essere richiesta invece tramite un ticket (issue).
  2. Se necessario, aggiorna il file README.md con i dettagli relativi alle modifiche alla struttura del progetto.
  3. Assicurati che i messaggi di commit che includono le modifiche seguano uno standard. Se non sai come procedere, qui c'è un'ottima referenza su come farlo.
  4. La tua richiesta sarà esaminata il prima possibile (di solito entro 48 ore).
Scarica lo strumento
  • Sebbene completamente inadeguato dal punto di vista delle best practice, l'uso di variabili globali è stato lasciato invariato per preferire la produzione di pesanti deviazioni dalla logica del codice originale.
  • Il codice incluso nel Capitolo 5 del libro è stato rifattorizzato anche se in termini pratici può essere, al massimo, storico. Gran parte della sua funzionalità dipende non solo da casi molto specifici delineati come esempi dall'autore, ma anche da vulnerabilità che hanno cessato di essere realistiche negli ultimi anni (come lo sniffing del traffico da reti wireless 802.11 che si affidano ancora all'algoritmo di sicurezza WEP per la crittografia del traffico o, peggio, che non mantengono alcuna sicurezza) o l'assurda aspettativa di acquisizione di un modello specifico di UAV da parte del lettore se intende vedere il codice in azione. Per non affermare subito che lo sforzo investito nella lettura di questo capitolo è quasi inutile, posso aggiungere che una certa utilità può essere estratta dal codice relativo allo sniffing di probing e beacon requests, però.
  • Il codice del Capitolo 6 che fa riferimento a Google e Twitter si è rivelato troppo obsoleto nel modo in cui gestiscono le attuali API per valere la pena di essere rifattorizzato. Se sei interessato a gestirli, esegui il refactoring e invia una pull request a questo repository.
  • chapter02/ssh_brute.py importava pxssh come libreria autonoma, ma in realtà è una libreria all'interno di pexpect. Il bug portava a un ModuleNotFoundError ed è stato corretto. Il codice stesso come presentato nel libro era pieno di errori di indentazione che lo rendevano inutilizzabile ed è stato portato a uno stato funzionante.
  • chapter02/ssh_brutekey.py richiedeva una serie di chiavi pre-generate per funzionare; inoltre il libro indirizza il lettore ad acquisire tali chiavi tramite un URL che attualmente restituisce una risposta 403. Per questo motivo un archivio compresso contenente le chiavi è stato aggiunto alla sottodirectory chapter02.
  • chapter02/ssh_botnet.py aveva un'istruzione di import non utilizzata per optparse che è stata rimossa. Sembra essere un frammento di un tentativo abortito di implementare una CLI per questo script. Sorprendentemente è stato lasciato lì, anche nella versione stampata del libro. Il codice che inizializza la botnet e impartisce i suoi comandi è stato organizzato nell'ambito di esecuzione __main__ per motivi di standardizzazione. I due comandi impartiti ai bot sono stati unificati per evitare un numero eccessivo di istruzioni return.
  • chapter02/conficker.py ha rimosso una chiamata non utilizzata alla libreria sys.
  • chapter03/discover_networks.py ha dovuto essere reimplementato invece di essere semplicemente rifattorizzato. Originariamente non solo utilizzava la libreria deprecata mechanize, ma interagiva anche con il servizio WiGLE in un modo che non è più necessario, dato che WiGLE ora fornisce un'API. Per questo motivo il codice è stato standardizzato e una nuova funzione wigle_print è stata implementata utilizzando la libreria requests per inviare una richiesta HTTP GET autenticata a WiGLE. La risposta restituisce un oggetto JSON a cui è possibile accedere direttamente, rendendo inutile anche l'uso della libreria re. È stata aggiunta la gestione delle eccezioni per rendere lo script in grado di gestire i messaggi di risposta di errore inviati dall'API. Nota che questo script dipende da winreg, che funziona solo su installazioni Python sotto il sistema operativo Microsoft Windows e richiede privilegi di amministratore durante l'esecuzione per l'accesso alle chiavi del Registro. È necessario registrare un account su https://wigle.net/account per accedere all'API.
  • chapter03/pdf_read.py ora utilizza la libreria PyPDF4 invece della deprecata PyPDF. Il libro fa riferimento a un file PDF specifico nel testo ed è stato aggiunto alla sottodirectory chapter03.
  • chapter03/exif_fetch.py richiedeva un argomento features="html.parser" nella chiamata al costruttore dell'oggetto BeautifulSoup. È stato aggiunto alla riga 15. Questo script funziona solo su applicazioni web che racchiudono le immagini tra tag HTML img (una pratica rara nelle applicazioni web moderne che si affidano pesantemente a JavaScript).
  • chapter03/skype_parse.py utilizza il file main.db come esempio. È stato aggiunto alla sottodirectory chapter03/skype_profile per comodità.
  • chapter03/firefox_parse.py utilizza diversi file .sqlite come esempio. Sono stati aggiunti alla sottodirectory chapter03/firefox_profile per comodità.
  • chapter03/iphone_messages.py fa riferimento a file di backup di iPhone che non sono stati resi disponibili dall'autore. Per questo motivo il codice è stato rifattorizzato ma rimane non testato.
  • chapter04/geo_ip.py utilizzava la libreria deprecata pygeoip. Come suggerito dal suo creatore, ora dovrebbe essere usato geoip2. È stato fatto un tentativo di mantenere il codice appena implementato il più simile possibile all'implementazione originale del libro, ma alcune modifiche sono state necessarie per adattarsi alla nuova struttura del pacchetto geoip2 e ai suoi attributi. Il file del database necessario per eseguire lo script è stato scaricato da MaxMind e reso disponibile nella directory chapter04. È stata inoltre implementata una CLI utilizzando argparse.
  • chapter04/print_direction.py sollevava un'eccezione UnicodeDecodeError all'apertura del file nell'implementazione originale. È stato risolto aggiungendo un argomento rb al context manager che gestisce il file.
  • chapter04/find_ddos.py stampava l'indirizzo sorgente dell'attacco Hivemind come destinazione, rendendo l'output inutile. La variabile corretta dst viene ora visualizzata su stdout. Il libro fa riferimento a un file chiamato traffic.pcap che non è stato reso disponibile dall'autore, quindi il codice è stato rifattorizzato ma rimane non testato.
  • chapter04/test_domain_flux.py restituisce che zero richieste senza risposta sono state effettuate analizzando il file pcap fornito dall'autore. Per qualche motivo i pacchetti stessi non hanno il valore del campo DNS Resource Record impostato, quindi la condizione nella funzione dns_QR_test restituisce sempre false. Ciò premesso, la condizione che valuta il campo DNSRR è stata rimossa dall'istruzione condizionale e ora vengono analizzati tutti i pacchetti UDP che hanno la porta 53 come sorgente. Ciò si traduce in codice meno efficiente ma almeno restituisce i risultati come previsto nel libro.
  • chapter05/blue_bug.py utilizza la libreria PyBluez, che a sua volta richiede la libreria BlueZ e i file header come indicato nelle sue istruzioni di installazione. Queste dipendenze devono essere installate prima di installare PyBluez come requisito. Su Linux questo può essere eseguito impartendo il comando apt install bluetooth libbluetooth-dev. Il codice originale fa riferimento a un oggetto client_sock inesistente che è stato sostituito da phone_sock.
  • chapter05/ftp_sniff.py presentava un difetto logico che faceva visualizzare un nome utente sniffato ma nessuna password a causa di una scarsa implementazione di un'istruzione if... else. È stato corretto sostituendo l'istruzione condizionale con una clausola if annidata.
  • chapter05/ninja_print.py richiede la libreria obexftp per funzionare. Questa libreria è stata scritta per Python 2 e non è stata portata né sostituita da un equivalente fino ad oggi, quindi il codice rimane come scritto dall'autore nella sua versione Python 2.
  • chapter05/__init__.py e chapter06/__init__.py sono stati aggiunti per abilitare l'importazione dei moduli da chapter05/dup.py e chapter06/anon_browser.py, rispettivamente.
  • chapter06/anon_proxy.py è stato reimplementato con la libreria Python 3 MechanicalSoup. Integra le modifiche necessarie a proxy_test.py, useragent_test.py e print_cookies.py.
  • chapter06/anon_browser.py è stato anch'esso reimplementato con MechanicalSoup e ha subito alcune modifiche nel codice. La libreria cookielib è stata sostituita da http.cookiejar nel metodo costruttore della classe AnonBrowser e il parametro user_agents ora accetta una lista di stringhe invece di una tupla.
  • chapter06/link_parser.py è stato rifattorizzato utilizzando nuovi modi per gestire le implementazioni di re e bs4.