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
Strumenti/GitHubGitHub/mitrecnd/whodat
OSINT (Open Source Intelligence)RicognizioneEsfiltrazione DatiRaccolta InformazioniThreat IntelligenceSicurezza delle APIAnalisi DNSAnalisi dei LogArchived
GitHubmitrecnd/whodat

WhoDat

Pivotable Reverse WhoIs / PDNS Fusion con Registrant Tracking e Alerting più API per query automatizzate (JSON/CSV/TXT)

Vedi Repository
159384 anni faRevisionato da Kitploit

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
WhoDat — Pivotable Reverse WhoIs / PDNS Fusion con Registrant Tracking e Alerting più API per query automatizzate (JSON/CSV/TXT) | Kitploit

Progetto WhoDat

NOTA: Durante lo sviluppo di PyDat 5, le operazioni interne hanno cambiato direzione, portando al ritiro del progetto PyDat. Sebbene gran parte del lavoro sia stato fatto per finalizzare le capacità di PyDat 5, alcune capacità rimangono non completamente testate.

Il progetto WhoDat è un'interfaccia per i dati whoisxmlapi, o per qualsiasi dato whois presente in ElasticSearch. Integra dati whois, risoluzioni IP correnti e DNS passivo. Oltre a fornire un'applicazione interattiva e orientabile per gli analisti per effettuare ricerche, dispone anche di un'API che consente l'output in formato JSON.

WhoDat è stato originariamente scritto da Chris Clark. L'implementazione originale è in PHP ed è disponibile in questo repository nella directory legacy_whodat. Il codice è stato riscritto da zero da Wesley Shields e Murad Khan in Python, ed è disponibile nella directory pydat.

La versione PHP è lasciata per coloro che vogliono eseguirla, ma non è completa o estensibile come l'implementazione Python, e non è supportata.

Per maggiori informazioni sull'implementazione PHP, consulta il readme. Per maggiori informazioni sull'implementazione Python, continua a leggere...

PyDat

pyDat è un'implementazione Python del codice WhoDat di Chris Clark. È progettato per essere più estensibile e ha più funzionalità rispetto all'implementazione PHP.

Prerequisiti

pyDat è un'applicazione Python 3.6+ che richiede quanto segue per essere eseguita:

  • ElasticSearch installato da qualche parte (è supportata la versione 7.x)
  • pacchetti Python (installati tramite script di setup)

Popolamento dei dati

Per aiutare a popolare correttamente il database, viene fornito un programma chiamato pydat-populator per popolare automaticamente i dati. Nota che i dati provenienti da whoisxmlapi non sembrano essere sempre coerenti, quindi è necessario prestare attenzione durante l'importazione dei dati. Sono necessari ulteriori test per garantire che tutti i dati vengano importati correttamente. Chiunque configuri il proprio database dovrebbe leggere i flag disponibili per lo script prima di eseguirlo per assicurarsi di averlo adattato alla propria configurazione. Di seguito è riportato l'output di pydat-populator -h:

root@kitploit:~
usage: pydat-populator [-h] [-c CONFIG] [--debug] [--debug-level DEBUG_LEVEL]
                    [-x EXCLUDE [EXCLUDE ...]] [-n INCLUDE [INCLUDE ...]]
                    [--ignore-field-prefixes [IGNORE_FIELD_PREFIXES [IGNORE_FIELD_PREFIXES ...]]]
                    [-e EXTENSION] [-v] [-s] [--pipelines PIPELINES]
                    [--shipper-threads SHIPPER_THREADS]
                    [--fetcher-threads FETCHER_THREADS]
                    [--bulk-ship-size BULK_SHIP_SIZE]
                    [--bulk-fetch-size BULK_FETCH_SIZE]
                    [-u [ES_URI [ES_URI ...]]] [--es-user ES_USER]
                    [--es-pass ES_PASSWORD] [--cacert ES_CA_CERT]
                    [--es-disable-sniffing] [-p ES_INDEX_PREFIX]
                    [--rollover-size ES_ROLLOVER_DOCS] [--ask-pass]
                    [-r | --config-template-only | --clear-interrupted-flag]
                    [-f INGEST_FILE | -d INGEST_DIRECTORY] [-D INGEST_DAY]
                    [-o COMMENT]

optional arguments:
-h, --help            show this help message and exit
-c CONFIG, --config CONFIG
                        location of configuration file for
                        environmentparameter configuration (example yaml file
                        in /backend)
--debug               Enables debug logging
--debug-level DEBUG_LEVEL
                        Debug logging level [0-3] (default: 1)
-x EXCLUDE [EXCLUDE ...], --exclude EXCLUDE [EXCLUDE ...]
                        list of keys to exclude if updating entry
-n INCLUDE [INCLUDE ...], --include INCLUDE [INCLUDE ...]
                        list of keys to include if updating entry (mutually
                        exclusive to -x)
--ignore-field-prefixes [IGNORE_FIELD_PREFIXES [IGNORE_FIELD_PREFIXES ...]]
                        list of fields (in whois data) to ignore when
                        extracting and inserting into ElasticSearch
-e EXTENSION, --extension EXTENSION
                        When scanning for CSV files only parse files with
                        given extension (default: csv)
-v, --verbose         Be verbose
-s, --stats           Print out Stats after running
-r, --redo            Attempt to re-import a failed import or import more
                        data, uses stored metadata from previous run
--config-template-only
                        Configure the ElasticSearch template and then exit
--clear-interrupted-flag
                        Clear the interrupted flag, forcefully (NOT
                        RECOMMENDED)
-f INGEST_FILE, --file INGEST_FILE
                        Input CSV file
-d INGEST_DIRECTORY, --directory INGEST_DIRECTORY
                        Directory to recursively search for CSV files --
                        mutually exclusive to '-f' option
-D INGEST_DAY, --ingest-day INGEST_DAY
                        Day to use for metadata, in the format 'YYYY-MM-dd',
                        e.g., '2021-01-01'. Defaults to todays date, use
                        'YYYY-MM-00' to indicate a quarterly ingest, e.g.,
                        2021-04-00
-o COMMENT, --comment COMMENT
                        Comment to store with metadata

Performance Options:
--pipelines PIPELINES
                        Number of pipelines (default: 2)
--shipper-threads SHIPPER_THREADS
                        How many threads per pipeline to spawn to send bulk ES
                        messages. The larger your cluster, the more you can
                        increase this, defaults to 1
--fetcher-threads FETCHER_THREADS
                        How many threads to spawn to search ES. The larger
                        your cluster, the more you can increase this, defaults
                        to 2
--bulk-ship-size BULK_SHIP_SIZE
                        Size of Bulk Elasticsearch Requests (default: 10)
--bulk-fetch-size BULK_FETCH_SIZE
                        Number of documents to search for at a time (default:
                        50), note that this will be multiplied by the number
                        of indices you have, e.g., if you have 10
                        pydat-<number> indices it results in a request for 500
                        documents

Elasticsearch Options:
-u [ES_URI [ES_URI ...]], --es-uri [ES_URI [ES_URI ...]]
                        Location(s) of ElasticSearch Server (e.g.,
                        foo.server.com:9200) Can take multiple endpoints
--es-user ES_USER     Username for ElasticSearch when Basic Auth is enabled
--es-pass ES_PASSWORD
                        Password for ElasticSearch when Basic Auth is enabled
--cacert ES_CA_CERT   Path to a CA Certicate bundle to enable https support
--es-disable-sniffing
                        Disable ES sniffing, useful when ssl
                        hostnameverification is not working properly
-p ES_INDEX_PREFIX, --index-prefix ES_INDEX_PREFIX
                        Index prefix to use in ElasticSearch (default: pydat)
--rollover-size ES_ROLLOVER_DOCS
                        Set the number of documents after which point a new
                        index should be created, defaults to 50 million, note
                        that this is fuzzy since the index count isn't
                        continuously updated, so should be reasonably below 2
                        billion per ES shard and should take your ES
                        configuration into consideration
--ask-pass            Prompt for ElasticSearch password

Nota che quando si aggiunge una nuova versione dei dati al database, si dovrebbe usare il flag -x per escludere determinati campi che non sono importanti per tenere traccia delle modifiche, oppure il flag -n per includere campi specifici soggetti a controllo. Ciò ridurrà significativamente la quantità di dati memorizzati tra le versioni. Puoi usare solo -x o -n, non entrambi contemporaneamente, ma puoi scegliere quello più adatto al tuo ambiente. Ad esempio, se ricevi aggiornamenti giornalieri, potresti decidere che per gli aggiornamenti giornalieri ti interessa solo se contactEmail cambia, ma ogni trimestre potresti invece voler escludere solo alcuni campi che non ritieni importanti.

File di configurazione

Per risparmiare tempo sull'uso ripetitivo dei flag, pydat-populator accetta un file di configurazione. Consulta il config di esempio per un esempio di come creare un file di configurazione.

Esecuzione di pyDat

pyDat non fornisce alcun dato da solo. Devi fornire i tuoi dati whois in un archivio dati ElasticSearch.

Popolamento di ElasticSearch con dati whoisxmlapi (Ubuntu 20.04 LTS)

  • Installa ElasticSearch. Usare Docker è il meccanismo più semplice
  • Scarica l'ultimo dump trimestrale del database whoisxmlapi ridotto (il più piccolo possibile).
  • Estrai i file csv.
  • Usa il programma incluso quando il pacchetto è installato:
root@kitploit:~
pydat-populator -u localhost:9200 -f ~/whois/data/1.csv -v -s -x Audit_auditUpdatedDate,updatedDate,standardRegUpdatedDate,expiresDate,standardRegExpiresDate

Installazione

PyDat 5 è un'applicazione suddivisa in backend/frontend che utilizza Python Flask per fornire un'API REST e ReactJS per fornire un'interfaccia utente web interattiva. Il modo più semplice per usare l'app è creare un'immagine docker.

root@kitploit:~
cd pydat/
docker build -t mitrecnd/pydat:5

L'immagine creata compilerà e installerà i componenti frontend nel backend, consentendo il deployment dell'app completa.

L'app può quindi essere distribuita creando un file di configurazione del deployment e usando docker-compose:

root@kitploit:~
version: '3'
root@kitploit:~
services:
    pydat:
        image: mitrecnd/pydat:5
        volumes:
            - "./config.py:/opt/pydat/config.py:ro"
        ports:
            - 127.0.0.1:8888:8888

Genera un file di configurazione copiando il file config_example.py come config.py nella stessa directory del file docker-compose.yml.

Il backend Python può anche essere installato usando pip. Questo è utile se vuoi eseguire nativamente la funzionalità di popolamento dei dati. Nota che questo non contiene alcun componente frontend poiché non vengono pre-compilati. Fai riferimento al dockerfile se desideri compilare e installare manualmente il frontend.

root@kitploit:~
cd pydat/backend/
pip install ./

L'installazione del pacchetto ti darà accesso al programma pydat-populator menzionato sopra.

API di pyDat

PyDat 5 introduce un'API REST aggiornata ma mantiene un insieme di endpoint API v1 per approssimare l'output che sarebbe stato restituito da Pydat 4. A causa di alcuni cambiamenti strutturali tra pyDat 4 e 5, l'output non sarà esattamente lo stesso.

Endpoint Pydat v1

I seguenti endpoint sono esposti:

root@kitploit:~
api/v1/metadata/
root@kitploit:~
api/v1/metadata/<version>/

L'endpoint metadata restituisce i metadati disponibili per i dati nel database. Specificare una versione restituirà i metadati per quella versione specifica.

root@kitploit:~
api/v1/domain/<domainName>/
root@kitploit:~
api/v1/domain/<domainName>/latest/
api/v1/domain/<domainName>/<version>/
api/v1/domain/<domainName>/<version1>/<version2>/
api/v1/domain/<domainName>/diff/<version1>/<version2>/

L'endpoint domain ti consente di ottenere informazioni su un nome di dominio specifico. Per impostazione predefinita, restituirà informazioni per qualsiasi versione di un dominio trovato nel database. Puoi specificare più informazioni per ottenere versioni specifiche delle informazioni sul dominio o per ottenere l'ultima voce. Puoi anche ottenere un diff tra due versioni di un dominio per vedere cosa è cambiato.

root@kitploit:~
api/v1/domains/<searchKey>/<searchValue>/
root@kitploit:~
api/v1/domains/<searchKey>/<searchValue>/latest/
api/v1/domains/<searchKey>/<searchValue>/<version>/
api/v1/domains/<searchKey>/<searchValue>/<version1>/<version2>/

L'endpoint domains ti consente di cercare domini in base a una chiave specificata. Attualmente sono supportate le seguenti chiavi:

root@kitploit:~
domainName
root@kitploit:~
registrant_name
contactEmail
registrant_telephone

Simile all'endpoint domain, puoi specificare quali versioni dei dati stai cercando.

Query di esempio:

root@kitploit:~
curl http://pydat.myorg.domain/ajax/domain/google.com/latest/
root@kitploit:~
curl http://pydat.myorg.domain/ajax/domains/domainName/google.com/

Endpoint di sintassi avanzata

root@kitploit:~
api/v1/query

Questo endpoint accetta 4 parametri tramite una richiesta GET:

root@kitploit:~
query - La query con cui cercare ES
size - Il numero di elementi da restituire (dimensione della pagina)
page - La pagina da restituire, combinandola con size puoi ottenere i risultati a blocchi
unique - Tenta di restituire l'ultima voce per domainName

Nota sul parametro unique: Se stai usando il parametro unique, nota che l'impaginazione dei risultati è disabilitata, ma il parametro size verrà comunque utilizzato per controllare il numero di risultati restituiti.

Endpoint PyDat v2

I seguenti endpoint sono esposti:

root@kitploit:~
api/v2/metadata
root@kitploit:~
api/v2/metadata/<version>

Questi endpoint sono simili alle loro controparti v1 ma il formato della risposta differisce.

root@kitploit:~
api/v2/resolve/<domain>

Questo è un nuovo endpoint che ti consente di risolvere un nome di dominio in indirizzi IP. Nota che questa funzionalità può essere disabilitata dal backend. Effettua una chiamata all'endpoint /settings per assicurarti che questa funzionalità sia abilitata prima di chiamarlo.

root@kitploit:~
api/v2/domains/diff [POST]

Questo endpoint ti consente di ottenere un diff tra due versioni di un dominio per vedere cosa è cambiato. Si aspetta una richiesta JSON con la seguente forma:

root@kitploit:~
{
root@kitploit:~
    domain: "mydomain.example",
    version1: 1,
    version2: 2
}
root@kitploit:~
api/v2/domain [POST]

Questo endpoint restituisce informazioni per un dato nome di dominio e si aspetta una richiesta JSON con la seguente forma:

root@kitploit:~
{
root@kitploit:~
    value: "mydomain.example",
    version: 1, # Optional
    chunk_size: 50, # Optional
    offset: 0 # Optional
}
root@kitploit:~
api/v2/query [POST]

Questo endpoint supporta la funzionalità di sintassi di query 'avanzata'. Si aspetta una richiesta JSON con la seguente forma:

root@kitploit:~
{
root@kitploit:~
    query: "myquery",
    chunk_size: 50, # Optional
    offset: 0, #Optional
    unique: false, # Optional
    sort_keys: [ # Optional
        "domainName",
        "registrant_name",
        "contactEmail",
        "standardRegCreatedDate",
        "registrant_telephone",
        "dataVersion",
        "_score",
    ]
}
root@kitploit:~
api/v2/info

Questo endpoint fornisce informazioni sullo stato del cluster Elastic.

root@kitploit:~
api/v2/settings

Questo endpoint è principalmente utilizzato dal frontend per determinare dinamicamente quali funzionalità sono abilitate dall'applicazione backend.

Migrazione da PyDat 4 a 5

Sfortunatamente, a causa di cambiamenti strutturali nel modo in cui i dati vengono memorizzati in Elastic, pyDat 5 non è compatibile con le versioni precedenti di pydat 4. Ciò significa che i dati dovranno essere nuovamente importati in un cluster ElasticSearch per essere utilizzati con pyDat 5.

Note legali

pyDat è protetto da copyright di The MITRE Corporation 2021.

L'implementazione PHP è protetta da copyright di Chris Clark, 2013. Contattalo all'indirizzo [email protected].

Le versioni PHP e Python sono concesse in licenza con la stessa licenza.

pyDat è software libero: puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation, versione 3 della Licenza, o (a tua scelta) qualsiasi versione successiva.

pyDat è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi la GNU General Public License per maggiori dettagli.

Dovresti aver ricevuto una copia della GNU General Public License insieme a pyDat. Se non è così, vedi http://www.gnu.org/licenses/.

Approved for Public Release; Distribution Unlimited 14-1633

Scarica lo strumento