DNS ist in Query Request und Query Response unterteilt, und die Nachrichtenstruktur von Request und Response ist grundsätzlich gleich. Das DNS-Paketformat ist in der Abbildung dargestellt.
Die obige Abbildung zeigt das Paketformat von DNS. Darunter sind die sechs Felder Transaktions-ID, Flag, Fragenanzahl, Antwort-Ressourcendatensatznummer, maßgeblicher Nameserver-Zähler und zusätzliche Ressourcendatensatznummer DNS-Nachrichtenkopfzeilen mit insgesamt 12 Bytes.
Das gesamte DNS-Format ist hauptsächlich in drei Teile unterteilt, nämlich den Teil mit der Grundstruktur, den Problemteil und den Ressourcendatensatzteil. Der Inhalt und die Bedeutung jedes Teils werden im Folgenden im Detail vorgestellt.
Teil Infrastruktur
Der grundlegende Strukturteil der DNS-Nachricht bezieht sich auf den Nachrichtenkopf, wie in der Abbildung gezeigt.
Die Bedeutung der einzelnen Felder in diesem Abschnitt ist wie folgt.
- Transaktions-ID: die ID der DNS-Nachricht. Der Wert dieses Felds ist für die Anforderungsnachricht und die entsprechende Antwortnachricht gleich. Es kann verwendet werden, um zu unterscheiden, auf welche Anfrage die DNS-Antwortnachricht antwortet.
- Flag: Das Flag-Feld im DNS-Paket.
- Issue Count: Die Anzahl der DNS-Abfrageanforderungen.
- Answer Resource Records: Die Anzahl der DNS-Antworten.
- Anzahl der autoritativen Nameserver: Die Anzahl der autoritativen Nameserver.
- Additional Resource Records: Die Anzahl der zusätzlichen Datensätze (die Anzahl der IP-Adressen, die autoritativen Nameservern entsprechen).
Das Flaggenfeld im Abschnitt Infrastruktur ist weiter in mehrere Felder unterteilt, wie in der Abbildung gezeigt.
In scapy, normalerweise ein DNS-Paket, sendet der Client ein DNSQR-Anforderungspaket und der Server sendet ein DNSRR-Antwortpaket. Ein DNSQR enthält den Auflösungsdomänennamen qname, den Auflösungstyp qtype und die Auflösungsklasse qclass. Ein DNSRR umfasst Auflösungsdomänenname rrname, Typtyp, Auflösungstyp rtype, TTL und so weiter.
Verwenden Sie die ls-Funktion, um die Struktur des DNS-Pakets wie folgt anzuzeigen:
length : ShortField (Cond) = None ('None')
id : ShortField = 0 ('0')
qr : BitField (1 bit) = 0 ('0')
opcode : BitEnumField = 0 ('0')
aa : BitField (1 bit) = 0 ('0')
tc : BitField (1 bit) = 0 ('0')
rd : BitField (1 bit) = 1 ('1')
ra : BitField (1 bit) = 0 ('0')
z : BitField (1 bit) = 0 ('0')
ad : BitField (1 bit) = 0 ('0')
cd : BitField (1 bit) = 0 ('0')
rcode : BitEnumField = 0 ('0')
qdcount : DNSRRCountField = 0 ('None')
ancount : DNSRRCountField = 0 ('None')
nscount : DNSRRCountField = 0 ('None')
arcount : DNSRRCountField = 0 ('None')
qd : DNSQRField = None ('None')
an : DNSRRField = None ('None')
ns : DNSRRField = None ('None')
ar : DNSRRField = None ('None')
Geparst wie folgt:
Länge:
Gibt die gesamte DNS-Datenlänge mit Ausnahme des von length belegten Teils an, der zwei Bytes belegt. Dieses Flag existiert nur in TCP-Anforderungspaketen.
Ausweis:
Die ID des DNS-Pakets. Der Wert dieses Felds ist für die Anforderungsnachricht und die entsprechende Antwortnachricht gleich. Es kann verwendet werden, um zu unterscheiden, auf welche Anfrage die DNS-Antwortnachricht antwortet.
qr:
Anfrage-/Antwort-Flag-Informationen abfragen. 0 für eine Anfrage, 1 für eine Antwort.
Operationscode:
Operationscode.
0
Es ist eine normale DNS-Anfrage (Standardabfrage), 1 ist eine rDNS-Anfrage (umgekehrte Abfrage), 2 ist eine Serverstatusanfrage, 3 ist bedeutungslos, 4 ist eine Benachrichtigung (Notify),5 ist Update und 6 bis 15 sind reserviert.
aa:
Autorisierungsantwort. Dieses Feld ist in der Antwortnachricht gültig. Ein Wert von 1 bedeutet, dass der Nameserver autorisierend ist, ein Wert von 0 bedeutet, dass er nicht autorisierend ist.
TC:
Gibt an, ob es abgeschnitten ist. 0 bedeutet keine Kürzung. 1 gibt an, dass die Antwort 512 Byte überschritten hat und abgeschnitten wurde, sodass nur die ersten 512 Byte zurückgegeben wurden.
rd:
Rekursion erwarten. Dieses Feld kann in der Abfrage festgelegt und in der Antwort zurückgegeben werden. Wenn 1 dem Nameserver mitteilt, dass er diese Abfrage verarbeiten muss, wird diese Methode als rekursive Abfrage bezeichnet. Wenn dieses Bit 0 ist und der angeforderte Nameserver keine maßgebliche Antwort hat, gibt er eine Liste anderer Nameserver zurück, die die Anfrage beantworten können. Dieser Ansatz wird als iterative Abfrage bezeichnet.
Ra:
Rekursion ist verfügbar. Dieses Feld erscheint nur in der Antwortnachricht. Wenn der Wert 1 ist, bedeutet dies, dass der Server rekursive Abfragen unterstützt.
z:
Reserviertes Feld, MUSS in allen Request- und Reply-Nachrichten den Wert 0 haben.
Anzeige:
0 bedeutet, dass der antwortende Server die digitale DNSSEC-Signatur in Bezug auf die Anfrage nicht verifiziert hat, 1 bedeutet, dass der antwortende Server die digitale DNSSEC-Signatur in Bezug auf die Anfrage verifiziert hat.
CD:
0 gibt an, dass der Server relevante digitale DNSSEC-Signaturen verifiziert hat, und 1 gibt an, dass der Server relevante digitale DNSSEC-Signaturen nicht verifiziert hat.
Code:
Das Rückgabecodefeld gibt den Fehlerstatus der Antwort an.
0 ist normal
1 bedeutet, dass das Format der Nachricht falsch ist (Formatfehler) und der Server die angeforderte Nachricht nicht verstehen kann.
2 bedeutet, dass der Domain Name Server ausfällt (Server Failure), da der Server die Anfrage nicht verarbeiten kann.
3 ist ein Namensfehler (Namensfehler), der nur für den autorisierten Domänennamensauflösungsserver von Bedeutung ist und anzeigt, dass der aufgelöste Domänenname nicht existiert.
4 gibt an, dass der Abfragetyp nicht unterstützt wird (Not Implemented), dh der Domänennamenserver unterstützt den Abfragetyp nicht.
5 ist Verweigert, weigert sich der Server im Allgemeinen aufgrund der festgelegten Richtlinie, eine Antwort zu geben, z. B. möchte der Server einigen Anfragenden keine Antwort geben.
6 wurde für den Domänennamen angezeigt, sollte jedoch nicht angezeigt werden.
7 existiert für den Satz RR, sollte aber nicht existieren.
8 für die Menge RR existiert nicht, sollte aber existieren
9 ist der Server nicht der autoritative Server in diesem Bereich
10 für den Namen ist nicht in der Zone enthalten
11 bis 15, reserviert
16 ist falsche OPT-Version oder ungültige TSIG-Signatur
17 ist ein unbekannter Schlüssel
18 für die Unterschrift nicht innerhalb des Zeitrahmens
19 ist falscher TKEY-Modus
20 für doppelte Schlüsselnamen
21 bedeutet, dass der Algorithmus nicht unterstützt
22 für falsches Abschneiden
23 bis 3840 reserviert
3841 bis 4095 für den privaten Gebrauch
4096 bis 65534 reserviert
qdcount:
Die Anzahl der DNS-Suchanfragen.
Konto:
Die Anzahl der DNS-Suchanfragen.
Anzahl:
Die Anzahl der autoritativen Nameserver.
arcount:
Die Anzahl der zusätzlichen Datensätze (die Anzahl der IP-Adressen, die autoritativen Nameservern entsprechen).
qd:
Der DNS-Auflösungsteil sollte in der DNSQR-Klasse übergeben werden
ein:
Es ist der Antwortteil der DNS-Auflösung, der DNSRR-Klasse.
ns:
Autorisierende Nameserverzone.
ar:
Bereich Zusatzinformationen.
DNS-Auflösungstyp
1. Eine Rekordanalyse
Wählen Sie „A" für den Datensatztyp und geben Sie die IP-Adresse des Hosts ein, die vom Speicherplatzanbieter für den Datensatzwert bereitgestellt wird. Die MX-Priorität muss nicht festgelegt werden, und die TTL kann auf den Standardwert 3600 festgelegt werden.
2. CNAME-Eintragsanalyse
Die Methode der Auflösungseinstellung des CNAME-Typs ist im Grunde die gleiche wie die des A-Datensatztyps, bei dem der Datensatztyp in „CNAME“ geändert wird und der Datensatzwert mit der Serverhostadresse gefüllt wird.
3.MX-Datensatzanalyse
Das Parsing von MX-Einträgen wird für das Parsing von Postfächern verwendet. Wählen Sie MX als Datensatztyp, wählen Sie Allgemein als Leitungstyp oder fügen Sie gleichzeitig drei Datensätze mit dem Leitungstyp China Telecom, Netcom und Education Network hinzu, geben Sie die Server-IP-Adresse oder Alias-Adresse ein, die vom Postamtsanbieter bereitgestellt wird Legen Sie für den Datensatzwert die Standard-TTL auf 3600 fest und legen Sie die MX-Priorität fest. Geben Sie die vom Post-Office-Anbieter geforderten Daten ein, oder legen Sie standardmäßig 10 fest. Wenn mehrere MX-Datensätze vorhanden sind, sollte die Priorität auf unterschiedliche Daten festgelegt werden.
Diese Auflösungstypen sind die Inhalte von DNSQR.qtype und DNSRR.type
DNSQR-Klassenauflösung
Diese Klasse enthält Folgendes
qname:
Abfragename, im Allgemeinen der abzufragende Domänenname und manchmal eine IP-Adresse, die für die Rückwärtssuche verwendet wird. Zum Beispiel www.sina.com. Es besteht aus einer oder mehreren Sequenzen von Identifikatoren. Der Zählwert der Anzahl der ersten Bytes jedes Bezeichners, um die Länge des Bezeichners anzugeben, und jeder Name endet mit 0. Die Anzahl der Zählbytes muss zwischen 0 und 63 liegen. Dieses Feld benötigt keine Füllbytes.
qtyp:Der von der DNS-Abfrage angeforderte Ressourcentyp. Üblicherweise ist der Abfragetyp Typ A, was bedeutet, dass die zugehörige IP-Adresse aus dem Domainnamen bezogen wird. Einzelheiten siehe oben.
QKlasse:Adresstyp, normalerweise eine Internetadresse, mit dem Wert 1.
DNSRR-Klassenauflösung
Diese Klasse enthält Folgendes
rranme:
Domänenname, bezieht sich auf den vom DNS angeforderten Domänennamen. Das heißt, der qname in der gesendeten DNSQR-Klasse.
Typ:
Der Typ des Ressourceneintrags, der dem Wert des Abfragetyps im Abschnitt „Frage“ entspricht. Das heißt, der qtype in der gesendeten DNSQR-Klasse.
Klasse:
Adresstyp, derselbe wie der Abfrageklassenwert im Frageabschnitt.
ttl:
Die Überlebenszeit in Sekunden stellt den Lebenszyklus des Ressourceneintrags dar. Sie wird im Allgemeinen verwendet, wenn das Adressauflösungsprogramm den Ressourceneintrag abruft und entscheidet, die zwischengespeicherte Datenzeit zu speichern und zu verwenden. Es kann auch die Stabilität des Ressourceneintrags anzeigen, und stabilen Informationen wird ein großer Wert zugewiesen.
rdlen:
Die Länge der Ressourcendaten.
Daten:
Bezieht sich auf den Datenteil, der sich auf den Typ im DNS-Eintrag bezieht und die Daten der relevanten Ressourceneinträge angibt, die gemäß den Anforderungen des Abfragesegments zurückgegeben werden . Zum Beispiel für die IPv4-Adresse im A-Eintrag von DNS oder den Hostnamen und seine Priorität im MX-Eintrag.
Verweise:
Feldanalyse des Python-Scapy-DNS-Pakets – Queen Idler – Blog Park
Verwenden von scapy zum Simulieren eines DNS-Amplifikationsangriffs – Capricorn.python – 博客园
Python verwendet Scapy, um den DNS-Verkehr zu manipulieren – lyshark – 博客园
Analyse des DNS-Nachrichtenformats (sehr detailliert)
Eine kurze Analyse von DNS-Flags - imlonghao