Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
WhoDat — WhoIs Reverso Pivotável / Fusão PDNS com Rastreamento do Titular e Alertas, além de API para consultas automatizadas (JSON/CSV/TXT) | Kitploit
Ferramentas/GitHubGitHub/mitrecnd/whodat
OSINT (Inteligência de Fontes Abertas)ReconhecimentoExfiltração de DadosColeta de InformaçõesInteligência de AmeaçasSegurança de APIAnálise de DNSAnálise de LogsArchived
GitHubmitrecnd/whodat

WhoDat

WhoIs Reverso Pivotável / Fusão PDNS com Rastreamento do Titular e Alertas, além de API para consultas automatizadas (JSON/CSV/TXT)

15938há 4 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório

Projeto WhoDat

NOTA: Durante o desenvolvimento do PyDat 5, as operações internas mudaram de direção, levando à aposentadoria do projeto PyDat. Embora muito trabalho tenha sido feito para finalizar as capacidades do PyDat 5, algumas capacidades ainda não foram totalmente testadas.

O projeto WhoDat é uma interface para dados whoisxmlapi, ou qualquer dado whois armazenado no ElasticSearch. Ele integra dados whois, resoluções IP atuais e DNS passivo. Além de fornecer um aplicativo interativo e pivotável para analistas realizarem pesquisas, também possui uma API que permite saída em formato JSON.

WhoDat foi originalmente escrito por Chris Clark. A implementação original está em PHP e está disponível neste repositório no diretório legacy_whodat. O código foi reescrito do zero por Wesley Shields e Murad Khan em Python, e está disponível no diretório pydat.

A versão PHP é deixada para quem quiser executá-la, mas não é tão completa ou extensível quanto a implementação Python, e não é suportada.

Para mais informações sobre a implementação PHP, consulte o readme. Para mais informações sobre a implementação Python, continue lendo...

PyDat

pyDat é uma implementação em Python do código WhoDat de Chris Clark. Ela foi projetada para ser mais extensível e possui mais recursos do que a implementação PHP.

Pré-requisitos

pyDat é um aplicativo Python 3.6+ que requer o seguinte para ser executado:

  • ElasticSearch instalado em algum lugar (a versão 7.x é suportada)
  • pacotes Python (instalados via script de configuração)

População de Dados

Para ajudar a preencher corretamente o banco de dados, um programa chamado pydat-populator é fornecido para auto-povoar os dados. Observe que os dados provenientes de whoisxmlapi parecem nem sempre ser consistentes, portanto, deve-se ter cuidado ao ingerir dados. Mais testes precisam ser feitos para garantir que todos os dados sejam ingeridos corretamente. Qualquer pessoa que configure seu banco de dados deve ler as flags disponíveis para o script antes de executá-lo para garantir que o ajustou para sua configuração. A seguir está a saída 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

Observe que ao adicionar uma nova versão de dados ao banco de dados, você deve usar a flag -x para excluir certos campos que não são importantes para rastrear alterações, ou a flag -n para incluir campos específicos que estão sujeitos a escrutínio. Isso diminuirá significativamente a quantidade de dados armazenados entre versões. Você só pode usar -x ou -n, não ambos ao mesmo tempo, mas pode escolher o que for melhor para seu ambiente. Por exemplo, se você receber atualizações diárias, pode decidir que nas atualizações diárias só se importa se contactEmail mudar, mas a cada trimestre pode querer excluir apenas certos campos que considera menos importantes.

Arquivo de Configuração

Para economizar tempo no uso repetitivo de flags, pydat-populator aceita um arquivo de configuração. Consulte o arquivo de configuração de exemplo para um exemplo de como criar um arquivo de configuração.

Executando pyDat

pyDat não fornece dados por conta própria. Você deve fornecer seus próprios dados whois em um armazenamento de dados ElasticSearch.

Populando o ElasticSearch com dados whoisxmlapi (Ubuntu 20.04 LTS)

  • Instale o ElasticSearch. Usar Docker é o mecanismo mais fácil
  • Baixe o dump trimestral mais recente e mais leve (o menor possível) do whoisxmlapi.
  • Extraia os arquivos csv.
  • Use o programa incluído quando o pacote estiver instalado:
root@kitploit:~
pydat-populator -u localhost:9200 -f ~/whois/data/1.csv -v -s -x Audit_auditUpdatedDate,updatedDate,standardRegUpdatedDate,expiresDate,standardRegExpiresDate

Instalação

PyDat 5 é um aplicativo com backend/frontend separados que utiliza Python Flask para fornecer uma API REST e ReactJS para fornecer uma interface web interativa. A maneira mais fácil de usar o aplicativo é construir uma imagem docker.

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

A imagem criada compilará e instalará os componentes do frontend no backend, permitindo a implantação do aplicativo completo.

O aplicativo pode então ser implantado criando um arquivo de configuração de implantação 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

Gere um arquivo de configuração copiando o arquivo config_example.py como config.py para o mesmo diretório do arquivo docker-compose.yml.

O backend Python também pode ser instalado usando pip. Isso é útil se você deseja executar nativamente a capacidade de população de dados. Observe que isso não contém nenhum componente frontend, pois eles não vêm pré-compilados. Consulte o dockerfile se desejar compilar e instalar manualmente o frontend.

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

A instalação do pacote fornecerá acesso ao programa pydat-populator mencionado acima.

API pyDat

PyDat 5 introduz uma API REST atualizada, mas mantém um conjunto de endpoints v1 para aproximar a saída que seria retornada pelo Pydat 4. Devido a algumas mudanças estruturais entre pyDat 4 e 5, a saída não será exatamente a mesma.

Endpoints Pydat v1

Os seguintes endpoints estão expostos:

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

O endpoint de metadados retorna metadados disponíveis para os dados no banco de dados. Especificar uma versão retornará os metadados para essa versão 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>/

O endpoint de domínio permite obter informações sobre um nome de domínio específico. Por padrão, ele retornará informações para qualquer versão de um domínio encontrada no banco de dados. Você pode especificar mais informações para obter versões específicas das informações do domínio ou para obter a entrada mais recente. Você também pode obter uma diferença (diff) entre duas versões de um domínio para ver o que mudou.

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

O endpoint de domínios permite pesquisar domínios baseados em uma chave especificada. Atualmente, as seguintes chaves são suportadas:

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

Similar ao endpoint de domínio, você pode especificar quais versões dos dados está procurando.

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

Endpoint de Sintaxe Avançada

root@kitploit:~
api/v1/query

Este endpoint aceita 4 parâmetros via requisição GET:

root@kitploit:~
query - A consulta para pesquisar no ES
size - O número de elementos a retornar (tamanho da página)
page - A página a retornar, combinando com size você pode obter os resultados em blocos
unique - Tenta retornar a entrada mais recente por domainName

Nota sobre o parâmetro unique: Se você estiver usando o parâmetro unique, lembre-se que a paginação dos resultados é desabilitada, mas o parâmetro size ainda será usado para controlar o número de resultados retornados.

Endpoints PyDat v2

Os seguintes endpoints estão expostos:

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

Estes endpoints são similares aos seus equivalentes v1, mas seu formato de resposta difere.

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

Este é um novo endpoint que permite resolver um nome de domínio para endereços IP. Observe que esta capacidade pode ser desabilitada pelo backend. Faça uma chamada ao endpoint /settings para garantir que esta capacidade está habilitada antes de chamá-lo.

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

Este endpoint permite obter uma diferença (diff) entre duas versões de um domínio para ver o que mudou. Ele espera uma requisição JSON com o seguinte formato:

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

Este endpoint retorna informações para um nome de domínio específico e espera uma requisição JSON com o seguinte formato:

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

Este endpoint suporta a capacidade de sintaxe de consulta 'avançada'. Ele espera uma requisição JSON com o seguinte formato:

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

Este endpoint fornece informações de saúde sobre o cluster Elastic.

root@kitploit:~
api/v2/settings

Este endpoint é usado principalmente pelo frontend para determinar dinamicamente quais capacidades estão habilitadas pelo aplicativo backend.

Migração do PyDat 4 para o 5

Infelizmente, devido a mudanças estruturais na forma como os dados são armazenados no Elastic, pyDat 5 não é compatível com versões anteriores do pydat 4. Isso significa que os dados precisarão ser ingeridos novamente em um cluster ElasticSearch para serem usados com pyDat 5.

Aspectos Legais

pyDat é protegido por direitos autorais da The MITRE Corporation 2021.

A implementação PHP é protegida por direitos autorais de Chris Clark, 2013. Contate-o em [email protected].

As versões PHP e Python são licenciadas sob a mesma licença.

pyDat é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da GNU General Public License conforme publicada pela Free Software Foundation, seja na versão 3 da Licença, ou (a seu critério) qualquer versão posterior.

pyDat é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Consulte a GNU General Public License para mais detalhes.

Você deve ter recebido uma cópia da GNU General Public License junto com o pyDat. Caso contrário, veja http://www.gnu.org/licenses/.

Aprovado para Divulgação Pública; Distribuição Ilimitada 14-1633

Baixar ferramenta