Быстрый многофункциональный DNS-резолвер от ProjectDiscovery. Позволяет делать массовые DNS-запросы с поддержкой wildcard-фильтрации, резолвинга по нескольким записям (A, AAAA, CNAME, MX, NS, TXT, PTR, SOA), брутфорса субдоменов и цепочки резолверов. Незаменим при subdomain enumeration в связке с subfinder/amass.
go install github.com/projectdiscovery/dnsx/cmd/dnsx@latest # или через apt apt install dnsx # Примеры: cat domains.txt | dnsx -a -resp dnsx -d example.com -w wordlist.txt -o subdomains.txt
Возможности •
Установка •
Использование •
Запуск dnsx •
Фильтр подстановочных знаков •
Заметки •
Присоединяйтесь к Discord
dnsx — это быстрый и многоцелевой DNS-инструмент, предназначенный для выполнения различных проверок через библиотеку retryabledns. Он поддерживает множественные DNS-запросы, пользовательские резолверы, фильтрацию DNS-подстановочных знаков (wildcard), как в shuffledns, и многое другое.
dnsx требует go1.21 для успешной установки. Запустите следующую команду для установки последней версии:
go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest
dnsx -h
Это отобразит справку по инструменту. Вот все поддерживаемые параметры.
ВВОД:
-l, -list string список поддоменов/хостов для резолвинга (файл или stdin)
-d, -domain string список доменов для брутфорса (файл или через запятую, или stdin)
-w, -wordlist string список слов для брутфорса (файл или через запятую, или stdin)
ЗАПРОС:
-a запрос A-записи (по умолчанию)
-aaaa запрос AAAA-записи
-cname запрос CNAME-записи
-ns запрос NS-записи
-txt запрос TXT-записи
-srv запрос SRV-записи
-ptr запрос PTR-записи
-mx запрос MX-записи
-soa запрос SOA-записи
-any запрос ANY-записи
-axfr запрос AXFR
-caa запрос CAA-записи
-recon запрос всех DNS-записей (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa)
-e, -exclude-type value тип DNS-запроса для исключения (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa) (по умолчанию нет)
ФИЛЬТР:
-re, -resp отображать DNS-ответ
-ro, -resp-only отображать только DNS-ответ
-rc, -rcode string фильтровать результат по коду статуса DNS (например, -rcode noerror,servfail,refused)
ПРОВЕРКА:
-cdn отображать имя CDN
-asn отображать ASN-информацию хоста
ОГРАНИЧЕНИЕ ЧАСТОТЫ:
-t, -threads int количество используемых одновременных потоков (по умолчанию 100)
-rl, -rate-limit int количество DNS-запросов в секунду (по умолчанию отключено) (по умолчанию -1)
ОБНОВЛЕНИЕ:
-up, -update обновить dnsx до последней версии
-duc, -disable-update-check отключить автоматическую проверку обновлений dnsx
ВЫВОД:
-o, -output string файл для записи вывода
-j, -json записывать вывод в формате JSONL(ines)
-omit-raw, -or опускать необработанный DNS-ответ в выводе jsonl
ОТЛАДКА:
-hc, -health-check запустить диагностическую проверку
-silent отображать только результаты в выводе
-v, -verbose отображать подробный вывод
-raw, -debug отображать необработанный DNS-ответ
-stats отображать статистику выполняемого сканирования
-version отображать версию dnsx
-nc, -no-color отключить цвет в выводе
ОПТИМИЗАЦИЯ:
-retry int количество попыток DNS (должно быть не менее 1) (по умолчанию 2)
-hf, -hostsfile использовать системный файл хостов
-trace выполнять трассировку DNS
-trace-max-recursion int Максимальная рекурсия для трассировки DNS (по умолчанию 32767)
-resume возобновить существующее сканирование
-stream потоковый режим (список слов, подстановочные знаки, статистика и остановка/возобновление будут отключены)
-timeout value максимальное время ожидания завершения DNS-запроса (по умолчанию 3s)
КОНФИГУРАЦИИ:
-auth настроить API-ключ projectdiscovery cloud (pdcp) (по умолчанию true)
-r, -resolver string список резолверов для использования (файл или через запятую)
-wt, -wildcard-threshold int порог фильтрации подстановочных знаков (по умолчанию 5)
-auto-wildcard автоматически определять домены с подстановочными знаками для фильтрации
-wd, -wildcard-domain string имя домена для ручной фильтрации подстановочных знаков (взаимоисключающий с -auto-wildcard; другие флаги будут игнорироваться - рекомендуется вывод в JSON)
Фильтрация активных имен хостов из списка пассивных поддоменов, полученных из различных источников:
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
Извлечение поддоменов из заданного ASN с помощью PTR-запроса:
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
Брутфорс поддоменов для заданного домена или списка доменов с использованием флагов d и w:
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
Значения принимаются из stdin для всех типов ввода (-list, -domain, -wordlist). Флаг -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
$ 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
}
dnsx проверяет A-запись.dnsx использует резолверы Google, Cloudflare, Quad9 (ссылка).r.-auto-wildcard автоматически определяет домены с подстановочными знаками среди нескольких корневых доменов, доступных для регистрации, за один запуск.-wd) требуется только для ручной фильтрации подстановочных знаков и не может использоваться вместе с -auto-wildcard.-wd другие флаги DNS-записей игнорируются, рекомендуется вывод в формате JSON.l) и DNS-брутфорс (w) не могут использоваться одновременно.dnsx сделан с 🖤 командой projectdiscovery.