
dnsx ist ein schnelles und vielseitiges DNS-Toolkit, mit dem Sie mehrere DNS-Abfragen Ihrer Wahl mit einer Liste von benutzerdefinierten Resolvern ausführen können.
Funktionen • Installation • Nutzung • `dnsx` ausführen • Wildcard • Hinweise • Discord beitreten
dnsx ist ein schnelles und vielseitiges DNS-Toolkit, das für verschiedene Sonden durch die retryabledns-Bibliothek entwickelt wurde. Es unterstützt mehrere DNS-Abfragen, benutzerdefinierte Resolver, DNS-Wildcard-Filterung wie shuffledns usw.
Zur erfolgreichen Installation benötigt dnsx go1.21. Führen Sie den folgenden Befehl aus, um die neueste Version zu installieren:
go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest
dnsx -h
Dies zeigt die Hilfe für das Tool an. Hier sind alle verfügbaren Schalter.
INPUT:
-l, -list string Liste der aufzulösenden Sub(domains)/Hosts (Datei oder stdin)
-d, -domain string Liste der Domains für Brute-Force (Datei oder kommagetrennt oder stdin)
-w, -wordlist string Liste der Wörter für Brute-Force (Datei oder kommagetrennt oder stdin)
QUERY:
-a A-Eintrag abfragen (Standard)
-aaaa AAAA-Eintrag abfragen
-cname CNAME-Eintrag abfragen
-ns NS-Eintrag abfragen
-txt TXT-Eintrag abfragen
-srv SRV-Eintrag abfragen
-ptr PTR-Eintrag abfragen
-mx MX-Eintrag abfragen
-soa SOA-Eintrag abfragen
-any ANY-Eintrag abfragen
-axfr AXFR abfragen
-caa CAA-Eintrag abfragen
-recon Alle DNS-Einträge abfragen (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa)
-e, -exclude-type value Auszuschließender DNS-Abfragetyp (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa) (Standard: none)
FILTER:
-re, -resp DNS-Antwort anzeigen
-ro, -resp-only Nur DNS-Antwort anzeigen
-rc, -rcode string Ergebnis nach DNS-Statuscode filtern (z. B. -rcode noerror,servfail,refused)
PROBE:
-cdn CDN-Name anzeigen
-asn ASN-Informationen des Hosts anzeigen
RATE-LIMIT:
-t, -threads int Anzahl gleichzeitiger Threads (Standard: 100)
-rl, -rate-limit int Anzahl der DNS-Anfragen pro Sekunde (standardmäßig deaktiviert) (Standard: -1)
UPDATE:
-up, -update dnsx auf die neueste Version aktualisieren
-duc, -disable-update-check automatische Prüfung auf dnsx-Updates deaktivieren
OUTPUT:
-o, -output string Datei für die Ausgabe
-j, -json Ausgabe im JSONL(ines)-Format
-omit-raw, -or Rohe DNS-Antwort aus JSONL-Ausgabe auslassen
-ot, -output-template string Benutzerdefinierte Ausgabevorlage (z. B. -ot '{{host}} {{a}}')
DEBUG:
-hc, -health-check Diagnoseprüfung durchführen
-silent Nur Ergebnisse anzeigen
-v, -verbose Ausführliche Ausgabe anzeigen
-raw, -debug Rohe DNS-Antwort anzeigen
-stats Statistiken des laufenden Scans anzeigen
-version Version von dnsx anzeigen
-nc, -no-color Farbe in der Ausgabe deaktivieren
OPTIMIZATION:
-retry int Anzahl der DNS-Versuche (muss mindestens 1 sein) (Standard: 2)
-hf, -hostsfile System-Hosts-Datei verwenden
-trace DNS-Trace durchführen
-trace-max-recursion int Maximale Rekursionstiefe für DNS-Trace (Standard: 32767)
-resume Vorhandenen Scan fortsetzen
-stream Stream-Modus (Wortliste, Wildcard, Statistiken und Stop/Fortsetzen werden deaktiviert)
-timeout value Maximale Wartezeit für den Abschluss einer DNS-Abfrage (Standard: 3s)
CONFIGURATIONS:
-auth Projektdiscovery-Cloud (pdcp)-API-Schlüssel konfigurieren (Standard: true)
-r, -resolver string Liste der zu verwendenden Resolver (Datei oder kommagetrennt)
-wt, -wildcard-threshold int Wildcard-Filter-Schwellenwert (Standard: 5)
-auto-wildcard Wildcard-Domains automatisch zum Filtern erkennen
-wd, -wildcard-domain string Domainname für manuelle Wildcard-Filterung (schließen sich gegenseitig aus mit -auto-wildcard; andere Flags werden ignoriert – JSON-Ausgabe empfohlen)
Aktive Hostnamen aus der Liste passiver Subdomains filtern, die aus verschiedenen Quellen stammen:
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-Einträge für die angegebene Liste von Subdomains ausgeben:
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-Einträge für die angegebene Liste von Subdomains extrahieren:
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-Einträge für die angegebene Liste von Subdomains extrahieren:
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-Einträge für die angegebene Liste von Subdomains extrahieren:
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]
Sonde mit DNS-Statuscode auf angegebener Liste von (Sub)domains:
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]
Subdomains aus einem angegebenen Netzwerkbereich mit PTR-Abfrage extrahieren:
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
Subdomains aus einer angegebenen ASN mit PTR-Abfrage extrahieren:
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
Das Flag -output-template (-ot) erlaubt die Anpassung des Ausgabeformats mittels einer Vorlage, anstelle des standardmäßigen Klammerlayouts (z. B. example.com [A] [104.20.23.154]). Sie geben die Vorlage direkt in der Befehlszeile an, um zu steuern, wie die aufgelösten Daten dargestellt werden.
Vorlagenvariablen entsprechen denselben Feldnamen, die in der JSONL-Ausgabe (-json) verwendet werden, sodass alle folgenden als {{field}} referenziert werden können:
host, a, aaaa, cname, ns, txt, mx, srv, ptr, soa, caa, ttl, resolver, status_code, cdn-name, cdn-type, , . Ein praktischer -Alias enthält die kombinierten - und -Einträge.
Einträge mit mehreren Werten (z. B. mehrere A-Einträge) werden innerhalb eines einzelnen Feldes kommagetrennt zusammengefügt.
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] Wenn ein angegebenes Feld nicht existiert oder keinen Wert enthält, wird es einfach in der Ausgabe weggelassen.
-output-templatekann nicht mit-jsonoder-rawkombiniert werden.
Subdomains für eine oder mehrere Domains mit den Flags d und w bruteforcen:
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
Gezielte Subdomain-Brute-Force mit einzelnen oder mehreren Schlüsselwörtern als Eingabe, da die Flags d oder w Datei- oder kommagetrennte Schlüsselworteingaben unterstützen:
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
Werte werden für alle Eingabetypen (-list, -domain, -wordlist) von stdin akzeptiert. Das Flag -list verwendet standardmäßig stdin, dasselbe kann für andere Eingabetypen durch Hinzufügen eines - (Bindestrich) als Parameter erreicht werden:
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]
Eine besondere Funktion von dnsx ist die Fähigkeit, mehrstufige DNS-basierte Wildcards zu handhaben, und dies mit einer sehr geringen Anzahl von DNS-Anfragen. Manchmal lösen sich alle Subdomains auf, was zu viel Müll in der Ausgabe führt. dnsx geht dies an, indem es verfolgt, wie viele Subdomains auf eine IP zeigen. Wenn die Anzahl der Subdomains einen bestimmten Schwellenwert überschreitet, wird iterativ für alle Ebenen der Hosts dieser IP auf Wildcards geprüft.
dnsx -l subdomain_list.txt -wd airbnb.com -o output.txt
Um Wildcard-DNS automatisch über mehrere Domains in einem einzigen Durchlauf zu erkennen und zu filtern, während der ausgewählte Ausgabemodus beibehalten wird:
dnsx -l subdomain_list.txt -auto-wildcard -o output.txt
-auto-wildcard und -wd / -wildcard-domain schließen sich gegenseitig aus. Verwenden Sie -wd, wenn Sie den vorhandenen manuellen Wildcard-Filterungsablauf für eine einzelne Domain verwenden möchten; verwenden Sie -auto-wildcard, wenn Sie möchten, dass dnsx Wildcard-Wurzeln automatisch bei gemischten Domain-Eingaben erkennt.
Es ist möglich, die Bibliothek direkt in Go-Programmen zu verwenden. Die folgenden Codeausschnitte sind ein Beispiel für die Verwendung in Go-Programmen. Detaillierte Paketkonfiguration und Verwendung finden Sie hier.
package main
import (
"fmt"
"github.com/projectdiscovery/dnsx/libs/dnsx"
)
func main() {
// DNS Resolver mit Standardoptionen erstellen
dnsClient, err := dnsx.New(dnsx.DefaultOptions)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
// DNS A-Frage und Rückgabe entsprechender IPs
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)
}
// Abfrage
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 nach A-Einträgen.dnsx Google, Cloudflare, Quad9 als Resolver.r geladen werden.-auto-wildcard erkennt automatisch Wildcard-Domains über mehrere registrierbare Wurzeln in einem einzigen Durchlauf.-wd) wird nur für die manuelle Wildcard-Filterung benötigt und kann nicht zusammen mit -auto-wildcard verwendet werden.-wd werden andere DNS-Eintragsflags ignoriert, und die JSON-Ausgabe wird empfohlen.l) und DNS-Brute-Force (w) können nicht gleichzeitig verwendet werden.dnsx wurde mit 🖤 vom projectdiscovery-Team entwickelt.
asnquery-time{{ip}}AAAAA