tcpdump
adalah utilitas baris perintah yang dapat Anda gunakan untuk menangkap dan memeriksa lalu lintas jaringan yang menuju dan dari sistem Anda. Ini adalah alat yang paling umum digunakan di antara administrator jaringan untuk memecahkan masalah jaringan dan pengujian keamanan.
Terlepas dari namanya, dengan tcpdump
, Anda juga dapat menangkap lalu lintas non-TCP seperti UDP, ARP, atau ICMP. Paket yang ditangkap dapat ditulis ke file atau output standar. Salah satu fitur yang paling kuat dari tcpdump
perintahnya adalah kemampuannya untuk menggunakan filter dan hanya menangkap data yang ingin Anda analisis.
Dalam artikel ini, kita akan membahas dasar-dasar cara menggunakan tcpdump
perintah di Linux.
Memasang tcpdump
#
tcpdump
diinstal secara default di sebagian besar distribusi Linux dan macOS. Untuk memeriksa apakah tcpdump
perintah tersedia pada jenis sistem Anda:
tcpdump --version
Outputnya akan terlihat seperti ini:
tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.1.1b 26 Feb 2019
Jika tcpdump
tidak ada di sistem Anda, perintah di atas akan mencetak "tcpdump:command not found". Anda dapat dengan mudah menginstal tcpdump
menggunakan pengelola paket distro Anda.
Memasang tcpdump
di Ubuntu dan Debian #
sudo apt update && sudo apt install tcpdump
Memasang tcpdump
di CentOS dan Fedora #
sudo yum install tcpdump
Memasang tcpdump
di Arch Linux #
sudo pacman -S tcpdump
Menangkap Paket dengan tcpdump
#
Sintaks umum untuk tcpdump
perintahnya adalah sebagai berikut:
tcpdump [options] [expression]
- Perintah
options
memungkinkan Anda untuk mengontrol perilaku perintah. - Filter
expression
menentukan paket mana yang akan ditangkap.
Hanya root atau pengguna dengan sudo
hak istimewa dapat menjalankan tcpdump
. Jika Anda mencoba menjalankan perintah sebagai pengguna yang tidak memiliki hak istimewa, Anda akan mendapatkan pesan kesalahan:“Anda tidak memiliki izin untuk merekam di perangkat itu”.
Kasus penggunaan yang paling sederhana adalah memanggil tcpdump
tanpa opsi dan filter apa pun:
sudo tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
15:47:24.248737 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
15:47:24.248785 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 108:144, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 36
15:47:24.248828 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 144:252, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
... Long output suppressed
23116 packets captured
23300 packets received by filter
184 packets dropped by kernel
tcpdump
akan terus menangkap paket dan menulis ke output standar sampai menerima sinyal interupsi. Gunakan Ctrl+C
kombinasi tombol untuk mengirim sinyal interupsi dan menghentikan perintah.
Untuk keluaran yang lebih verbose, berikan -v
pilihan, atau -vv
untuk keluaran yang lebih bertele-tele:
sudo tcpdump -vv
Anda dapat menentukan jumlah paket yang akan diambil menggunakan -c
pilihan. Misalnya, untuk menangkap hanya sepuluh paket, Anda harus mengetik:
sudo tcpdump -c 10
Setelah menangkap paket, tcpdump
akan berhenti.
Ketika tidak ada antarmuka yang ditentukan, tcpdump
menggunakan antarmuka pertama yang ditemukan dan membuang semua paket melalui antarmuka itu.
Gunakan -D
opsi untuk mencetak daftar semua antarmuka jaringan yang tersedia yang dapat dikumpulkan oleh tcpdump dari:
sudo tcpdump -D
Untuk setiap antarmuka, perintah mencetak nama antarmuka, deskripsi singkat, dan indeks terkait (nomor):
1.ens3 [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
Output di atas menunjukkan bahwa ens3
adalah antarmuka pertama yang ditemukan oleh tcpdump
dan digunakan ketika tidak ada antarmuka yang disediakan untuk perintah. Antarmuka kedua any
adalah perangkat khusus yang memungkinkan Anda menangkap semua antarmuka aktif.
Untuk menentukan antarmuka tempat Anda ingin menangkap lalu lintas, jalankan perintah dengan -i
pilihan diikuti dengan nama antarmuka atau indeks terkait. Misalnya, untuk menangkap semua paket dari semua antarmuka, Anda harus menentukan any
antarmuka:
sudo tcpdump -i any
Secara default, tcpdump
melakukan resolusi DNS terbalik pada alamat IP dan menerjemahkan nomor port menjadi nama. Gunakan -n
opsi untuk menonaktifkan terjemahan:
sudo tcpdump -n
Melewatkan pencarian DNS menghindari menghasilkan lalu lintas DNS dan membuat output lebih mudah dibaca. Disarankan untuk menggunakan opsi ini setiap kali Anda memanggil tcpdump
.
Alih-alih menampilkan output di layar, Anda dapat mengarahkannya ke file menggunakan operator pengalihan >
dan >>
:
sudo tcpdump -n -i any > file.out
Anda juga dapat melihat data sambil menyimpan ke file menggunakan tee
perintah:
sudo tcpdump -n -l | tee file.out
-l
option pada perintah di atas memberitahu tcpdump
untuk membuat jalur output buffer. Jika opsi ini tidak digunakan, output tidak akan ditulis di layar saat baris baru dibuat.
Memahami tcpdump
Keluaran #
tcpdump
mengeluarkan informasi untuk setiap paket yang ditangkap pada baris baru. Setiap baris menyertakan stempel waktu dan informasi tentang paket itu, bergantung pada protokolnya.
Format khas dari jalur protokol TCP adalah sebagai berikut:
[Timestamp] [Protocol] [Src IP].[Src Port] > [Dst IP].[Dst Port]: [Flags], [Seq], [Ack], [Win Size], [Options], [Data Length]
Mari kita buka bidang demi bidang dan jelaskan baris berikut:
15:47:24.248737 IP 192.168.1.185.22 > 192.168.1.150.37445: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
-
15:47:24.248737
- Stempel waktu paket yang diambil adalah dalam waktu lokal dan menggunakan format berikut:hours:minutes:seconds.frac
, di manafrac
adalah sepersekian detik sejak tengah malam. -
IP
- Protokol paket. Dalam hal ini, IP berarti protokol Internet versi 4 (IPv4). -
192.168.1.185.22
- Alamat IP dan port sumber, dipisahkan dengan titik (.
). -
192.168.1.150.37445
- Alamat IP dan port tujuan, dipisahkan dengan titik (.
). -
Flags [P.]
- Bidang Bendera TCP. Dalam contoh ini,[P.]
berarti paket Push Acknowledgement, yang digunakan untuk mengakui paket sebelumnya dan mengirim data. Nilai bidang bendera tipikal lainnya adalah sebagai berikut:- [.] - ACK (Penghargaan)
- [S] - SYN (Mulai Koneksi)
- [P] - PSH (Push Data)
- [F] - FIN (Selesaikan Koneksi)
- [R] - RST (Setel Ulang Koneksi)
- [S.] - SYN-ACK (Paket SynAcK)
-
seq 201747193:201747301
- Nomor urut ada difirst:last
notasi. Ini menunjukkan jumlah data yang terkandung dalam paket. Kecuali untuk paket pertama dalam aliran data di mana angka-angka ini mutlak, semua paket berikutnya digunakan sebagai posisi byte relatif. Dalam contoh ini, nomornya adalah201747193:201747301
, artinya paket ini berisi byte 201747193 hingga 201747301 dari aliran data. Gunakan-S
pilihan untuk mencetak nomor urut mutlak. -
ack 1226568763
Nomor pengakuan adalah nomor urut dari data berikutnya yang diharapkan oleh ujung lain dari koneksi ini. -
win 402
- Nomor jendela adalah jumlah byte yang tersedia di buffer penerima. -
options [nop,nop,TS val 1051794587 ecr 2679218230]
- Opsi TCP.nop
, atau "tidak ada operasi" adalah padding yang digunakan untuk membuat header TCP kelipatan 4 byte.TS val
adalah stempel waktu TCP, danecr
singkatan dari echo reply. Kunjungi dokumentasi IANA untuk informasi lebih lanjut tentang opsi TCP. -
length 108
- Panjang data payload
tcpdump
Filter #
Ketika tcpdump
dipanggil tanpa filter, ia menangkap semua lalu lintas dan menghasilkan sejumlah besar keluaran yang membuatnya sangat sulit untuk menemukan dan menganalisis paket yang diinginkan.
Filter adalah salah satu fitur paling canggih dari tcpdump
memerintah. Mereka karena mereka memungkinkan Anda untuk menangkap hanya paket-paket yang cocok dengan ekspresi. Misalnya, saat memecahkan masalah yang terkait dengan server web, Anda dapat menggunakan filter untuk mendapatkan lalu lintas HTTP saja.
tcpdump
menggunakan sintaks Berkeley Packet Filter (BPF) untuk memfilter paket yang diambil menggunakan berbagai parameter pemesinan seperti protokol, alamat IP dan port sumber dan tujuan, dll.
Dalam artikel ini, kita akan melihat beberapa filter yang paling umum. Untuk daftar semua filter yang tersedia, periksa halaman pcap-filterman.
Memfilter menurut Protokol #
Untuk membatasi pengambilan ke protokol tertentu, tentukan protokol sebagai filter. Misalnya, untuk hanya menangkap lalu lintas UDP, Anda akan menjalankan:
sudo tcpdump -n udp
Cara lain untuk mendefinisikan protokol adalah dengan menggunakan proto
kualifikasi, diikuti dengan nomor protokol. Perintah berikut akan menyaring protokol nomor 17 dan menghasilkan hasil yang sama seperti di atas:
sudo tcpdump -n proto 17
Untuk informasi lebih lanjut tentang nomor tersebut, periksa daftar nomor protokol IP.
Memfilter menurut Host #
Untuk menangkap hanya paket yang terkait dengan host tertentu, gunakan host
kualifikasi:
sudo tcpdump -n host 192.168.1.185
Host dapat berupa alamat IP atau nama.
Anda juga dapat memfilter output ke rentang IP tertentu menggunakan net
kualifikasi. Misalnya, untuk membuang hanya paket yang terkait dengan 10.10.0.0/16
Anda akan menggunakan:
sudo tcpdump -n net 10.10
Memfilter menurut Port #
Untuk membatasi pengambilan hanya untuk paket dari atau ke port tertentu, gunakan port
kualifikasi. Perintah di bawah ini menangkap paket yang terkait dengan layanan SSH (port 22) dengan menggunakan perintah ini:
sudo tcpdump -n port 23
portrange
qualifier memungkinkan Anda menangkap lalu lintas di berbagai port:
sudo tcpdump -n portrange 110-150
Memfilter menurut Sumber dan Tujuan #
Anda juga dapat memfilter paket berdasarkan sumber atau port tujuan atau host menggunakan src
, dst
, src and dst
, dan src or dst
kualifikasi.
Perintah berikut menangkap paket yang datang dari host dengan IP 192.168.1.185:
sudo tcpdump -n src host 192.168.1.185
Untuk menemukan lalu lintas yang datang dari sumber mana pun ke port 80, Anda akan menggunakan:
sudo tcpdump -n dst port 80
Filter Kompleks #
Filter dapat digabungkan menggunakan and
(&&
), or
(||
), dan nop
(!
) operator.
Misalnya, untuk menangkap semua lalu lintas HTTP yang berasal dari alamat IP sumber 192.168.1.185 Anda akan menggunakan perintah ini:
sudo tcpdump -n src 192.168.1.185 and tcp port 80
Anda juga dapat menggunakan tanda kurung untuk mengelompokkan dan membuat filter yang lebih kompleks:
sudo tcpdump -n 'host 192.168.1.185 and (tcp port 80 or tcp port 443)'
Untuk menghindari kesalahan penguraian saat menggunakan karakter khusus, lampirkan filter di dalam tanda kutip tunggal.
Berikut adalah contoh perintah lain untuk menangkap semua lalu lintas kecuali SSH dari alamat IP sumber 192.168.1.185:
sudo tcpdump -n src 192.168.1.185 and not dst port 22
Inspeksi Paket #
Secara default tcpdump
, hanya menangkap header paket. Namun, terkadang Anda mungkin perlu memeriksa isi paket.
tcpdump
memungkinkan Anda untuk mencetak konten paket dalam ASCII dan HEX.
-A
opsi memberitahu tcpdump
untuk mencetak setiap paket dalam ASCII dan -x
dalam HEX:
sudo tcpdump -n -A
Untuk menampilkan isi paket dalam HEX dan ASCII gunakan -X
pilihan:
sudo tcpdump -n -X
Membaca dan Menulis Rekaman ke File #
Fitur lain yang berguna dari tcpdump
adalah untuk menulis paket ke file. Ini berguna saat Anda menangkap sejumlah besar paket atau menangkap paket untuk analisis selanjutnya.
Untuk mulai menulis ke file, gunakan -w
opsi diikuti oleh file tangkapan keluaran:
sudo tcpdump -n -w data.pcap
Perintah di atas akan menyimpan hasil capture ke file bernama data.pcap
. Anda dapat menamai file sesuai keinginan, tetapi sudah menjadi kebiasaan umum untuk menggunakan .pcap
ekstensi (pengambilan paket).
Ketika -w
pilihan digunakan, output tidak ditampilkan di layar. tcpdump
menulis paket mentah dan membuat file biner yang tidak dapat dibaca dengan editor teks biasa.
Untuk memeriksa isi file, panggil tcpdump
dengan -r
pilihan:
sudo tcpdump -r data.pcap
Jika Anda ingin menjalankan tcpdump
di latar belakang, tambahkan simbol ampersand (&
) di akhir perintah.
File tangkapan juga dapat diperiksa dengan alat penganalisis paket lain seperti Wireshark.
Saat mengambil paket dalam jangka waktu yang lama, Anda dapat mengaktifkan rotasi file. tcpdump
memungkinkan Anda membuat file baru dan memutar file dump pada interval waktu tertentu atau ukuran tetap. Perintah berikut akan membuat hingga sepuluh file 200MB, bernama file.pcap0
, file.pcap1
, dan seterusnya:sebelum menimpa file lama.
sudo tcpdump -n -W 10 -C 200 -w /tmp/file.pcap
Setelah sepuluh file dibuat, file lama akan ditimpa.
Harap dicatat bahwa Anda hanya boleh menjalankan tcpdump
hanya selama pemecahan masalah.
Jika Anda ingin memulai tcpdump
pada waktu tertentu, Anda dapat menggunakan cronjob. tcpdump
tidak memiliki opsi untuk keluar setelah waktu tertentu. Anda dapat menggunakan timeout
perintah untuk menghentikan tcpdump
setelah beberapa waktu. Misalnya, untuk keluar setelah 5 menit, Anda akan menggunakan:
sudo timeout 300 tcpdump -n -w data.pcap
Kesimpulan #
tcpdump
adalah alat baris perintah untuk menganalisis dan memecahkan masalah terkait jaringan.
Artikel ini memperkenalkan Anda pada dasar-dasar tcpdump
penggunaan dan sintaks. Untuk dokumentasi yang lebih mendalam, kunjungi situs web tcpdump.
Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.