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
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
7 Antworten
- LÖSUNG dog schreibt am 16.10.2011 um 02:05:03 Uhr
- LÖSUNG schnuppi schreibt am 16.10.2011 um 13:13:54 Uhr
- LÖSUNG dog schreibt am 16.10.2011 um 14:45:54 Uhr
- LÖSUNG schnuppi schreibt am 17.10.2011 um 17:47:51 Uhr
- LÖSUNG dog schreibt am 17.10.2011 um 20:11:03 Uhr
- LÖSUNG schnuppi schreibt am 17.10.2011 um 20:24:49 Uhr
- LÖSUNG dog schreibt am 18.10.2011 um 01:28:21 Uhr
- LÖSUNG schnuppi schreibt am 17.10.2011 um 20:24:49 Uhr
- LÖSUNG dog schreibt am 17.10.2011 um 20:11:03 Uhr
- LÖSUNG schnuppi schreibt am 17.10.2011 um 17:47:51 Uhr
- LÖSUNG dog schreibt am 16.10.2011 um 14:45:54 Uhr
- LÖSUNG schnuppi schreibt am 16.10.2011 um 13:13:54 Uhr
LÖSUNG 16.10.2011 um 02:05 Uhr
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 damit kann ich jetzt den Opcode vergleichen:
0XXX X000 //op-code
0010 1000 //5 um 3 stellen nach links geschoben
LÖSUNG 16.10.2011 um 13:13 Uhr
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
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
LÖSUNG 16.10.2011 um 14:45 Uhr
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.
LÖSUNG 17.10.2011 um 17:47 Uhr
LÖSUNG 17.10.2011 um 20:11 Uhr
LÖSUNG 17.10.2011 um 20:24 Uhr
LÖSUNG 18.10.2011 um 01:28 Uhr
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
0110 0000
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