Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
WhoDat — WhoIs inversé pivotable / Fusion PDNS avec suivi et alertes des titulaires, plus API pour requêtes automatisées (JSON/CSV/TXT) | Kitploit
Outils/GitHubGitHub/mitrecnd/whodat
OSINT (Renseignement de Sources Ouvertes)ReconnaissanceExfiltration de DonnéesCollecte d'InformationsRenseignement sur les MenacesSécurité des APIAnalyse DNSAnalyse de JournauxArchived
GitHubmitrecnd/whodat

WhoDat

WhoIs inversé pivotable / Fusion PDNS avec suivi et alertes des titulaires, plus API pour requêtes automatisées (JSON/CSV/TXT)

15938il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

Projet WhoDat

NOTE : Pendant le développement de PyDat 5, les opérations internes ont changé de direction, ce qui a conduit à l'abandon du projet PyDat. Bien qu'une grande partie du travail ait été réalisée pour finaliser les capacités de PyDat 5, certaines capacités n'ont pas encore été entièrement testées.

Le projet WhoDat est une interface pour les données whoisxmlapi, ou toute donnée whois stockée dans ElasticSearch. Il intègre les données whois, les résolutions IP actuelles et le DNS passif. En plus de fournir une application interactive et pivotable permettant aux analystes d'effectuer des recherches, il dispose également d'une API qui permet une sortie au format JSON.

WhoDat a été initialement écrit par Chris Clark. L'implémentation originale est en PHP et est disponible dans ce dépôt sous le répertoire legacy_whodat. Le code a été réécrit à partir de zéro par Wesley Shields et Murad Khan en Python, et est disponible sous le répertoire pydat.

La version PHP est laissée pour ceux qui souhaitent l'exécuter, mais elle n'est pas aussi complète en fonctionnalités ou extensible que l'implémentation Python, et n'est pas supportée.

Pour plus d'informations sur l'implémentation PHP, veuillez consulter le readme. Pour plus d'informations sur l'implémentation Python, continuez à lire...

PyDat

pyDat est une implémentation Python du code WhoDat de Chris Clark. Elle est conçue pour être plus extensible et possède plus de fonctionnalités que l'implémentation PHP.

Prérequis

pyDat est une application Python 3.6+ qui nécessite les éléments suivants pour fonctionner :

  • ElasticSearch installé quelque part (la version 7.x est supportée)
  • Paquets Python (installés via le script d'installation)

Peuplement des données

Pour aider à peupler correctement la base de données, un programme appelé pydat-populator est fourni pour auto-peupler les données. Notez que les données provenant de whoisxmlapi ne semblent pas toujours cohérentes, donc des précautions doivent être prises lors de l'ingestion des données. D'autres tests doivent être effectués pour s'assurer que toutes les données sont correctement ingérées. Quiconque met en place sa base de données doit lire les options disponibles du script avant de l'exécuter pour s'assurer de l'avoir adapté à sa configuration. Voici la sortie de 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

Notez que lors de l'ajout d'une nouvelle version de données dans la base de données, vous devez utiliser soit le flag -x pour exclure certains champs qui ne sont pas importants pour suivre les modifications, soit le flag -n pour inclure des champs spécifiques qui sont sujets à examen. Cela réduira considérablement la quantité de données stockées entre les versions. Vous ne pouvez utiliser que -x ou -n, pas les deux en même temps, mais vous pouvez choisir ce qui convient le mieux à votre environnement. Par exemple, si vous recevez des mises à jour quotidiennes, vous pourriez décider que pour les mises à jour quotidiennes, vous vous souciez uniquement si contactEmail change, mais tous les trimestres, vous pourriez préférer n'exclure que certains champs que vous jugez sans importance.

Fichier de configuration

Pour gagner du temps sur l'utilisation répétitive des flags, pydat-populator accepte un fichier de configuration. Veuillez consulter le fichier de configuration d'exemple pour un exemple de création d'un fichier de configuration.

Exécuter pyDat

pyDat ne fournit aucune donnée en soi. Vous devez fournir vos propres données whois dans un magasin de données ElasticSearch.

Peupler ElasticSearch avec les données whoisxmlapi (Ubuntu 20.04 LTS)

  • Installez ElasticSearch. Utiliser Docker est le mécanisme le plus simple
  • Téléchargez le dernier dump trimestriel de la base de données whoisxmlapi (le plus petit possible).
  • Extrayez les fichiers csv.
  • Utilisez le programme inclus une fois le paquet installé :
root@kitploit:~
pydat-populator -u localhost:9200 -f ~/whois/data/1.csv -v -s -x Audit_auditUpdatedDate,updatedDate,standardRegUpdatedDate,expiresDate,standardRegExpiresDate

Installation

PyDat 5 est une application divisée en backend/frontend qui utilise Python Flask pour fournir une API REST et ReactJS pour fournir une interface utilisateur Web interactive. Le moyen le plus simple d'utiliser l'application est de construire une image Docker.

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

L'image créée compilera et installera les composants frontend dans le backend, permettant le déploiement complet de l'application.

L'application peut ensuite être déployée en créant un fichier de configuration de déploiement et en utilisant 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

Générez un fichier de configuration en copiant le fichier config_example.py sous le nom config.py dans le même répertoire que le fichier docker-compose.yml.

Le backend Python peut également être installé en utilisant pip. Cela est utile si vous souhaitez exécuter nativement la capacité de peuplement des données. Notez que cela ne contient aucun composant frontend car ils ne sont pas pré-compilés. Référez-vous au dockerfile si vous souhaitez compiler et installer manuellement le frontend.

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

L'installation du paquet vous donnera accès au programme pydat-populator mentionné ci-dessus.

API pyDat

PyDat 5 introduit une API REST mise à jour mais maintient un ensemble d'endpoints v1 pour approximer la sortie qui serait renvoyée par Pydat 4. En raison de certains changements structurels entre pyDat 4 et 5, la sortie ne sera pas exactement la même.

Endpoints Pydat v1

Les endpoints suivants sont exposés :

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

L'endpoint metadata renvoie les métadonnées disponibles pour les données dans la base de données. Spécifier une version renverra les métadonnées pour cette version spécifique.

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 vous permet d'obtenir des informations sur un nom de domaine spécifique. Par défaut, cela renverra des informations pour toute version d'un domaine trouvé dans la base de données. Vous pouvez spécifier plus d'informations pour obtenir des versions spécifiques des informations du domaine ou pour obtenir la dernière entrée. Vous pouvez également obtenir un diff entre deux versions d'un domaine pour voir ce qui a changé.

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 vous permet de rechercher des domaines en fonction d'une clé spécifiée. Actuellement, les clés suivantes sont supportées :

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

Similaire à l'endpoint domain, vous pouvez spécifier les versions des données que vous recherchez.

Exemples de requêtes :

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 de syntaxe avancée

root@kitploit:~
api/v1/query

Cet endpoint accepte 4 paramètres via une requête GET :

root@kitploit:~
query - La requête pour rechercher dans ES
size - Le nombre d'éléments à retourner (taille de page)
page - La page à retourner, en combinant ceci avec size vous pouvez obtenir les résultats par morceaux
unique - Essaie de retourner l'entrée la plus récente par domainName

Note sur le paramètre unique : Si vous utilisez le paramètre unique, notez que le pagination des résultats est désactivée, mais le paramètre size sera toujours utilisé pour contrôler le nombre de résultats retournés.

Endpoints PyDat v2

Les endpoints suivants sont exposés :

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

Ces endpoints sont similaires à leurs équivalents v1 mais leur format de réponse diffère.

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

Il s'agit d'un nouvel endpoint qui vous permet de résoudre un nom de domaine en adresses IP. Notez que cette capacité peut être désactivée par le backend. Veuillez appeler l'endpoint /settings pour vous assurer que cette capacité est activée avant de l'appeler.

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

Cet endpoint vous permet d'obtenir un diff entre deux versions d'un domaine pour voir ce qui a changé. Il attend une requête JSON de la forme suivante :

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

Cet endpoint retourne des informations pour un nom de domaine donné et attend une requête JSON de la forme suivante :

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

Cet endpoint supporte la capacité de syntaxe de requête 'avancée'. Il attend une requête JSON de la forme suivante :

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

Cet endpoint fournit des informations de santé sur le cluster Elastic.

root@kitploit:~
api/v2/settings

Cet endpoint est principalement utilisé par le frontend pour déterminer dynamiquement quelles capacités sont activées par l'application backend.

Migration de PyDat 4 vers 5

Malheureusement, en raison de changements structurels dans la façon dont les données sont stockées dans Elastic, pyDat 5 n'est pas rétrocompatible avec pyDat 4. Cela signifie que les données devront être nouvellement ingérées dans un cluster ElasticSearch pour être utilisées avec pyDat 5.

Aspects légaux

pyDat est copyright de The MITRE Corporation 2021.

L'implémentation PHP est copyright de Chris Clark, 2013. Contactez-le à [email protected].

Les versions PHP et Python sont sous la même licence.

pyDat est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, ou (à votre choix) toute version ultérieure.

pyDat est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.

Vous devriez avoir reçu une copie de la Licence Publique Générale GNU avec pyDat. Sinon, consultez http://www.gnu.org/licenses/.

Approuvé pour diffusion publique ; Distribution illimitée 14-1633

Télécharger l’outil