업데이트로 돌아가기
New releaseJul 20, 2026

dnsx v1.3.0

dnsx는 사용자가 제공한 리졸버 목록을 사용하여 원하는 여러 DNS 쿼리를 실행할 수 있는 빠르고 다목적 DNS 툴킷입니다.

공유

dnsx

DNS 쿼리 실행을 위해 설계된 빠르고 다목적 DNS 툴킷

기능설치사용법dnsx 실행와일드카드참고사항Discord 참여


dnsxretryabledns 라이브러리를 통해 다양한 프로브를 실행하도록 설계된 빠르고 다목적 DNS 툴킷입니다. 여러 DNS 쿼리, 사용자 제공 리졸버, shuffledns와 유사한 DNS 와일드카드 필터링 등을 지원합니다.

기능

dnsx

  • DNS 레코드를 조회하는 간단하고 편리한 유틸리티
  • A, AAAA, CNAME, PTR, NS, MX, TXT, SRV, SOA 쿼리 지원
  • DNS 해석 / 무차별 대입 지원
  • 사용자 정의 리졸버 입력 지원
  • 다양한 리졸버 형식 (TCP/UDP/DOH/DOT) 지원
  • stdinstdout 지원
  • 자동 와일드카드 처리 지원

설치 지침

dnsx를 성공적으로 설치하려면 go1.21이 필요합니다. 다음 명령어를 실행하여 최신 버전을 설치하세요:

go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest

사용법

dnsx -h

그러면 도구에 대한 도움말이 표시됩니다. 지원하는 모든 스위치는 다음과 같습니다.

INPUT:
   -l, -list string      list of sub(domains)/hosts to resolve (file or stdin)
   -d, -domain string    list of domain to bruteforce (file or comma separated or stdin)
   -w, -wordlist string  list of words to bruteforce (file or comma separated or stdin)

QUERY:
   -a                       query A record (default)
   -aaaa                    query AAAA record
   -cname                   query CNAME record
   -ns                      query NS record
   -txt                     query TXT record
   -srv                     query SRV record
   -ptr                     query PTR record
   -mx                      query MX record
   -soa                     query SOA record
   -any                     query ANY record
   -axfr                    query AXFR
   -caa                     query CAA record
   -recon                   query all the dns records (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa)
   -e, -exclude-type value  dns query type to exclude (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa) (default none)

FILTER:
   -re, -resp          display dns response
   -ro, -resp-only     display dns response only
   -rc, -rcode string  filter result by dns status code (eg. -rcode noerror,servfail,refused)

PROBE:
   -cdn  display cdn name
   -asn  display host asn information

RATE-LIMIT:
   -t, -threads int      number of concurrent threads to use (default 100)
   -rl, -rate-limit int  number of dns request/second to make (disabled as default) (default -1)

UPDATE:
   -up, -update                 update dnsx to latest version
   -duc, -disable-update-check  disable automatic dnsx update check

OUTPUT:
   -o, -output string           file to write output
   -j, -json                    write output in JSONL(ines) format
   -omit-raw, -or               omit raw dns response from jsonl output
   -ot, -output-template string custom output template (e.g. -ot '{{host}} {{a}}')

DEBUG:
   -hc, -health-check  run diagnostic check up
   -silent             display only results in the output
   -v, -verbose        display verbose output
   -raw, -debug        display raw dns response
   -stats              display stats of the running scan
   -version            display version of dnsx
   -nc, -no-color      disable color in output

OPTIMIZATION:
   -retry int                number of dns attempts to make (must be at least 1) (default 2)
   -hf, -hostsfile           use system host file
   -trace                    perform dns tracing
   -trace-max-recursion int  Max recursion for dns trace (default 32767)
   -resume                   resume existing scan
   -stream                   stream mode (wordlist, wildcard, stats and stop/resume will be disabled)
   -timeout value            maximum time to wait for a DNS query to complete (default 3s)

CONFIGURATIONS:
   -auth                         configure projectdiscovery cloud (pdcp) api key (default true)
   -r, -resolver string          list of resolvers to use (file or comma separated)
   -wt, -wildcard-threshold int  wildcard filter threshold (default 5)
   -auto-wildcard                automatically detect wildcard domains for filtering
   -wd, -wildcard-domain string  domain name for manual wildcard filtering (mutually exclusive with -auto-wildcard; other flags will be ignored - json output recommended)

dnsx 실행

DNS 해석

다양한 소스에서 얻은 패시브 서브도메인 목록에서 활성 호스트 이름을 필터링합니다:

subfinder -silent -d hackerone.com | dnsx -silent

a.ns.hackerone.com
www.hackerone.com
api.hackerone.com
docs.hackerone.com
mta-sts.managed.hackerone.com
mta-sts.hackerone.com
resources.hackerone.com
b.ns.hackerone.com
mta-sts.forwarding.hackerone.com
events.hackerone.com
support.hackerone.com

주어진 서브도메인 목록에 대한 A 레코드 출력:

subfinder -silent -d hackerone.com | dnsx -silent -a -resp

www.hackerone.com [104.16.100.52]
www.hackerone.com [104.16.99.52]
hackerone.com [104.16.99.52]
hackerone.com [104.16.100.52]
api.hackerone.com [104.16.99.52]
api.hackerone.com [104.16.100.52]
mta-sts.forwarding.hackerone.com [185.199.108.153]
mta-sts.forwarding.hackerone.com [185.199.109.153]
mta-sts.forwarding.hackerone.com [185.199.110.153]
mta-sts.forwarding.hackerone.com [185.199.111.153]
a.ns.hackerone.com [162.159.0.31]
resources.hackerone.com [52.60.160.16]
resources.hackerone.com [3.98.63.202]
resources.hackerone.com [52.60.165.183]
resources.hackerone.com [read.uberflip.com]
mta-sts.hackerone.com [185.199.110.153]
mta-sts.hackerone.com [185.199.111.153]
mta-sts.hackerone.com [185.199.109.153]
mta-sts.hackerone.com [185.199.108.153]
gslink.hackerone.com [13.35.210.17]
gslink.hackerone.com [13.35.210.38]
gslink.hackerone.com [13.35.210.83]
gslink.hackerone.com [13.35.210.19]
b.ns.hackerone.com [162.159.1.31]
docs.hackerone.com [185.199.109.153]
docs.hackerone.com [185.199.110.153]
docs.hackerone.com [185.199.111.153]
docs.hackerone.com [185.199.108.153]
support.hackerone.com [104.16.51.111]
support.hackerone.com [104.16.53.111]
mta-sts.managed.hackerone.com [185.199.108.153]
mta-sts.managed.hackerone.com [185.199.109.153]
mta-sts.managed.hackerone.com [185.199.110.153]
mta-sts.managed.hackerone.com [185.199.111.153]

주어진 서브도메인 목록에서 A 레코드 추출:

subfinder -silent -d hackerone.com | dnsx -silent -a -resp-only

104.16.99.52
104.16.100.52
162.159.1.31
104.16.99.52
104.16.100.52
185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153
104.16.99.52
104.16.100.52
104.16.51.111
104.16.53.111
185.199.108.153
185.199.111.153
185.199.110.153
185.199.111.153

주어진 서브도메인 목록에서 CNAME 레코드 추출:

subfinder -silent -d hackerone.com | dnsx -silent -cname -resp

support.hackerone.com [hackerone.zendesk.com]
resources.hackerone.com [read.uberflip.com]
mta-sts.hackerone.com [hacker0x01.github.io]
mta-sts.forwarding.hackerone.com [hacker0x01.github.io]
events.hackerone.com [whitelabel.bigmarker.com]

주어진 서브도메인 목록에서 ASN 레코드 추출:

subfinder -silent -d hackerone.com | dnsx -silent  -asn

b.ns.hackerone.com [AS13335, CLOUDFLARENET, US]
a.ns.hackerone.com [AS13335, CLOUDFLARENET, US]
hackerone.com [AS13335, CLOUDFLARENET, US]
www.hackerone.com [AS13335, CLOUDFLARENET, US]
api.hackerone.com [AS13335, CLOUDFLARENET, US]
support.hackerone.com [AS13335, CLOUDFLARENET, US]

주어진 (서브)도메인 목록에서 dns 상태 코드를 사용하여 프로브:

subfinder -silent -d hackerone.com | dnsx -silent -rcode noerror,servfail,refused

ns.hackerone.com [NOERROR]
a.ns.hackerone.com [NOERROR]
b.ns.hackerone.com [NOERROR]
support.hackerone.com [NOERROR]
resources.hackerone.com [NOERROR]
mta-sts.hackerone.com [NOERROR]
www.hackerone.com [NOERROR]
mta-sts.forwarding.hackerone.com [NOERROR]
docs.hackerone.com [NOERROR]

PTR 쿼리를 사용하여 주어진 네트워크 범위에서 서브도메인 추출:

echo 173.0.84.0/24 | dnsx -silent -resp-only -ptr

cors.api.paypal.com
trinityadminauth.paypal.com
cld-edge-origin-api.paypal.com
appmanagement.paypal.com
svcs.paypal.com
trinitypie-serv.paypal.com
ppn.paypal.com
pointofsale-new.paypal.com
pointofsale.paypal.com
slc-a-origin-pointofsale.paypal.com
fpdbs.paypal.com

PTR 쿼리를 사용하여 주어진 ASN에서 서브도메인 추출:

echo AS17012 | dnsx -silent -resp-only -ptr 

apiagw-a.paypal.com
notify.paypal.com
adnormserv-slc-a.paypal.com
a.sandbox.paypal.com
apps2.paypal-labs.com
pilot-payflowpro.paypal.com
www.paypallabs.com
paypal-portal.com
micropayments.paypal-labs.com
minicart.paypal-labs.com

사용자 정의 출력 형식

-output-template (-ot) 플래그는 기본 대괄호 레이아웃(예: example.com [A] [104.20.23.154]) 대신 템플릿을 사용하여 출력 형식을 사용자 정의할 수 있습니다. 명령줄에 템플릿을 직접 지정하여 해석된 데이터가 표시되는 방식을 제어합니다.

템플릿 변수는 JSONL 출력(-json)에 사용된 것과 동일한 필드 이름에 매핑되므로 다음 중 하나를 {{field}}로 참조할 수 있습니다:

host, a, aaaa, cname, ns, txt, mx, srv, ptr, soa, caa, ttl, resolver, status_code, cdn-name, cdn-type, asn, query-time. 편의상 {{ip}} 별칭은 AAAAA 레코드를 결합하여 보관합니다.

여러 값이 있는 레코드(예: 여러 A 레코드)는 단일 필드 내에서 쉼표로 결합됩니다.

echo example.com | dnsx -silent -a -ot '{{host}} {{a}}'

example.com 104.20.23.154,172.66.147.243
echo example.com | dnsx -silent -a -ot '{{ip}} - {{host}}'

104.20.23.154,172.66.147.243 - example.com

[!NOTE] 지정된 필드가 존재하지 않거나 값이 없으면 출력에서 생략됩니다. -output-template-json 또는 -raw와 함께 사용할 수 없습니다.


DNS 무차별 대입

dw 플래그를 사용하여 주어진 도메인 또는 도메인 목록에 대한 서브도메인을 무차별 대입합니다:

dnsx -silent -d facebook.com -w dns_worldlist.txt

blog.facebook.com
booking.facebook.com
api.facebook.com
analytics.facebook.com
beta.facebook.com
apollo.facebook.com
ads.facebook.com
box.facebook.com
alpha.facebook.com
apps.facebook.com
connect.facebook.com
c.facebook.com
careers.facebook.com
code.facebook.com

단일 또는 여러 키워드 입력을 사용하여 대상 서브도메인을 무차별 대입합니다. d 또는 w 플래그는 파일 또는 쉼표로 구분된 키워드 입력을 지원합니다:

dnsx -silent -d domains.txt -w jira,grafana,jenkins

grafana.1688.com
grafana.8x8.vc
grafana.airmap.com
grafana.aerius.nl
jenkins.1688.com
jenkins.airbnb.app
jenkins.airmap.com
jenkins.ahn.nl
jenkins.achmea.nl
jira.amocrm.com
jira.amexgbt.com
jira.amitree.com
jira.arrival.com
jira.atlassian.net
jira.atlassian.com

모든 입력 유형(-list, -domain, -wordlist)에 대해 stdin에서 값을 허용합니다. -list 플래그는 기본적으로 stdin을 사용하지만, 다른 입력 유형의 경우 매개변수로 -(대시)를 추가하여 동일한 효과를 얻을 수 있습니다:

cat domains.txt | dnsx -silent -w jira,grafana,jenkins -d -

grafana.1688.com
grafana.8x8.vc
grafana.airmap.com
grafana.aerius.nl
jenkins.1688.com
jenkins.airbnb.app
jenkins.airmap.com
jenkins.ahn.nl
jenkins.achmea.nl
jira.amocrm.com
jira.amexgbt.com
jira.amitree.com
jira.arrival.com
jira.atlassian.net
jira.atlassian.com

플레이스홀더 기반 단어 목록을 사용한 DNS 무차별 대입

$ cat tld.txt

com
by
de
be
al
bi
cg
dj
bs
dnsx -d google.FUZZ -w tld.txt -resp

      _             __  __
   __| | _ __   ___ \ \/ /
  / _' || '_ \ / __| \  / 
 | (_| || | | |\__ \ /  \ 
  \__,_||_| |_||___//_/\_\ v1.1.2

      projectdiscovery.io

google.de [142.250.194.99] 
google.com [142.250.76.206] 
google.be [172.217.27.163] 
google.bs [142.251.42.35] 
google.bi [216.58.196.67] 
google.al [216.58.196.68] 
google.by [142.250.195.4] 
google.cg [142.250.183.131] 
google.dj [142.250.192.3] 

와일드카드 필터링

dnsx의 특별한 기능은 다중 레벨 DNS 기반 와일드카드를 처리하면서도 DNS 요청 수를 매우 적게 유지하는 것입니다. 때로는 모든 서브도메인이 해석되어 출력에 많은 쓰레기가 포함될 수 있습니다. dnsx는 이 문제를 처리하기 위해 IP를 가리키는 서브도메인 수를 추적하고, 그 수가 특정 임계값을 초과하면 해당 IP의 모든 호스트 레벨에서 와일드카드를 반복적으로 확인합니다.

dnsx -l subdomain_list.txt -wd airbnb.com -o output.txt

단일 실행에서 여러 도메인에 걸쳐 와일드카드 DNS를 자동으로 감지하고 필터링하면서 선택한 출력 모드를 유지하려면:

dnsx -l subdomain_list.txt -auto-wildcard -o output.txt

-auto-wildcard-wd / -wildcard-domain은 상호 배타적입니다. 기존의 수동 단일 도메인 와일드카드 필터링 흐름을 사용하려면 -wd를 사용하고, 혼합 도메인 입력에서 와일드카드 루트를 자동으로 감지하려면 -auto-wildcard를 사용하십시오.


라이브러리로 dnsx 사용

Go 프로그램에서 라이브러리를 직접 사용할 수 있습니다. 다음 코드 스니펫은 Go 프로그램에서 사용하는 예입니다. 자세한 패키지 구성 및 사용법은 여기를 참조하세요.

package main

import (
	"fmt"

	"github.com/projectdiscovery/dnsx/libs/dnsx"
)

func main() {
	// 기본 옵션으로 DNS 리졸버 생성
	dnsClient, err := dnsx.New(dnsx.DefaultOptions)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}

	// DNS A 질의 후 해당 IP 반환
	result, err := dnsClient.Lookup("hackerone.com")
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	for idx, msg := range result {
		fmt.Printf("%d: %s\n", idx+1, msg)
	}

	// 쿼리
	rawResp, err := dnsClient.QueryOne("hackerone.com")
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Printf("rawResp: %v\n", rawResp)

	jsonStr, err := rawResp.JSON()
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(jsonStr)

	return
}

📋 참고사항

  • 기본적으로 dnsxA 레코드를 확인합니다.
  • 기본적으로 dnsx는 Google, Cloudflare, Quad9 리졸버를 사용합니다.
  • r 플래그를 사용하여 사용자 정의 리졸버 목록을 로드할 수 있습니다.
  • -auto-wildcard는 단일 실행에서 여러 등록 가능한 루트에 걸쳐 와일드카드 도메인을 자동으로 감지합니다.
  • 도메인 이름(-wd)은 수동 와일드카드 필터링에만 필요하며 -auto-wildcard와 함께 사용할 수 없습니다.
  • -wd를 사용한 수동 와일드카드 필터링 시 다른 DNS 레코드 플래그는 무시되며 JSON 출력이 권장됩니다.
  • DNS 해석(l)과 DNS 무차별 대입(w)은 함께 사용할 수 없습니다.
  • VPN 운영자는 높은 DNS/UDP 트래픽을 필터링하는 경향이 있으므로 도구에서 패킷 손실이 발생할 수 있습니다(예: Mullvad VPN). 이 잠재적 해결책을 확인하세요.

dnsxprojectdiscovery 팀이 🖤로 만들었습니다.

카테고리