schnuppi
Goto Top

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

Content-Key: 174723

Url: https://administrator.de/contentid/174723

Printed on: April 20, 2024 at 02:04 o'clock

Member: dog
dog Oct 16, 2011 at 00:05:03 (UTC)
Goto Top
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
Wie du siehst wird damit in dem Byte wo der Opcode ist alle anderen Bits ausgeblendet, bis auf den Opcode.

Eine 5 sieht binär aber so aus:
0000 0101
Wie du siehst könnte die Prüfung nie funktionieren, weil jede Zahl des Opcodes niemals richtig unter dem Opcode ausgerichtet wäre.
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.
Member: schnuppi
schnuppi Oct 16, 2011 at 11:13:54 (UTC)
Goto Top
Herzlichen Dank für die super Antwort.

Hat mir sehr geholfen. Jedoch hätte ich noch 2 kurze Fragen.

1. Wie du siehst könnte die Prüfung nie funktionieren, weil jede Zahl des Opcodes niemals richtig unter dem Opcode ausgerichtet wäre.
Also muss ich jetzt die Zahl um 3 Stellen nach links verschieben:

->>>Ich muss das um drei stellen verschieben da ich mich noch in dem falschen Bereich vom Dns Header befinde richtig?

In diesem Fall Authoritative Answer,Truncated, Recursion Desired......., deshalb 3 nach rechts, so das ich mich in den Opcode bereich befinde....richtig?


2. Frage

Gibt es ein eindeutiges Indiz beim Output dafür um welches Paket es sich handelt. Kann ich das anhand nur des Outputs sehen??? Ok ich weiß das es sich hier um diesen Fall um ein IP paket handelt. Woran seh ich ob es sich um z.b. ICMP oder TCP handelt. Kann man das sofort identifizieren?

Bsp. Output

0x0000: 4500 032a b43b 4000 3806 4b6e c30c 1422
0x0010: 576a 118c 585c 1f90 80d9 1681 e3f5 ce0b
0x0020: 5018 1c84 9979 0000 504f 5354 202f 6675
0x0030: 6e61 6d62 6f6c 2f73 6572 7669 6365 732f
0x0040: 6164 6d69 6e20 4854 5450 2f31 2e30 0d0a
0x0050: 436f 6e74 656e 742d 5479 7065 3a20 7465


Danke nochmal
Member: dog
dog Oct 16, 2011 at 12:45:54 (UTC)
Goto Top
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.
Member: schnuppi
schnuppi Oct 17, 2011 at 15:47:51 (UTC)
Goto Top
So letzte Frage....dann würd ich den Thread schließen.

Wenn ich was dumpen will in dem Fall.....alle ip packets bei dem DF und MF "turned on" sind. Wie würde das aussehn?


wäre das so einigermaßen richtig?


tcpdump ip [6] & 0x40 == 0x40 ??


Danke nochmal
Member: dog
dog Oct 17, 2011 at 18:11:03 (UTC)
Goto Top
0x40 siehst so aus:
0100 0000
Damit wirst du also nie 2 Flags abdecken können face-wink
Member: schnuppi
schnuppi Oct 17, 2011 at 18:24:49 (UTC)
Goto Top
Hmm ok das macht sinn....allerdings steh ich grad voll auf der Leitung!!! Kannst du mir vielleicht nochmal kurz das ganze erklären?


tcpdump ip [6] & 0x42 == 0x42
Member: dog
dog Oct 17, 2011 at 23:28:21 (UTC)
Goto Top
Was soll ich erklären?

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