Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
WhoDat — 피벗 가능한 Reverse WhoIs / PDNS Fusion, 등록자 추적 및 알림, 추가로 자동 쿼리용 API (JSON/CSV/TXT) | Kitploit
도구/GitHubGitHub/mitrecnd/whodat
OSINT (Open Source Intelligence)ReconnaissanceData ExfiltrationInformation GatheringThreat IntelligenceAPI SecurityDNS AnalysisLog AnalysisArchived
GitHubmitrecnd/whodat

WhoDat

피벗 가능한 Reverse WhoIs / PDNS Fusion, 등록자 추적 및 알림, 추가로 자동 쿼리용 API (JSON/CSV/TXT)

저장소 보기
159384년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

WhoDat 프로젝트

참고: PyDat 5 개발 중 내부 작업 방향이 변경되어 PyDat 프로젝트가 중단되었습니다. PyDat 5의 기능을 완성하기 위한 많은 작업이 이루어졌지만, 일부 기능은 완전히 테스트되지 않은 상태로 남아 있습니다.

WhoDat 프로젝트는 whoisxmlapi 데이터 또는 ElasticSearch에 저장된 모든 whois 데이터를 위한 인터페이스입니다. whois 데이터, 현재 IP 확인 정보 및 수동적 DNS를 통합합니다. 분석가가 연구를 수행할 수 있는 대화형 피벗 가능한 애플리케이션을 제공할 뿐만 아니라, JSON 형식으로 출력을 제공하는 API도 갖추고 있습니다.

WhoDat은 원래 Chris Clark이 작성했습니다. 원래 구현체는 PHP로 작성되었으며, 이 리포지토리의 legacy_whodat 디렉토리에서 확인할 수 있습니다. 코드는 Wesley Shields와 Murad Khan에 의해 Python으로 처음부터 다시 작성되었으며, pydat 디렉토리에서 제공됩니다.

PHP 버전은 실행을 원하는 사람들을 위해 남겨두었지만, Python 구현체만큼 기능이 풍부하거나 확장성이 좋지 않으며 지원되지 않습니다.

PHP 구현에 대한 자세한 내용은 readme를 참조하십시오. Python 구현에 대한 자세한 내용은 계속 읽어보십시오...

PyDat

pyDat는 Chris Clark의 WhoDat 코드를 Python으로 구현한 것입니다. PHP 구현보다 확장성이 뛰어나고 더 많은 기능을 제공하도록 설계되었습니다.

선행 조건

pyDat는 Python 3.6+ 애플리케이션으로, 실행을 위해 다음이 필요합니다:

  • ElasticSearch가 설치되어 있어야 함 (7.x 버전 지원)
  • Python 패키지 (설치 스크립트를 통해 설치)

데이터 채우기

데이터베이스를 올바르게 채우기 위해 pydat-populator라는 프로그램이 제공되어 데이터를 자동으로 채웁니다. whoisxmlapi에서 오는 데이터가 항상 일관된 것 같지는 않으므로 데이터를 수집할 때 주의해야 합니다. 모든 데이터가 올바르게 수집되도록 더 많은 테스트가 필요합니다. 데이터베이스를 설정하는 사람은 스크립트를 실행하기 전에 사용 가능한 플래그를 읽고 자신의 설정에 맞게 조정했는지 확인해야 합니다. 다음은 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

데이터베이스에 데이터의 새 버전을 추가할 때는 변경 사항을 추적하는 데 중요하지 않은 특정 필드를 제외하기 위해 -x 플래그를 사용하거나, 검토 대상이 되는 특정 필드만 포함하기 위해 -n 플래그를 사용해야 합니다. 이렇게 하면 버전 간에 저장되는 데이터 양이 크게 줄어듭니다. -x 또는 -n 중 하나만 사용할 수 있으며, 동시에 사용할 수 없습니다. 자신의 환경에 가장 적합한 것을 선택하면 됩니다. 예를 들어, 매일 업데이트를 받는 경우 contactEmail이 변경되는지만 관심이 있을 수 있지만, 분기마다는 중요하지 않다고 생각하는 특정 필드만 제외하고 싶을 수도 있습니다.

구성 파일

반복적인 플래그 사용 시간을 절약하기 위해 pydat-populator는 구성 파일을 사용합니다. 구성 파일을 만드는 방법에 대한 예제는 예제 구성을 참조하십시오.

pyDat 실행

pyDat는 자체적으로 데이터를 제공하지 않습니다. ElasticSearch 데이터 저장소에 자체 whois 데이터를 제공해야 합니다.

whoisxmlapi 데이터로 ElasticSearch 채우기 (Ubuntu 20.04 LTS)

  • ElasticSearch 설치. Docker를 사용하는 것이 가장 쉬운 방법입니다.
  • 최신 트리밍된 (가능한 가장 작은) whoisxmlapi 분기별 DB 덤프를 다운로드합니다.
  • csv 파일을 추출합니다.
  • 패키지가 설치된 경우 포함된 프로그램을 사용하십시오:
root@kitploit:~
pydat-populator -u localhost:9200 -f ~/whois/data/1.csv -v -s -x Audit_auditUpdatedDate,updatedDate,standardRegUpdatedDate,expiresDate,standardRegExpiresDate

설치

PyDat 5는 분할된 백엔드/프론트엔드 애플리케이션으로, REST API를 제공하기 위해 Python Flask를 사용하고 대화형 웹 UI를 제공하기 위해 ReactJS를 사용합니다. 애플리케이션을 사용하는 가장 쉬운 방법은 도커 이미지를 빌드하는 것입니다.

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

생성된 이미지는 프론트엔드 구성 요소를 백엔드로 컴파일하고 설치하여 전체 앱을 배포할 수 있게 합니다.

그런 다음 배포 구성 파일을 만들고 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

config_example.py 파일을 config.py로 복사하여 docker-compose.yml 파일과 동일한 디렉토리에 구성 파일을 생성합니다.

Python 백엔드는 pip를 사용하여 설치할 수도 있습니다. 이는 데이터 채우기 기능을 기본적으로 실행하려는 경우 유용합니다. 프론트엔드 구성 요소는 미리 컴파일되어 제공되지 않으므로 여기에는 포함되지 않습니다. 프론트엔드를 수동으로 컴파일하고 설치하려면 dockerfile을 참조하십시오.

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

패키지를 설치하면 위에서 언급한 pydat-populator 프로그램에 액세스할 수 있습니다.

pyDat API

PyDat 5는 업데이트된 REST API를 도입했지만, PyDat 4에서 반환되었을 출력에 가깝게 v1 API 엔드포인트 세트를 유지합니다. pyDat 4와 5 사이의 일부 구조적 변경으로 인해 출력이 정확히 동일하지는 않습니다.

Pydat v1 엔드포인트

다음 엔드포인트가 제공됩니다:

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

메타데이터 엔드포인트는 데이터베이스에 있는 데이터에 사용 가능한 메타데이터를 반환합니다. 버전을 지정하면 해당 특정 버전의 메타데이터를 반환합니다.

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

도메인 엔드포인트를 사용하면 특정 도메인 이름에 대한 정보를 얻을 수 있습니다. 기본적으로 데이터베이스에서 찾은 모든 버전의 도메인에 대한 정보를 반환합니다. 더 많은 정보를 지정하여 특정 버전의 도메인 정보를 얻거나 최신 항목을 얻을 수 있습니다. 또한 두 도메인 버전 간의 차이점(diff)을 확인하여 변경된 사항을 볼 수 있습니다.

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

domains 엔드포인트를 사용하면 지정된 키를 기반으로 도메인을 검색할 수 있습니다. 현재 지원되는 키는 다음과 같습니다:

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

도메인 엔드포인트와 유사하게 데이터의 어떤 버전을 찾고 있는지 지정할 수 있습니다.

쿼리 예시:

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

고급 구문 엔드포인트

root@kitploit:~
api/v1/query

이 엔드포인트는 GET 요청을 통해 4개의 매개변수를 받습니다:

root@kitploit:~
query - ES에서 검색할 쿼리
size - 반환할 요소 수 (페이지 크기)
page - 반환할 페이지, 이 값을 size와 결합하여 결과를 청크 단위로 가져올 수 있습니다.
unique - 도메인 이름당 최신 항목을 반환하려고 시도합니다.

unique 매개변수 참고: unique 매개변수를 사용하는 경우 결과의 페이징이 비활성화되지만, size 매개변수는 반환되는 결과 수를 제어하는 데 여전히 사용됩니다.

PyDat v2 엔드포인트

다음 엔드포인트가 제공됩니다:

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

이 엔드포인트는 v1 해당 엔드포인트와 유사하지만 응답 형식이 다릅니다.

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

이것은 도메인 이름을 IP 주소로 확인할 수 있는 새로운 엔드포인트입니다. 이 기능은 백엔드에서 비활성화될 수 있습니다. 호출하기 전에 /settings 엔드포인트를 호출하여 이 기능이 활성화되어 있는지 확인하십시오.

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

이 엔드포인트를 사용하면 두 도메인 버전 간의 차이점(diff)을 확인하여 변경된 사항을 볼 수 있습니다. 다음 형식의 JSON 요청이 필요합니다:

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

이 엔드포인트는 주어진 도메인 이름에 대한 정보를 반환하며, 다음 형식의 JSON 요청이 필요합니다:

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

이 엔드포인트는 '고급' 쿼리 구문 기능을 지원합니다. 다음 형식의 JSON 요청이 필요합니다:

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

이 엔드포인트는 Elastic 클러스터에 대한 상태 정보를 제공합니다.

root@kitploit:~
api/v2/settings

이 엔드포인트는 주로 프론트엔드가 백엔드 애플리케이션에서 활성화된 기능을 동적으로 결정하는 데 사용됩니다.

PyDat 4에서 5로 마이그레이션

불행히도 Elastic에서 데이터가 저장되는 방식의 구조적 변경으로 인해 pyDat 5는 pyDat 4와 호환되지 않습니다. 즉, pyDat 5에서 사용하려면 데이터를 새로 ElasticSearch 클러스터에 수집해야 합니다.

법적 사항

pyDat는 The MITRE Corporation 2021의 저작권입니다.

PHP 구현은 Chris Clark, 2013의 저작권입니다. [email protected]로 연락하십시오.

PHP와 Python 버전은 동일한 라이선스에 따라 사용이 허가됩니다.

pyDat는 무료 소프트웨어입니다. 자유 소프트웨어 재단(Free Software Foundation)이 발행한 GNU 일반 공중 사용 허가서(GNU General Public License) 버전 3 또는 (선택에 따라) 이후 버전의 조건에 따라 이를 재배포하거나 수정할 수 있습니다.

pyDat는 유용할 것이라는 희망으로 배포되지만, 어떠한 보증도 제공하지 않습니다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증 조차도 제공하지 않습니다. 자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오.

pyDat와 함께 GNU 일반 공중 사용 허가서의 사본을 받았을 것입니다. 받지 못했다면 http://www.gnu.org/licenses/를 참조하십시오.

공개 배포 승인; 배포 무제한 14-1633

도구 다운로드