|
|
| (10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
| Zeile 1: |
Zeile 1: |
|
| |
|
| |
| =Benutzung= | | =Benutzung= |
| | | Standartmäßig fängt tcpdump alle Pakete ab die von der niedrigst nummerierten Netzwerkschnittstelle irgendwohin gehen oder empfangen bis man es mit STRG+C abbricht: |
| Standartmäßig fängt tcpdump alle Pakete ab die von der niedrigst nummerierten Netzwerkschnittstelle irgendwohin gehen oder empfangen werden mit einer maximalgröße von 96 bytes bis man es mit STRG+C abbricht: | |
| | |
| | |
|
| |
|
| Da tcpdump viel zuviele Pakete aufzeichnet um in Echtzeit etwas damit anfangen zu können muss man es über Optionen steuern. | | Da tcpdump viel zuviele Pakete aufzeichnet um in Echtzeit etwas damit anfangen zu können muss man es über Optionen steuern. |
|
| |
|
| ==Standartoptionen== | | ==Optionen== |
| | |
| Einige der Optionen die sich mit jeder Benutzung von tcpdump als hilfreich erweisen sind:
| |
| | |
| {| Border=1 Cellpadding=2 | | {| Border=1 Cellpadding=2 |
| |'''-s''' | | |'''-s''' |
| Zeile 41: |
Zeile 33: |
| |'''i'''nterface | | |'''i'''nterface |
| |Hört das angegebene Interface ab. | | |Hört das angegebene Interface ab. |
| |} | | |- |
| | |
| | |
| | |
| {| Border=1 Cellpadding=2
| |
| |'''-A''' | | |'''-A''' |
| |'''A'''SCII | | |'''A'''SCII |
| Zeile 107: |
Zeile 95: |
| |<nowiki>||</nowiki> oder or | | |<nowiki>||</nowiki> oder or |
| |Oder Verknüpfung | | |Oder Verknüpfung |
| | |- |
| | |icmp |
| | |Protokoll ICMP |
| | |- |
| | |udp |
| | |Protokoll UDP |
| | |- |
| | |tcp |
| | |Protokoll TCP |
| |} | | |} |
| | | =Filter Praxis= |
| ===Nach IP-Adressen/Domains filtern===
| | ;Wir schneiden alle Pakete mit, die über die Schnittstelle enp0s3 rein oder reingehen. |
| | | *tcpdump -n -i enp0s3 |
| Um nach einer bestimmten IP-Adresse oder Domain zu filtern muss man sie mit mit '''host''' angeben
| | ;Wir schneiden alle Pakete mit, die über die Schnittstelle enp0s9 rein oder reingehen. |
| | | *tcpdump -n -i enp0s9 |
| root@zero:~# tcpdump -nts 1500 '''host''' '''192.168.247.222'''
| | ;Wir schneiden ICMP Pakete mit, die über die Schnittstelle enp0s3 rein oder reingehen. |
| | | *tcpdump -n -i enp0s3 icmp |
| Tcpdump filtert nun den Verkehr so das entweder der Sender oder der Empfänger unsere IP-Adresse ist.
| | ;Schneide nur 4 Pakete mit. |
| | | *tcpdump -c 4 -n -i enp0s3 icmp |
| Man kann aber auch diese 2 getrennt festlegen mit '''src''' und '''dst''' vor dem jeweiligen host, man muss sie alerdings wie alle Filter-Optionen mit z.B. '''and''' voneinander abgrenzen.
| | ;Zeigt den Mitschnitt von allen Interface und zusätzlich die Richtung. |
| | | *tcpdump -n -i any icmp |
| root@zero:~# tcpdump -nts 1500 '''src''' host 192.168.247.222 '''and''' '''dst''' host www.google.de
| | ;Entweder icmp oder arp Protokoll anzeigen |
| | | *tcpdump -ni enp0s3 icmp or arp |
| Jetzt sehen wir nurnoch Pakete die von uns an den bestimmten host gesendet werden.
| | ;Anzeigen von https Verkehr |
| | | *tcpdump -ni enp0s3 port 443 |
| ===Nach Ports filtern===
| | ;Zeige alles an ausser ssh |
| | | *tcpdump -ni enp0s3 ! port 22 |
| Will man darüber hinaus den Traffic auf einen bestimmten Port begrenzen, so kann man das mit '''port''' (welches auch dem src/dst prinzip folgt):
| |
| | |
| root@zero:~# tcpdump -nts 1500 src host 192.168.247.222 and dst host www.google.de and '''port 80'''
| |
| | |
| Wenn Sie ein anderes Protokoll, als das standardmäßig eingesetzte TCP verwenden möchten, können Sie dies ebenfalls angeben mit :
| |
| | |
| root@zero:~# tcpdump -nts 1500 src host 192.168.247.222 and dst host www.google.de and '''udp''' port 80
| |
| | |
| Jetzt sehen wir nurnoch den Traffic der von uns an www.google.de über den HTTP-Port geht und das sieht dann so aus:
| |
| | |
| root@zero:~# tcpdump -nts 1500 src host 192.168.247.222 and dst host www.google.de and port 80
| |
| tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
| |
| listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes
| |
| IP 192.168.247.222.58031 > 209.85.227.147.80: P 3171948303:3171948924(621) ack 4293284400 win 1002 <nop,nop,timestamp 46815127 2256160305>
| |
| IP 192.168.247.222.58031 > 209.85.227.147.80: . ack 1419 win 1002 <nop,nop,timestamp 46815155 2256167438>
| |
| | |
| Soll der Traffic auf einer Reihe von Ports beobachtet werden, so kann man dies mit '''portrange'''
| |
| root@zero:~# tcpdump -ni eth0 portrange 25-40
| |
| | |
| Für vereinzelte Ports genügt
| |
| root@zero:~# tcpdump -ni eth0 port \( 80 or 8080 \)
| |
| | |
| ===Nach Netzen filtern===
| |
| Hier werden die Netze 192.168.200.0 bis 192.168.207.255 angezeigt
| |
| root@zero:~# tcpdump -ni eth0 net 192.168.200.0/21
| |
| | |
| Hier werden die Ziel Netze 192.168.200.0 bis 192.168.207.255 angezeigt
| |
| root@zero:~# tcpdump -ni eth0 dst net 192.168.200.0/21
| |
| | |
| ===Nach Flags filtern===
| |
| | |
| Um die Filter jetzt noch zu vertiefen sollte man sich mit den Protokoll Headern auskennen.
| |
| | |
| Wenn man jetzt z.B. nur die Pakete sehen will in denen Daten gesendet werden, muss man sie nach dem PUSH-Flag filtern, und das geht mit dem Zusatz:
| |
| | |
| '''tcp[13] == 8'''
| |
| | |
| Das bedeutet tcpdump soll ein Paket nur anzeigen wenn das 13te Oktet den Wert 8 hat.
| |
| | |
| Da das aber bedeuten würde das keine Pakete angezeigt werden bei denen PUSH mit irgendwelche anderen Flags aktiv ist, müssen wir das Oktett mit 8 verUNDen um das gewünschte Ergebnis zu erzielen:
| |
| | |
| 'tcp[13] '''& 8''' == 8'
| |
| | |
| Man beachte die ' Zeichen um den Filter die dazu dienen das tcpdump das & auch anerkennt.
| |
| | |
| =Fallbeispiel=
| |
| | |
| Wir wollen jetzt versuchen herauszufinden nach welchen Worten denn so gegoogelt auf unserem Rechner.
| |
| Also fangen wir an den Verkehr beliebig lange in einer Datei zu speichern damit wir ihn anschließend ohne viel Stress filtern können.
| |
| | |
| root@zero:~# tcpdump -s 1500 -w beispiel.cap
| |
| tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes
| |
| 199 packets captured
| |
| 199 packets received by filter
| |
| 0 packets dropped by kernel
| |
| | |
| Nachdem wir jetz nach ein paar Worten gegoogelt haben machen wir uns an die Arbeit. Zuerst einmal stellen wir mit dem Host-Filter klar das wir Pakete die von uns kommen sehen wollen.
| |
| | |
| root@zero:~# tcpdump -ntr beispiel.cap '''src host 192.168.247.222'''
| |
| | |
| Das sind aber noch viel zu viele Pakete deswegen addieren wir die Ziel-Adresse
| |
| | |
| root@zero:~# tcpdump -ntr beispiel.cap src host 192.168.247.222 and '''dst host www.google.de''' | |
| | |
| Das sollte das Ergebnis schon einigermaßen eingegrenzt haben.
| |
| | |
| Als nächstes fügen wir noch hinzu das wir Pakete die Daten enthalten suchen, durch den Flag-Filter
| |
| | |
| root@zero:~# tcpdump -ntr beispiel.cap src host 192.168.247.222 and dst host www.google.de and''' 'tcp[13] & 8 == 8' '''
| |
| | |
| Wir sehen nurnoch die Pakete die Daten enthalten in der Ausgabe. Aber noch nicht die Daten. Das ist machbar mit der Option '''-A''', die die Pakete in ASCII anzeigt.
| |
| | |
| root@zero:~# tcpdump -'''A'''ntr beispiel.cap src host 192.168.247.222 and dst host www.google.de and 'tcp[13] & 8 == 8'
| |
| | |
| Damit sind wir unserem Ziel greifbar Nahe.
| |
| | |
| Wenn man sich das Ergebnis ansieht kann man schon ein Muster und unsere gesuchten Worte erkennen kann.
| |
| | |
| Jetzt nurnoch unsere tcpdump Ausgabe mit einer Pipe durch grep laufen lassen und wir haben was wir wollten:
| |
| | |
| root@zero:~# tcpdump ... '''| grep search'''
| |
| reading from file beispiel.cap, link-type EN10MB (Ethernet)
| |
| ......U(GET /search?hl=de&q='''baum'''&btnG=Suche&meta= HTTP/1.1
| |
| Referer: http://www.google.de/search?hl=de&q='''auto'''&btnG=Suche&meta=
| |
| Referer: http://www.google.de/search?hl=de&q='''baum'''&btnG=Suche&meta=
| |
| ......X2GET /search?hl=de&q='''haus'''&btnG=Suche&meta= HTTP/1.1
| |
| Referer: http://www.google.de/search?hl=de&q='''baum'''&btnG=Suche&meta=
| |
| Referer: http://www.google.de/search?hl=de&q='''haus'''&btnG=Suche&meta=
| |
| ......`.GET /search?hl=de&q='''auto'''&btnG=Suche&meta= HTTP/1.1
| |
| Referer: http://www.google.de/search?hl=de&q='''haus'''&btnG=Suche&meta=
| |
| Referer: http://www.google.de/search?hl=de&q='''auto'''&btnG=Suche&meta=
| |
| | |
| Hier sieht man deutlich die benutzten Worte heraus.
| |
Benutzung
Standartmäßig fängt tcpdump alle Pakete ab die von der niedrigst nummerierten Netzwerkschnittstelle irgendwohin gehen oder empfangen bis man es mit STRG+C abbricht:
Da tcpdump viel zuviele Pakete aufzeichnet um in Echtzeit etwas damit anfangen zu können muss man es über Optionen steuern.
Optionen
| -s
|
size
|
Legt die Maximale Größe der abgefangenen Pakete fest. Empfohlener Wert is 1500 bytes, das entspricht der maximalen Paketgröße eines IP-Pakets
|
| -c
|
count
|
Bestimmt die Anzahl an Paketen die abgefangen werden sollen
|
| -w
|
write
|
Speichert die Ausgabe in einer Datei. Da tcpdump eine Menge Daten abfängt, ist es oft ratsam die Daten in einer Datei unterzubringen
|
| -r
|
read
|
Liest mit tcpdump erstellte Dateien
|
| -n
|
numeric
|
Versucht nicht IP-Adressen in Hostnamen umzuwandeln, das beschleunigt die Ausgaberate erheblich
|
| -t
|
time
|
Entfernt den Zeitstempel am Anfang jedes Pakets. Steigert die Übersichtlichkeit fals man nicht an Zeitstempeln interessiert ist
|
| -i
|
interface
|
Hört das angegebene Interface ab.
|
| -A
|
ASCII
|
Zeigt die Pakete ohne ihre Header in ASCII an
|
| -D
|
Devices
|
Zeigt eine Liste der Netwerkschnittstellen an auf denen tcpdump laufen könnte
|
| -e
|
ethernet
|
Zeigt den Ethernet Header jedes Pakets an
|
| -i
|
interface
|
Tcpdump benutzt das angegebene Interface ( -i eth0 )
|
| -p
|
promiscuous
|
Tcpdump fängt nur Pakete ab die auch für den Rechner bestimmt sind
|
| -q
|
quick
|
Zeigt weniger Protokoll-Informationen
|
| -v
|
verbose
|
Zeigt mehr Informationen an, steigerbar bis -vvv
|
Filter
Da man jetzt immernoch mit allen Pakete die in unserer Netzwerkkarte so ankommen zu kämpfen hat, hat man unter vielen anderen folgende Filter-Optionen zur Hand:
Optionen
| Filter
|
Match
|
| host IP
|
IP-Adresse
|
| port PORT
|
Port-Nummer
|
| net NET/CIDR
|
Netz und Netznummer in CIDR Schreibweise
|
| src (host IP|port PORT|net NET/CIDR)
|
Quellen IP-Adresse, Port-Nummer oder Netz
|
| dst (host IP|port PORT|net NET/CIDR)
|
Ziel IP-Adresse,Port-Nummer oder Netz
|
| ! oder not
|
Negation
|
| && oder and
|
Und Verknüpfung
|
| || oder or
|
Oder Verknüpfung
|
| icmp
|
Protokoll ICMP
|
| udp
|
Protokoll UDP
|
| tcp
|
Protokoll TCP
|
Filter Praxis
- Wir schneiden alle Pakete mit, die über die Schnittstelle enp0s3 rein oder reingehen.
- Wir schneiden alle Pakete mit, die über die Schnittstelle enp0s9 rein oder reingehen.
- Wir schneiden ICMP Pakete mit, die über die Schnittstelle enp0s3 rein oder reingehen.
- tcpdump -n -i enp0s3 icmp
- Schneide nur 4 Pakete mit.
- tcpdump -c 4 -n -i enp0s3 icmp
- Zeigt den Mitschnitt von allen Interface und zusätzlich die Richtung.
- Entweder icmp oder arp Protokoll anzeigen
- tcpdump -ni enp0s3 icmp or arp
- Anzeigen von https Verkehr
- tcpdump -ni enp0s3 port 443
- Zeige alles an ausser ssh
- tcpdump -ni enp0s3 ! port 22