GNU/Linux >> Belajar Linux >  >> Linux

Pengantar menggunakan tcpdump di baris perintah Linux

Dalam pengalaman saya sebagai sysadmin, saya sering menemukan masalah konektivitas jaringan yang sulit untuk dipecahkan. Untuk situasi tersebut, tcpdump adalah sekutu yang hebat.

Terminal Linux

  • 7 emulator terminal teratas untuk Linux
  • 10 alat baris perintah untuk analisis data di Linux
  • Unduh Sekarang:lembar contekan SSH
  • Lembar contekan perintah Linux tingkat lanjut
  • Tutorial baris perintah Linux

Tcpdump adalah utilitas baris perintah yang memungkinkan Anda untuk menangkap dan menganalisis lalu lintas jaringan melalui sistem Anda. Ini sering digunakan untuk membantu memecahkan masalah jaringan, serta alat keamanan.

Sebuah alat yang kuat dan serbaguna yang mencakup banyak pilihan dan filter, tcpdump dapat digunakan dalam berbagai kasus. Karena ini adalah alat baris perintah, sangat ideal untuk dijalankan di server jarak jauh atau perangkat yang GUI tidak tersedia, untuk mengumpulkan data yang dapat dianalisis nanti. Itu juga dapat diluncurkan di latar belakang atau sebagai pekerjaan terjadwal menggunakan alat seperti cron.

Dalam artikel ini, kita akan melihat beberapa fitur tcpdump yang paling umum.

1. Instalasi di Linux

Tcpdump disertakan dengan beberapa distribusi Linux, jadi kemungkinan besar, Anda sudah menginstalnya. Periksa apakah tcpdump diinstal pada sistem Anda dengan perintah berikut:

$ which tcpdump
/usr/sbin/tcpdump

Jika tcpdump tidak diinstal, Anda dapat menginstalnya tetapi menggunakan manajer paket distribusi Anda. Misalnya, di CentOS atau Red Hat Enterprise Linux, seperti ini:

$ sudo dnf install -y tcpdump

Tcpdump membutuhkan libpcap , yang merupakan perpustakaan untuk menangkap paket jaringan. Jika tidak diinstal, itu akan ditambahkan secara otomatis sebagai ketergantungan.

Anda siap untuk mulai menangkap beberapa paket.

2. Menangkap paket dengan tcpdump

Untuk menangkap paket untuk pemecahan masalah atau analisis, tcpdump memerlukan izin yang lebih tinggi, jadi dalam contoh berikut sebagian besar perintah diawali dengan sudo .

Untuk memulai, gunakan perintah tcpdump --list-interfaces (atau -D singkatnya) untuk melihat antarmuka mana yang tersedia untuk ditangkap:

$ sudo tcpdump -D
1.eth0
2.virbr0
3.eth1
4.any (Pseudo-device that captures on all interfaces)
5.lo [Loopback]

Dalam contoh di atas, Anda dapat melihat semua antarmuka yang tersedia di mesin saya. Antarmuka khusus any memungkinkan pengambilan di antarmuka aktif apa pun.

Mari kita gunakan untuk mulai menangkap beberapa paket. Tangkap semua paket di antarmuka apa pun dengan menjalankan perintah ini:

$ 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 terus menangkap paket sampai menerima sinyal interupsi. Anda dapat menghentikan pengambilan dengan menekan Ctrl+C . Seperti yang Anda lihat dalam contoh ini, tcpdump menangkap lebih dari 9.000 paket. Dalam hal ini, karena saya terhubung ke server ini menggunakan ssh , tcpdump menangkap semua paket ini. Untuk membatasi jumlah paket yang diambil dan menghentikan tcpdump , gunakan -c (untuk hitung ) pilihan:

$ 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
$

Dalam hal ini, tcpdump berhenti menangkap secara otomatis setelah menangkap lima paket. Ini berguna dalam skenario yang berbeda—misalnya, jika Anda memecahkan masalah konektivitas dan menangkap beberapa paket awal sudah cukup. Ini bahkan lebih berguna ketika kita menerapkan filter untuk menangkap paket tertentu (ditunjukkan di bawah).

Secara default, tcpdump menyelesaikan alamat IP dan port menjadi nama, seperti yang ditunjukkan pada contoh sebelumnya. Saat memecahkan masalah jaringan, seringkali lebih mudah menggunakan alamat IP dan nomor port; nonaktifkan resolusi nama dengan menggunakan opsi -n dan resolusi port dengan -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

Seperti yang ditunjukkan di atas, keluaran tangkapan sekarang menampilkan alamat IP dan nomor port. Ini juga mencegah tcpdump mengeluarkan pencarian DNS, yang membantu menurunkan lalu lintas jaringan saat memecahkan masalah jaringan.

Sekarang setelah Anda dapat menangkap paket jaringan, mari kita jelajahi apa arti keluaran ini.

3. Memahami format keluaran

Tcpdump mampu menangkap dan mendekode banyak protokol yang berbeda, seperti TCP, UDP, ICMP, dan banyak lagi. Meskipun kami tidak dapat membahas semuanya di sini, untuk membantu Anda memulai, mari jelajahi paket TCP. Anda dapat menemukan detail lebih lanjut tentang berbagai format protokol di halaman manual tcpdump. Paket TCP khas yang ditangkap oleh tcpdump terlihat seperti ini:

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

Kolom dapat bervariasi tergantung pada jenis paket yang dikirim, tetapi ini adalah format umum.

Kolom pertama, 08:41:13.729687, mewakili stempel waktu dari paket yang diterima sesuai dengan jam lokal.

Selanjutnya, IP mewakili protokol lapisan jaringan—dalam hal ini, IPv4 . Untuk IPv6 paket, nilainya adalah IP6 .

Kolom berikutnya, 192.168.64.28.22 , adalah alamat IP dan port sumber. Ini diikuti oleh alamat IP dan port tujuan, diwakili oleh 192.168.64.1.41916 .

Setelah sumber dan tujuan, Anda dapat menemukan TCP Flags Flags [P.] . Nilai umum untuk bidang ini meliputi:

Nilai Jenis Bendera Deskripsi
S SYN Koneksi Mulai
F FIN Koneksi Selesai
P TEKAN Dorongan data
R RST Setel ulang koneksi
. ACK Penghargaan

Bidang ini juga dapat berupa kombinasi dari nilai-nilai ini, seperti [S.] untuk SYN-ACK paket.

Selanjutnya adalah nomor urut data yang terdapat dalam paket. Untuk paket pertama yang ditangkap, ini adalah angka mutlak. Paket-paket berikutnya menggunakan nomor relatif agar lebih mudah diikuti. Dalam contoh ini, urutannya adalah seq 196:568, yang berarti paket ini berisi byte 196 hingga 568 dari aliran ini.

Ini diikuti oleh Nomor Ack:ack 1 . Dalam hal ini, ini adalah 1 karena ini adalah sisi pengiriman data. Untuk sisi penerima data, bidang ini mewakili byte (data) yang diharapkan berikutnya pada aliran ini. Misalnya, nomor Ack untuk paket berikutnya dalam aliran ini adalah 568.

Kolom berikutnya adalah ukuran jendela win 309 , yang mewakili jumlah byte yang tersedia di buffer penerima, diikuti oleh opsi TCP seperti MSS (Ukuran Segmen Maksimum) atau Skala Jendela. Untuk detail tentang opsi protokol TCP, lihat Parameter Protokol Kontrol Transmisi (TCP).

Akhirnya, kami memiliki panjang paket, length 372 , yang mewakili panjang, dalam byte, dari data payload. Panjangnya adalah perbedaan antara byte terakhir dan pertama dalam nomor urut.

Sekarang mari pelajari cara memfilter paket untuk mempersempit hasil dan mempermudah pemecahan masalah tertentu.

4. Memfilter paket

Seperti disebutkan di atas, tcpdump dapat menangkap terlalu banyak paket, beberapa di antaranya bahkan tidak terkait dengan masalah yang sedang Anda atasi. Misalnya, jika Anda memecahkan masalah konektivitas dengan server web, Anda tidak tertarik dengan lalu lintas SSH, jadi menghapus paket SSH dari output akan mempermudah penyelesaian masalah sebenarnya.

Salah satu fitur tcpdump yang paling kuat adalah kemampuannya untuk memfilter paket yang diambil menggunakan berbagai parameter, seperti alamat IP sumber dan tujuan, port, protokol, dll. Mari kita lihat beberapa yang paling umum.

Protokol

Untuk memfilter paket berdasarkan protokol, tentukan protokol di baris perintah. Misalnya, ambil paket ICMP hanya dengan menggunakan perintah ini:

$ 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

Di terminal lain, coba ping ke komputer lain:

$ 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

Kembali ke pengambilan tcpdump, perhatikan bahwa tcpdump menangkap dan hanya menampilkan paket terkait ICMP. Dalam hal ini, tcpdump tidak menampilkan paket resolusi nama yang dihasilkan saat menyelesaikan nama 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

Tuan Rumah

Batasi pengambilan hanya untuk paket yang terkait dengan host tertentu dengan menggunakan host filter:

$ 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

Dalam contoh ini, tcpdump hanya menangkap dan menampilkan paket ke dan dari host 54.204.39.132 .

Pelabuhan

Untuk memfilter paket berdasarkan layanan atau port yang diinginkan, gunakan port Saring. Misalnya, ambil paket yang terkait dengan layanan web (HTTP) dengan menggunakan perintah ini:

$ 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

IP Sumber/nama host

Anda juga dapat memfilter paket berdasarkan alamat IP sumber atau tujuan atau nama host. Misalnya, untuk menangkap paket dari host 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

Perhatikan bahwa tcpdumps menangkap paket dengan alamat IP sumber 192.168.122.98 untuk beberapa layanan seperti resolusi nama (port 53) dan HTTP (port 80). Paket respons tidak ditampilkan karena IP sumbernya berbeda.

Sebaliknya, Anda dapat menggunakan dst filter untuk memfilter menurut IP tujuan/nama host:

$ 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

Ekspresi kompleks

Anda juga dapat menggabungkan filter dengan menggunakan operator logika and dan or untuk membuat ekspresi yang lebih kompleks. Misalnya, untuk memfilter paket dari alamat IP sumber 192.168.122.98 dan layanan HTTP saja, gunakan perintah ini:

$ 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

Anda dapat membuat ekspresi yang lebih kompleks dengan mengelompokkan filter dengan tanda kurung. Dalam hal ini, tutup seluruh ekspresi filter dengan tanda kutip untuk mencegah shell membingungkannya dengan ekspresi shell:

$ 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

Dalam contoh ini, kami memfilter paket hanya untuk layanan HTTP (port 80) dan alamat IP sumber 192.168.122.98 atau 54.204.39.132 . Ini adalah cara cepat untuk memeriksa kedua sisi aliran yang sama.

5. Memeriksa isi paket

Pada contoh sebelumnya, kami hanya memeriksa header paket untuk informasi seperti sumber, tujuan, port, dll. Terkadang hanya ini yang kami perlukan untuk memecahkan masalah konektivitas jaringan. Namun, terkadang kita perlu memeriksa isi paket untuk memastikan bahwa pesan yang kita kirim berisi apa yang kita butuhkan atau bahwa kita menerima tanggapan yang diharapkan. Untuk melihat isi paket, tcpdump menyediakan dua flag tambahan:-X untuk mencetak konten dalam hex, dan ASCII atau -A untuk mencetak konten dalam ASCII.

Misalnya, periksa konten HTTP dari permintaan web seperti ini:

$ 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

Ini berguna untuk memecahkan masalah dengan panggilan API, dengan asumsi panggilan menggunakan HTTP biasa. Untuk koneksi terenkripsi, output ini kurang berguna.

6. Menyimpan tangkapan ke file

Fitur berguna lainnya yang disediakan oleh tcpdump adalah kemampuan untuk menyimpan tangkapan ke file sehingga Anda dapat menganalisis hasilnya nanti. Ini memungkinkan Anda untuk menangkap paket dalam mode batch dalam semalam, misalnya, dan memverifikasi hasilnya di pagi hari. Ini juga membantu ketika ada terlalu banyak paket untuk dianalisis karena pengambilan real-time dapat terjadi terlalu cepat.

Untuk menyimpan paket ke file alih-alih menampilkannya di layar, gunakan opsi -w (untuk tulis ):

$ 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

Perintah ini menyimpan output dalam file bernama webserver.pcap . .pcap ekstensi singkatan dari "pengambilan paket" dan merupakan konvensi untuk format file ini.

Seperti yang ditunjukkan dalam contoh ini, tidak ada yang ditampilkan di layar, dan pengambilan selesai setelah menangkap 10 paket, sesuai dengan opsi -c10 . Jika Anda ingin umpan balik untuk memastikan paket ditangkap, gunakan opsi -v .

Tcpdump membuat file dalam format biner sehingga Anda tidak bisa begitu saja membukanya dengan editor teks. Untuk membaca isi file, jalankan tcpdump dengan -r (untuk baca ) pilihan:

$ 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
$

Karena Anda tidak lagi menangkap paket secara langsung dari antarmuka jaringan, sudo tidak diperlukan untuk membaca file.

Anda juga dapat menggunakan salah satu filter yang telah kita bahas untuk memfilter konten dari file, seperti yang Anda lakukan dengan data waktu nyata. Misalnya, periksa paket dalam file pengambilan dari alamat IP sumber 54.204.39.132 dengan menjalankan perintah ini:

$ 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

Apa selanjutnya?

Fitur dasar tcpdump ini akan membantu Anda memulai dengan alat yang hebat dan serbaguna ini. Untuk mempelajari lebih lanjut, lihat situs web tcpdump dan halaman manual.

Antarmuka baris perintah tcpdump memberikan fleksibilitas tinggi untuk menangkap dan menganalisis lalu lintas jaringan. If you need a graphical tool to understand more complex flows, look at Wireshark.

One benefit of Wireshark is that it can read .pcap files captured by 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.


Linux
  1. 8 tips untuk baris perintah Linux

  2. Pengantar perintah chown Linux

  3. Pengantar perintah alternatif di Linux

  1. Menggunakan kekuatan di baris perintah Linux

  2. Menggunakan Google Drive dari Baris Perintah Linux

  3. Buat file dengan menggunakan baris perintah di Linux

  1. Miliki sapi di baris perintah Linux

  2. Masukkan diri Anda ke dalam baris perintah Linux

  3. Menggunakan Stratis untuk mengelola penyimpanan Linux dari baris perintah