Tcpdump Filter
Hallo zusammen ich habe eine Frage in bezug auf Tcpdump bei der ich ein Verständnisproblem habe.
Hallo Leute,
ich bräuchte mal dringend eure Hilfe.
Ich soll nen DNS Filter schreiben im Tcpdump.
Ich hab auch die Lösung dazu nur versteh ich die nicht ganze wie sich das ganze zusammensetzt.
Frage ist: Write a tcpdump filter to select DNS packets whose opcode value > is 5
Die lösung ist
tcpdump dns [4] & 0x78 > 0x28
Ok bis [4] versteh ich das ganze das ist einfach das 5 Byte vom DNS Header (opcode) richtig?.....Aber danach beisst es bei mir aus....ok 0x28 = 5 ...nur wie setzt sich das ganze zusammen lässt sich das iwie ablesen aus dem DNS Header?? Und was hat es mit der 0x78 auf sich. Kann man das ganze iwie berechnen oder ablesen?
Ich hoffe ihr könnte mir helfen..und versteht meine Frage
Danke
Hallo Leute,
ich bräuchte mal dringend eure Hilfe.
Ich soll nen DNS Filter schreiben im Tcpdump.
Ich hab auch die Lösung dazu nur versteh ich die nicht ganze wie sich das ganze zusammensetzt.
Frage ist: Write a tcpdump filter to select DNS packets whose opcode value > is 5
Die lösung ist
tcpdump dns [4] & 0x78 > 0x28
Ok bis [4] versteh ich das ganze das ist einfach das 5 Byte vom DNS Header (opcode) richtig?.....Aber danach beisst es bei mir aus....ok 0x28 = 5 ...nur wie setzt sich das ganze zusammen lässt sich das iwie ablesen aus dem DNS Header?? Und was hat es mit der 0x78 auf sich. Kann man das ganze iwie berechnen oder ablesen?
Ich hoffe ihr könnte mir helfen..und versteht meine Frage
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174723
Url: https://administrator.de/forum/tcpdump-filter-174723.html
Ausgedruckt am: 18.04.2025 um 11:04 Uhr
7 Kommentare
Neuester Kommentar
tcpdump dns [4] & 0x78 > 0x28
Zuerstmal ist das keine gültige Syntax für tcpdump unter Linux.
(Das müsste schon mit
tcpdump port 53
anfangen)einfach das 5 Byte vom DNS Header (opcode) richtig?
Der Opcode ist aber nicht im 5. sondern im 3. Byte
[4] & 0x78 > 0x28
& ist hier eine binäre Operation.
xXXX Xxxx // [4] Die Stellen des Op-Code hervorgehoben
0111 1000 // 0x78
0XXX X000
Eine 5 sieht binär aber so aus:
0000 0101
Also muss ich jetzt die Zahl um 3 Stellen nach links verschieben:
0010 1000
Und wenn ich das wieder als Hex-Zahl darstelle komme ich auf...genau 0x28
Und damit kann ich jetzt den Opcode vergleichen:
0XXX X000 //op-code
0010 1000 //5 um 3 stellen nach links geschoben
Da aber alle Opcodes über 5 reserviert sind wird man solchen Traffic eher selten sehen.
In diesem Fall Authoritative Answer,Truncated, Recursion Desired......., deshalb 3 nach rechts, so das ich mich in den Opcode bereich befinde....richtig?
Ja, diese Felder befinden sich im selben Byte wie der Opcode, aber verschoben wird die 5 nach links, nicht nach rechts.
Kann man das sofort identifizieren?
Jedes Ethernet-Paket hat ein Ethertype-Feld in dem das höhere Protokoll eindeutig definiert wird:
http://www.iana.org/assignments/ethernet-numbers
Jedes IP-Paket hat ein Protocol-Feld, in dem das höhere Protokoll eindeutig vergeben wird:
http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml
Was aber in einem TCP/UDP-Paket für ein Protokoll steckt ist nicht mehr eindeutig, da sich längst nicht jeder an die Port-Nummern-Zuweisung hält.
Was soll ich erklären?
Du möchtest das DF und MF = 1 sind, also muss das Byte so aussehen:
Weil sich gegen x nicht prüfen lässt nullen wir die:
Von der Binärrechnung wissen wir das jede Stelle den Wert 2^x hat (x ist die Stelle, die Stelle ganz rechts hat den Wert 0)
Also ergibt das umgerechnet 2^6+2^5=96
Wenn man noch den Drang hat das in Hex darzustellen: 0x60
Und der Filter lautet damit:
Du möchtest das DF und MF = 1 sind, also muss das Byte so aussehen:
011x xxxx
Weil sich gegen x nicht prüfen lässt nullen wir die:
0110 0000
Von der Binärrechnung wissen wir das jede Stelle den Wert 2^x hat (x ist die Stelle, die Stelle ganz rechts hat den Wert 0)
Also ergibt das umgerechnet 2^6+2^5=96
Wenn man noch den Drang hat das in Hex darzustellen: 0x60
Und der Filter lautet damit:
tcpdump ip[6] & 0x60 = 0x60