Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
WhoDat — Pivotable Reverse WhoIs / Fusión PDNS con Seguimiento de Titulares y Alertas más API para consultas automatizadas (JSON/CSV/TXT) | Kitploit
Herramientas/GitHubGitHub/mitrecnd/whodat
OSINT (Inteligencia de Fuentes Abiertas)ReconocimientoExfiltración de DatosRecopilación de InformaciónInteligencia de AmenazasSeguridad de APIsAnálisis de DNSAnálisis de RegistrosArchived
GitHubmitrecnd/whodat

WhoDat

Pivotable Reverse WhoIs / Fusión PDNS con Seguimiento de Titulares y Alertas más API para consultas automatizadas (JSON/CSV/TXT)

159385hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

Proyecto WhoDat

NOTA: Durante el desarrollo de PyDat 5, las operaciones internas cambiaron su dirección, lo que llevó al retiro del proyecto PyDat. Aunque se ha realizado gran parte del trabajo para finalizar las capacidades de PyDat 5, algunas capacidades aún no se han probado completamente.

El proyecto WhoDat es una interfaz para datos de whoisxmlapi, o cualquier dato whois que resida en ElasticSearch. Integra datos whois, resoluciones de IP actuales y DNS pasivo. Además de proporcionar una aplicación interactiva y pivotable para que los analistas realicen investigaciones, también tiene una API que permitirá la salida en formato JSON.

WhoDat fue originalmente escrito por Chris Clark. La implementación original está en PHP y está disponible en este repositorio bajo el directorio legacy_whodat. El código fue reescrito desde cero por Wesley Shields y Murad Khan en Python, y está disponible bajo el directorio pydat.

La versión PHP se deja para aquellos que quieran ejecutarla, pero no tiene tantas funciones ni es tan extensible como la implementación en Python, y no tiene soporte.

Para más información sobre la implementación en PHP, consulte el readme. Para más información sobre la implementación en Python, siga leyendo...

PyDat

pyDat es una implementación en Python del código WhoDat de Chris Clark. Está diseñado para ser más extensible y tener más características que la implementación en PHP.

PreReqs

pyDat es una aplicación de Python 3.6+ que requiere lo siguiente para ejecutarse:

  • ElasticSearch instalado en algún lugar (se admite la versión 7.x)
  • paquetes de Python (instalados mediante el script de configuración)

Data Population

Para ayudar a poblar correctamente la base de datos, se proporciona un programa llamado pydat-populator para auto-poblar los datos. Tenga en cuenta que los datos provenientes de whoisxmlapi no parecen ser siempre consistentes, por lo que se debe tener cuidado al ingerir datos. Se necesita realizar más pruebas para garantizar que todos los datos se ingieran correctamente. Cualquier persona que configure su base de datos debe leer las banderas disponibles para el script antes de ejecutarlo para asegurarse de haberlo ajustado a su configuración. A continuación se muestra la salida 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

Tenga en cuenta que al agregar una nueva versión de datos a la base de datos, debe usar la bandera -x para excluir ciertos campos que no son importantes para rastrear cambios, o la bandera -n para incluir campos específicos sujetos a escrutinio. Esto disminuirá significativamente la cantidad de datos almacenados entre versiones. Solo puede usar -x o -n, no ambos al mismo tiempo, pero puede elegir el que sea mejor para su entorno. Por ejemplo, si recibe actualizaciones diarias, puede decidir que para las actualizaciones diarias solo le importa si contactEmail cambia, pero cada trimestre quizás prefiera solo excluir ciertos campos que no considere importantes.

Config File

Para ahorrar tiempo en el uso repetitivo de banderas, pydat-populator acepta un archivo de configuración. Consulte el ejemplo de configuración para ver un ejemplo de cómo crear un archivo de configuración.

Running pyDat

pyDat no proporciona ningún dato por sí mismo. Debe proporcionar sus propios datos whois en un almacén de datos ElasticSearch.

Populating ElasticSearch with whoisxmlapi data (Ubuntu 20.04 LTS)

  • Instalar ElasticSearch. Usar Docker es el mecanismo más fácil.
  • Descargar el volcado de base de datos trimestral más reciente y recortado (lo más pequeño posible) de whoisxmlapi.
  • Extraer los archivos csv.
  • Usar el programa incluido cuando el paquete esté instalado:
root@kitploit:~
pydat-populator -u localhost:9200 -f ~/whois/data/1.csv -v -s -x Audit_auditUpdatedDate,updatedDate,standardRegUpdatedDate,expiresDate,standardRegExpiresDate

Installation

PyDat 5 es una aplicación dividida en backend/frontend que utiliza Python Flask para proporcionar una API REST y ReactJS para proporcionar una interfaz web interactiva. La forma más fácil de usar la aplicación es construir una imagen Docker.

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

La imagen creada compilará e instalará los componentes del frontend en el backend, permitiendo el despliegue de la aplicación completa.

La aplicación se puede desplegar creando un archivo de configuración de despliegue y 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

Genere un archivo de configuración copiando el archivo config_example.py como config.py al mismo directorio que el archivo docker-compose.yml.

El backend de Python también se puede instalar usando pip. Esto es útil si desea ejecutar de forma nativa la capacidad de poblar datos. Tenga en cuenta que esto no contiene ningún componente del frontend ya que no vienen precompilados. Consulte el dockerfile si desea compilar e instalar manualmente el frontend.

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

Instalar el paquete le dará acceso al programa pydat-populator mencionado anteriormente.

pyDat API

PyDat 5 introduce una API REST actualizada, pero mantiene un conjunto de endpoints de API v1 para aproximar la salida que se devolvería desde Pydat 4. Debido a algunos cambios estructurales entre pyDat 4 y 5, la salida no será exactamente la misma.

Pydat v1 Endpoints

Se exponen los siguientes endpoints:

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

El endpoint de metadatos devuelve los metadatos disponibles para los datos en la base de datos. Especificar una versión devolverá metadatos para esa versión específica.

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>/

El endpoint de dominio le permite obtener información sobre un nombre de dominio específico. Por defecto, devolverá información para cualquier versión de un dominio que se encuentre en la base de datos. Puede especificar más información para obtener versiones específicas de la información del dominio o para obtener la entrada más reciente. También puede obtener un diff entre dos versiones de un dominio para ver qué ha cambiado.

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>/

El endpoint de dominios le permite buscar dominios basados en una clave especificada. Actualmente se admiten las siguientes claves:

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

Similar al endpoint de dominio, puede especificar qué versiones de los datos está buscando.

Ejemplos de consultas:

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

Advanced Syntax Endpoint

root@kitploit:~
api/v1/query

Este endpoint toma 4 parámetros mediante una solicitud GET:

root@kitploit:~
query - The query to search ES with
size - The number of elements to return (aka page size)
page - The page to return, combining this with size you can get the results in chunks
unique - Attempts to return the latest entry per domainName

Nota sobre el parámetro unique: Si está usando el parámetro unique, tenga en cuenta que la paginación de resultados está deshabilitada, pero el parámetro size se seguirá usando para controlar la cantidad de resultados devueltos.

PyDat v2 Endpoints

Se exponen los siguientes endpoints:

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

Estos endpoints son similares a sus contrapartes v1 pero su formato de respuesta difiere.

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

Este es un nuevo endpoint que le permite resolver un nombre de dominio a direcciones IP. Tenga en cuenta que esta capacidad puede ser deshabilitada por el backend. Por favor, haga una llamada al endpoint /settings para asegurarse de que esta capacidad esté habilitada antes de llamarlo.

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

Este endpoint le permite obtener un diff entre dos versiones de un dominio para ver qué ha cambiado. Espera una solicitud JSON con la siguiente forma:

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

Este endpoint devuelve información para un nombre de dominio dado y espera una solicitud JSON con la siguiente forma:

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

Este endpoint admite la capacidad de sintaxis de consulta 'avanzada'. Espera una solicitud JSON con la siguiente 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

Este endpoint proporciona información de salud sobre el clúster de Elastic.

root@kitploit:~
api/v2/settings

Este endpoint es utilizado principalmente por el frontend para determinar dinámicamente qué capacidades están habilitadas por la aplicación backend.

PyDat 4 to 5 Migration

Desafortunadamente, debido a cambios estructurales en la forma en que se almacenan los datos en Elastic, pyDat 5 no es compatible con versiones anteriores de pydat 4. Esto significa que los datos deberán ser ingeridos nuevamente en un clúster de ElasticSearch para ser utilizados con pyDat 5.

Legal Stuff

pyDat tiene derechos de autor de The MITRE Corporation 2021.

La implementación en PHP tiene derechos de autor de Chris Clark, 2013. Contáctelo en [email protected].

Las versiones PHP y Python tienen la misma licencia.

pyDat es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o (a su elección) cualquier versión posterior.

pyDat se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para obtener más detalles.

Debería haber recibido una copia de la Licencia Pública General de GNU junto con pyDat. Si no es así, consulte http://www.gnu.org/licenses/.

Aprobado para publicación pública; Distribución ilimitada 14-1633

Descargar herramienta