Z mé zkušenosti jako správce systému jsem často zjistil, že problémy se síťovým připojením jsou náročné na řešení. Pro tyto situace je tcpdump skvělým spojencem.
Linuxový terminál
- 7 nejlepších emulátorů terminálu pro Linux
- 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
- Stáhnout nyní:SSH cheat sheet
- Cheat sheet pro pokročilé příkazy systému Linux
- Výukové programy příkazového řádku systému Linux
Tcpdump je nástroj příkazového řádku, který vám umožňuje zachytit a analyzovat síťový provoz procházející vaším systémem. Často se používá k řešení problémů se sítí a také jako nástroj zabezpečení.
Výkonný a všestranný nástroj, který obsahuje mnoho možností a filtrů, tcpdump lze použít v různých případech. Vzhledem k tomu, že se jedná o nástroj příkazového řádku, je ideální spouštět jej na vzdálených serverech nebo zařízeních, pro která není k dispozici grafické uživatelské rozhraní, pro sběr dat, která lze později analyzovat. Lze jej také spustit na pozadí nebo jako naplánovanou úlohu pomocí nástrojů, jako je cron.
V tomto článku se podíváme na některé z nejběžnějších funkcí tcpdump.
1. Instalace na Linux
Tcpdump je součástí několika distribucí Linuxu, takže je pravděpodobné, že jej již máte nainstalovaný. Zkontrolujte, zda je ve vašem systému nainstalován tcpdump pomocí následujícího příkazu:
$ which tcpdump
/usr/sbin/tcpdump
Pokud tcpdump není nainstalován, můžete jej nainstalovat, ale pomocí správce balíčků vaší distribuce. Například na CentOS nebo Red Hat Enterprise Linux, jako je tento:
$ sudo dnf install -y tcpdump
Tcpdump vyžaduje libpcap
, což je knihovna pro zachytávání síťových paketů. Pokud není nainstalován, bude automaticky přidán jako závislost.
Jste připraveni začít zachycovat nějaké pakety.
2. Zachycování paketů pomocí tcpdump
K zachycení paketů pro odstraňování problémů nebo analýzu vyžaduje tcpdump zvýšená oprávnění, takže v následujících příkladech má většina příkazů předponu sudo
.
Pro začátek použijte příkaz tcpdump --list-interfaces
(nebo -D
zkráceně), abyste viděli, která rozhraní jsou k dispozici pro zachycení:
$ sudo tcpdump -D
1.eth0
2.virbr0
3.eth1
4.any (Pseudo-device that captures on all interfaces)
5.lo [Loopback]
Ve výše uvedeném příkladu můžete vidět všechna rozhraní dostupná v mém počítači. Speciální rozhraní any
umožňuje snímání v jakémkoli aktivním rozhraní.
Použijme to k zahájení zachycování některých paketů. Zachyťte všechny pakety v libovolném rozhraní spuštěním tohoto příkazu:
$ sudo tcpdump --interface any
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3770820720:3770820916, ack 3503648727, win 309, options [nop,nop,TS val 76577898 ecr 510770929], length 196
09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 391, options [nop,nop,TS val 510771017 ecr 76577898], length 0
09:56:18.295058 IP rhel75.59883 > gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43)
09:56:18.310225 IP gateway.domain > rhel75.59883: 2486 NXDomain* 0/1/0 (102)
09:56:18.312482 IP rhel75.49685 > gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44)
09:56:18.322425 IP gateway.domain > rhel75.49685: 34242 NXDomain* 0/1/0 (103)
09:56:18.323164 IP rhel75.56631 > gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44)
09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 196:584, ack 1, win 309, options [nop,nop,TS val 76577928 ecr 510771017], length 388
09:56:18.323563 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 584, win 411, options [nop,nop,TS val 510771047 ecr 76577928], length 0
09:56:18.335569 IP gateway.domain > rhel75.56631: 29904 NXDomain* 0/1/0 (103)
09:56:18.336429 IP rhel75.44007 > gateway.domain: 61677+ PTR? 98.122.168.192.in-addr.arpa. (45)
09:56:18.336655 IP gateway.domain > rhel75.44007: 61677* 1/0/0 PTR rhel75. (65)
09:56:18.337177 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 584:1644, ack 1, win 309, options [nop,nop,TS val 76577942 ecr 510771047], length 1060
---- SKIPPING LONG OUTPUT -----
09:56:19.342939 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 1752016, win 1444, options [nop,nop,TS val 510772067 ecr 76578948], length 0
^C
9003 packets captured
9010 packets received by filter
7 packets dropped by kernel
$
Tcpdump pokračuje v zachycování paketů, dokud neobdrží signál přerušení. Nahrávání můžete přerušit stisknutím Ctrl+C
. Jak můžete vidět v tomto příkladu, tcpdump
zachytil více než 9 000 paketů. V tomto případě, protože jsem připojen k tomuto serveru pomocí ssh
tcpdump zachytil všechny tyto pakety. Chcete-li omezit počet zachycených paketů a zastavit tcpdump
, použijte -c
(pro počet ) možnost:
$ sudo tcpdump -i any -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:21:30.242740 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3772575680:3772575876, ack 3503651743, win 309, options [nop,nop,TS val 81689848 ecr 515883153], length 196
11:21:30.242906 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 1443, options [nop,nop,TS val 515883235 ecr 81689848], length 0
11:21:30.244442 IP rhel75.43634 > gateway.domain: 57680+ PTR? 1.64.168.192.in-addr.arpa. (43)
11:21:30.244829 IP gateway.domain > rhel75.43634: 57680 NXDomain 0/0/0 (43)
11:21:30.247048 IP rhel75.33696 > gateway.domain: 37429+ PTR? 28.64.168.192.in-addr.arpa. (44)
5 packets captured
12 packets received by filter
0 packets dropped by kernel
$
V tomto případě tcpdump
automaticky zastavilo zachytávání po zachycení pěti paketů. To je užitečné v různých situacích – například pokud řešíte problémy s připojením a stačí zachytit několik počátečních paketů. To je ještě užitečnější, když použijeme filtry k zachycení konkrétních paketů (viz níže).
Ve výchozím nastavení tcpdump překládá IP adresy a porty na názvy, jak je ukázáno v předchozím příkladu. Při odstraňování problémů se sítí je často jednodušší použít adresy IP a čísla portů; deaktivovat překlad názvů pomocí volby -n
a rozlišení portu pomocí -nn
:
$ sudo tcpdump -i any -c5 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
23:56:24.292206 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 166198580:166198776, ack 2414541257, win 309, options [nop,nop,TS val 615664 ecr 540031155], length 196
23:56:24.292357 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 196, win 1377, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292570 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 372
23:56:24.292655 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 568, win 1400, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292752 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 568:908, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 340
5 packets captured
6 packets received by filter
0 packets dropped by kernel
Jak je uvedeno výše, výstup zachycení nyní zobrazuje adresy IP a čísla portů. To také zabraňuje tcpdump ve vydávání DNS vyhledávání, což pomáhá snížit provoz v síti při odstraňování problémů se sítí.
Nyní, když jste schopni zachytit síťové pakety, pojďme prozkoumat, co tento výstup znamená.
3. Pochopení výstupního formátu
Tcpdump je schopen zachytit a dekódovat mnoho různých protokolů, jako je TCP, UDP, ICMP a mnoho dalších. I když je zde nemůžeme pokrýt všechny, abychom vám pomohli začít, pojďme prozkoumat paket TCP. Více podrobností o různých formátech protokolů naleznete v manuálových stránkách tcpdump. Typický TCP paket zachycený tcpdump vypadá takto:
08:41:13.729687 IP 192.168.64.28.22 > 192.168.64.1.41916: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 372
Pole se mohou lišit v závislosti na typu odesílaného paketu, ale toto je obecný formát.
První pole, 08:41:13.729687,
představuje časové razítko přijatého paketu podle místních hodin.
Dále IP
představuje protokol síťové vrstvy – v tomto případě IPv4
. Pro IPv6
pakety, hodnota je IP6
.
Další pole, 192.168.64.28.22
, je zdrojová IP adresa a port. Následuje cílová IP adresa a port, reprezentovaný 192.168.64.1.41916
.
Po zdroji a cíli můžete najít příznaky TCP Flags [P.]
. Typické hodnoty pro toto pole zahrnují:
Hodnota | Typ příznaku | Popis |
S | SYN | Zahájení připojení |
F | FIN | Dokončení připojení |
P | PUSH | Datové odesílání |
R | RST | Resetování připojení |
. | ACK | Poděkování |
Toto pole může být také kombinací těchto hodnot, například [S.]
pro SYN-ACK
paket.
Dále následuje pořadové číslo dat obsažených v paketu. Pro první zachycený paket je to absolutní číslo. Následující pakety používají relativní číslo, aby bylo snazší je sledovat. V tomto příkladu je sekvence seq 196:568,
což znamená, že tento paket obsahuje bajty 196 až 568 tohoto toku.
Za ním následuje číslo potvrzení:ack 1
. V tomto případě je to 1, protože jde o stranu odesílající data. Pro stranu přijímající data toto pole představuje další očekávaný bajt (data) v tomto toku. Například číslo potvrzení pro další paket v tomto toku bude 568.
Další pole je velikost okna win 309
, který představuje počet bajtů dostupných v přijímací vyrovnávací paměti, následovaný možnostmi TCP, jako je MSS (Maximum Segment Size) nebo Window Scale. Podrobnosti o možnostech protokolu TCP naleznete v části Parametry protokolu TCP (Transmission Control Protocol).
Nakonec máme délku paketu, length 372
, což představuje délku dat užitečného zatížení v bajtech. Délka je rozdíl mezi posledním a prvním bajtem v pořadovém čísle.
Nyní se naučíme, jak filtrovat pakety, abychom zúžili výsledky a usnadnili řešení konkrétních problémů.
4. Filtrování paketů
Jak bylo uvedeno výše, tcpdump může zachytit příliš mnoho paketů, z nichž některé ani nesouvisí s problémem, který řešíte. Pokud například řešíte problém s připojením k webovému serveru, nemáte zájem o provoz SSH, takže odstranění SSH paketů z výstupu usnadňuje práci na skutečném problému.
Jednou z nejvýkonnějších funkcí tcpdump je jeho schopnost filtrovat zachycené pakety pomocí různých parametrů, jako jsou zdrojové a cílové IP adresy, porty, protokoly atd. Podívejme se na některé z nejběžnějších.
Protokol
Chcete-li filtrovat pakety na základě protokolu, zadejte protokol na příkazovém řádku. Například zachyťte ICMP pakety pouze pomocí tohoto příkazu:
$ sudo tcpdump -i any -c5 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
V jiném terminálu zkuste ping na jiný počítač:
$ ping opensource.com
PING opensource.com (54.204.39.132) 56(84) bytes of data.
64 bytes from ec2-54-204-39-132.compute-1.amazonaws.com (54.204.39.132): icmp_seq=1 ttl=47 time=39.6 ms
Zpět v zachycení tcpdump si všimněte, že tcpdump zachycuje a zobrazuje pouze pakety související s ICMP. V tomto případě tcpdump nezobrazuje pakety rozlišení názvů, které byly vygenerovány při překladu názvu opensource.com
:
09:34:20.136766 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 1, length 64
09:34:20.176402 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 1, length 64
09:34:21.140230 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 2, length 64
09:34:21.180020 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 2, length 64
09:34:22.141777 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 3, length 64
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Hostitel
Omezte zachycování pouze na pakety související s konkrétním hostitelem pomocí host
filtr:
$ sudo tcpdump -i any -c5 -nn host 54.204.39.132
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:54:20.042023 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [S], seq 1375157070, win 29200, options [mss 1460,sackOK,TS val 122350391 ecr 0,nop,wscale 7], length 0
09:54:20.088127 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [S.], seq 1935542841, ack 1375157071, win 28960, options [mss 1460,sackOK,TS val 522713542 ecr 122350391,nop,wscale 9], length 0
09:54:20.088204 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122350437 ecr 522713542], length 0
09:54:20.088734 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122350438 ecr 522713542], length 112: HTTP: GET / HTTP/1.1
09:54:20.129733 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [.], ack 113, win 57, options [nop,nop,TS val 522713552 ecr 122350438], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
V tomto příkladu tcpdump zachycuje a zobrazuje pouze pakety do az hostitele 54.204.39.132
.
Port
Chcete-li filtrovat pakety na základě požadované služby nebo portu, použijte port
filtr. Například zachyťte pakety související s webovou službou (HTTP) pomocí tohoto příkazu:
$ sudo tcpdump -i any -c5 -nn port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:58:28.790548 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [S], seq 1745665159, win 29200, options [mss 1460,sackOK,TS val 122599140 ecr 0,nop,wscale 7], length 0
09:58:28.834026 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [S.], seq 4063583040, ack 1745665160, win 28960, options [mss 1460,sackOK,TS val 522775728 ecr 122599140,nop,wscale 9], length 0
09:58:28.834093 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122599183 ecr 522775728], length 0
09:58:28.834588 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122599184 ecr 522775728], length 112: HTTP: GET / HTTP/1.1
09:58:28.878445 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [.], ack 113, win 57, options [nop,nop,TS val 522775739 ecr 122599184], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Zdrojová IP/název hostitele
Pakety můžete také filtrovat na základě zdrojové nebo cílové IP adresy nebo názvu hostitele. Chcete-li například zachytit pakety z hostitele 192.168.122.98
:
$ sudo tcpdump -i any -c5 -nn src 192.168.122.98
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:02:15.220824 IP 192.168.122.98.39436 > 192.168.122.1.53: 59332+ A? opensource.com. (32)
10:02:15.220862 IP 192.168.122.98.39436 > 192.168.122.1.53: 20749+ AAAA? opensource.com. (32)
10:02:15.364062 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [S], seq 1108640533, win 29200, options [mss 1460,sackOK,TS val 122825713 ecr 0,nop,wscale 7], length 0
10:02:15.409229 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [.], ack 669337581, win 229, options [nop,nop,TS val 122825758 ecr 522832372], length 0
10:02:15.409667 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [P.], seq 0:112, ack 1, win 229, options [nop,nop,TS val 122825759 ecr 522832372], length 112: HTTP: GET / HTTP/1.1
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Všimněte si, že tcpdumps zachytil pakety se zdrojovou IP adresou 192.168.122.98
pro více služeb, jako je překlad názvů (port 53) a HTTP (port 80). Pakety odpovědí se nezobrazují, protože jejich zdrojová IP je odlišná.
Naopak můžete použít dst
filtr pro filtrování podle cílové IP/názvu hostitele:
$ sudo tcpdump -i any -c5 -nn dst 192.168.122.98
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:05:03.572931 IP 192.168.122.1.53 > 192.168.122.98.47049: 2248 1/0/0 A 54.204.39.132 (48)
10:05:03.572944 IP 192.168.122.1.53 > 192.168.122.98.47049: 33770 0/0/0 (32)
10:05:03.621833 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [S.], seq 3474204576, ack 3256851264, win 28960, options [mss 1460,sackOK,TS val 522874425 ecr 122993922,nop,wscale 9], length 0
10:05:03.667767 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [.], ack 113, win 57, options [nop,nop,TS val 522874436 ecr 122993972], length 0
10:05:03.672221 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 522874437 ecr 122993972], length 642: HTTP: HTTP/1.1 302 Found
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Složité výrazy
Filtry můžete také kombinovat pomocí logických operátorů and
a or
k vytváření složitějších výrazů. Chcete-li například filtrovat pakety ze zdrojové IP adresy 192.168.122.98
a service HTTP only, použijte tento příkaz:
$ sudo tcpdump -i any -c5 -nn src 192.168.122.98 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:08:00.472696 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [S], seq 2712685325, win 29200, options [mss 1460,sackOK,TS val 123170822 ecr 0,nop,wscale 7], length 0
10:08:00.516118 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 268723504, win 229, options [nop,nop,TS val 123170865 ecr 522918648], length 0
10:08:00.516583 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [P.], seq 0:112, ack 1, win 229, options [nop,nop,TS val 123170866 ecr 522918648], length 112: HTTP: GET / HTTP/1.1
10:08:00.567044 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 123170916 ecr 522918661], length 0
10:08:00.788153 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [F.], seq 112, ack 643, win 239, options [nop,nop,TS val 123171137 ecr 522918661], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Složitější výrazy můžete vytvořit seskupením filtru se závorkami. V tomto případě uzavřete celý výraz filtru do uvozovek, aby si je shell nezaměnil s výrazy shellu:
$ sudo tcpdump -i any -c5 -nn "port 80 and (src 192.168.122.98 or src 54.204.39.132)"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:10:37.602214 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [S], seq 871108679, win 29200, options [mss 1460,sackOK,TS val 123327951 ecr 0,nop,wscale 7], length 0
10:10:37.650651 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [S.], seq 854753193, ack 871108680, win 28960, options [mss 1460,sackOK,TS val 522957932 ecr 123327951,nop,wscale 9], length 0
10:10:37.650708 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 0
10:10:37.651097 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 112: HTTP: GET / HTTP/1.1
10:10:37.692900 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [.], ack 113, win 57, options [nop,nop,TS val 522957942 ecr 123328000], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
V tomto příkladu filtrujeme pakety pouze pro službu HTTP (port 80) a zdrojové IP adresy 192.168.122.98
nebo 54.204.39.132
. Toto je rychlý způsob, jak prozkoumat obě strany stejného toku.
5. Kontrola obsahu paketu
V předchozích příkladech kontrolujeme pouze hlavičky paketů pro informace, jako je zdroj, cíle, porty atd. Někdy je to vše, co potřebujeme k řešení problémů s připojením k síti. Někdy však potřebujeme zkontrolovat obsah paketu, abychom se ujistili, že zpráva, kterou odesíláme, obsahuje to, co potřebujeme, nebo že jsme obdrželi očekávanou odpověď. Chcete-li zobrazit obsah paketu, tcpdump poskytuje dva další příznaky:-X
pro tisk obsahu v hexadecimálním formátu a ASCII nebo -A
pro tisk obsahu v ASCII.
Zkontrolujte například obsah HTTP webového požadavku takto:
$ sudo tcpdump -i any -c10 -nn -A port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
13:02:14.871803 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [S], seq 2546602048, win 29200, options [mss 1460,sackOK,TS val 133625221 ecr 0,nop,wscale 7], length 0
E..<..@[email protected].'[email protected]............
............................
13:02:14.910734 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [S.], seq 1877348646, ack 2546602049, win 28960, options [mss 1460,sackOK,TS val 525532247 ecr 133625221,nop,wscale 9], length 0
E..<..@./..a6.'...zb.P..o..&...A..q a..........
.R.W....... ................
13:02:14.910832 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 133625260 ecr 525532247], length 0
E..4..@[email protected].'....P...Ao..'...........
.....R.W................
13:02:14.911808 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 133625261 ecr 525532247], length 112: HTTP: GET / HTTP/1.1
E.....@[email protected].'....P...Ao..'...........
.....R.WGET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: opensource.com
Connection: Keep-Alive
................
13:02:14.951199 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [.], ack 113, win 57, options [nop,nop,TS val 525532257 ecr 133625261], length 0
E..4.F@./.."6.'...zb.P..o..'.......9.2.....
.R.a....................
13:02:14.955030 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 525532258 ecr 133625261], length 642: HTTP: HTTP/1.1 302 Found
E....G@./...6.'...zb.P..o..'.......9.......
.R.b....HTTP/1.1 302 Found
Server: nginx
Date: Sun, 23 Sep 2018 17:02:14 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 207
X-Content-Type-Options: nosniff
Location: https://opensource.com/
Cache-Control: max-age=1209600
Expires: Sun, 07 Oct 2018 17:02:14 GMT
X-Request-ID: v-6baa3acc-bf52-11e8-9195-22000ab8cf2d
X-Varnish: 632951979
Age: 0
Via: 1.1 varnish (Varnish/5.2)
X-Cache: MISS
Connection: keep-alive
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://opensource.com/%3C/span%3Ehttps%3A%3Cspan%20class%3D"sy0">//opensource.com/">here</a>.</p>
</body></html>
................
13:02:14.955083 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 133625304 ecr 525532258], length 0
E..4..@[email protected].'....P....o..............
.....R.b................
13:02:15.195524 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 133625545 ecr 525532258], length 0
E..4..@[email protected].'....P....o..............
.....R.b................
13:02:15.236592 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 525532329 ecr 133625545], length 0
E..4.H@./.. 6.'...zb.P..o..........9.I.....
.R......................
13:02:15.236656 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 133625586 ecr 525532329], length 0
E..4..@[email protected].'....P....o..............
.....R..................
10 packets captured
10 packets received by filter
0 packets dropped by kernel
To je užitečné při odstraňování problémů s voláními API za předpokladu, že volání používají prostý HTTP. U šifrovaných připojení je tento výstup méně užitečný.
6. Ukládání snímků do souboru
Další užitečnou funkcí, kterou poskytuje tcpdump, je možnost uložit zachycený soubor do souboru, abyste mohli později analyzovat výsledky. To vám umožní zachytit pakety v dávkovém režimu například přes noc a ráno ověřit výsledky. Pomáhá také, když je k analýze příliš mnoho paketů, protože zachycení v reálném čase může probíhat příliš rychle.
Chcete-li pakety uložit do souboru místo jejich zobrazení na obrazovce, použijte volbu -w
(pro zápis ):
$ sudo tcpdump -i any -c10 -nn -w webserver.pcap port 80
[sudo] password for ricardo:
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Tento příkaz uloží výstup do souboru s názvem webserver.pcap
. .pcap
extension znamená "packet capture" a je konvencí pro tento formát souboru.
Jak je ukázáno v tomto příkladu, na obrazovce se nic nezobrazí a zachycení skončí po zachycení 10 paketů podle volby -c10
. Pokud chcete nějakou zpětnou vazbu, abyste zajistili zachycení paketů, použijte volbu -v
.
Tcpdump vytvoří soubor v binárním formátu, takže jej nelze jednoduše otevřít pomocí textového editoru. Chcete-li přečíst obsah souboru, spusťte tcpdump s -r
(pro přečtení ) možnost:
$ tcpdump -nn -r webserver.pcap
reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
13:36:57.679494 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [S], seq 3709732619, win 29200, options [mss 1460,sackOK,TS val 135708029 ecr 0,nop,wscale 7], length 0
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
13:36:57.719005 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 0
13:36:57.719186 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 112: HTTP: GET / HTTP/1.1
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
13:36:57.760182 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 135708109 ecr 526052959], length 0
13:36:57.977602 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 135708327 ecr 526052959], length 0
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0
13:36:58.022132 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 135708371 ecr 526053025], length 0
$
Protože již nezachytáváte pakety přímo ze síťového rozhraní, sudo
není vyžadováno ke čtení souboru.
K filtrování obsahu ze souboru můžete také použít kterýkoli z filtrů, které jsme probrali, stejně jako u dat v reálném čase. Prohlédněte si například pakety v zachyceném souboru ze zdrojové IP adresy 54.204.39.132
provedením tohoto příkazu:
$ tcpdump -nn -r webserver.pcap src 54.204.39.132
reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0
Co bude dál?
Tyto základní funkce tcpdump vám pomohou začít s tímto výkonným a všestranným nástrojem. Chcete-li se dozvědět více, navštivte webové stránky tcpdump a manuálové stránky.
Rozhraní příkazového řádku tcpdump poskytuje velkou flexibilitu pro zachycování a analýzu síťového provozu. Pokud potřebujete grafický nástroj k pochopení složitějších toků, podívejte se na Wireshark.
Jednou z výhod Wiresharku je, že umí číst .pcap
soubory zachycené tcpdump. You can use tcpdump to capture packets in a remote machine that does not have a GUI and analyze the result file with Wireshark, but that is a topic for another day.
This article was originally published in October 2018 and has been updated by Seth Kenlon.