tcpdump
adalah utilitas baris perintah yang dapat Anda gunakan untuk capture dan melakukan inspeksi terhadap lalu lintas jaringan dari dan ke sistem Anda.
tcpdump adalah tools yang paling umum digunakan di antara security pentester atau administrator jaringan baik untuk mengatasi 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 diambil dapat ditulis ke file atau output standar.
Salah satu fitur paling kuat dari perintah tcpdump
adalah kemampuannya untuk menggunakan filter dan hanya meng-capture data yang ingin Anda analisis.
Pada artikel ini, kita akan membahas dasar-dasar cara menggunakan perintah tcpdump
di Linux.
Install tcpdump
tcpdump diinstal secara default pada sebagian besar distribusi Linux dan macOS. Untuk memeriksa apakah perintah tcpdump 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 package manager distro Anda.
Instal tcpdump di Ubuntu dan Debian
sudo apt update && sudo apt install tcpdump
Instal tcpdump di CentOS dan Fedora
sudo yum install tcpdump
Instal tcpdump di Arch Linux
sudo pacman -S tcpdump
Cara Capture Packet dengan tcpdump
Sintaks umum untuk perintah tcpdump adalah sebagai berikut:
tcpdump [options] [expression]
- Perintah
options
memungkinkan Anda untuk mengontrol perilaku tcpdump saat mengambil data. - filter
expression
menentukan paket mana yang akan diambil.
Hanya root atau user dengan hak sudo
yang dapat menjalankan tcpdump. Jika Anda mencoba menjalankan perintah sebagai user yang tidak memiliki hak akses sudo / sebagai root, Anda akan mendapatkan pesan error : “You don’t have permission to capture on that device“.
Kasus penggunaan yang paling sederhana adalah menjalankan 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 linuxid-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 linuxid-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 linuxid-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 kombinasi tombol Ctrl + C
untuk mengirim sinyal interupsi dan menghentikan perintah.
Untuk output verbose yang lebih banyak, berikan opsi -v
, atau -vv
untuk keluaran verbose yang lebih banyak lagi:
sudo tcpdump -vv
Anda dapat menentukan jumlah packet yang akan ditangkap menggunakan opsi -c
. Misalnya, untuk menangkap hanya sepuluh paket, maka perintah yang Anda ketikkan:
sudo tcpdump -c 10
Setelah menangkap paket, tcpdump
akan berhenti secara otomatis.
Ketika tidak ada interface yang ditentukan, tcpdump
menggunakan interface pertama yang ditemukannya dan membuang semua paket melalui interface tersebut.
Gunakan opsi -D
untuk mencetak daftar semua interface jaringan yang tersedia yang bisa diambil oleh tcpdump :
sudo tcpdump -D
Untuk setiap interface, perintah akan mencetak nama dari interface, deskripsi singkat, dan indeks terkait (angka):
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 interface pertama yang ditemukan oleh tcpdump
dan digunakan ketika tidak ada interface yang disediakan untuk perintah. Interface kedua any
, adalah perangkat khusus yang memungkinkan Anda untuk menangkap semua interface yang aktif.
Untuk menentukan interface tempat Anda ingin menangkap lalu lintas, aktifkan perintah dengan opsi -i
diikuti oleh nama interface atau indeks yang terkait. Misalnya, untuk mengambil semua paket dari semua interface, Maka interface yang Anda pilih untuk menangkap data adalah interface any
:
sudo tcpdump -i any
Secara default, tcpdump melakukan reverse DNS resolution pada alamat IP dan nomor port di terjemahkan menjadi hostname. Gunakan opsi -n untuk menonaktifkan fitur translation:
sudo tcpdump -n
Dengan skip DNS lookup, maka tcpdump tidak akan generate data DNS traffic dan membuat output lebih mudah dibaca. Disarankan untuk menggunakan opsi ini setiap kali Anda menjalankan tcpdump.
Alih-alih menampilkan output di layar, Anda dapat mengarahkan ulang ke file menggunakan operator redirection >
dan >>
:
sudo tcpdump -n -i any > file.out
Anda juga dapat melihat data secara real-time sambil menyimpan ke file menggunakan perintah tee
:
sudo tcpdump -n -l | tee file.out
Opsi -l
pada perintah di atas memberi tahu tcpdump untuk membuat garis output buffered. Ketika opsi ini tidak digunakan, output tidak akan ditampilkan di layar ketika baris baru dihasilkan.
Memahami Output Perintah tcpdump
tcpdump menampilkan informasi untuk setiap paket yang diambil pada baris baru. Setiap baris menyertakan timestamp dan informasi tentang paket tersebut, tergantung pada protokolnya.
Format umum dari baris 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 telaah bidang demi bidang dan menjelaskan 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
– Timestamp dari paket yang diambil adalah dalam waktu lokal dan menggunakan format berikut:jam:menit:detik.frac
, di mana frac adalah pecahan dari 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 (local) yang dipisahkan oleh titik (.
).192.168.1.150.37445
– Alamat IP dan port tujuan yang dipisahkan oleh titik (.
).Flags [P.]
– bidang Flags TCP. Dalam contoh ini, [P.] berarti packet Push Acknowledgement, yang digunakan untuk mengakui paket sebelumnya dan mengirim data. Nilai Flags lainnya adalah sebagai berikut:- [.] – ACK (Acknowledgment)
- [S] – SYN (Start Connection)
- [P] – PSH (Push Data)
- [F] – FIN (Finish Connection)
- [R] – RST (Reset Connection)
- [S.] – SYN-ACK (SynAcK Packet)
seq 201747193:201747301
– Ini menunjukkan jumlah data yang terkandung dalam paket. Kecuali untuk paket pertama dalam aliran data di mana angka-angka ini mutlak, semua paket selanjutnya digunakan sebagai posisi byte relatif. Dalam contoh ini, jumlahnya adalah201747193:201747301
, artinya paket ini berisi byte 201747193 hingga 201747301 dari aliran data. Gunakan opsi-S
untuk mencetak angka urutan absolut.ack 1226568763
– Nomor acknowledgment adalah nomor urut data berikutnya yang diharapkan oleh ujung lain dari koneksi ini.win 402
– Window number adalah jumlah byte yang tersedia di buffer penerima.options [nop,nop,TS val 1051794587 ecr 2679218230]
– Opsi TCP.nop
, atau “no operation” adalah padding yang digunakan untuk membuat TCP header lebih dari 4 byte.TS val
adalah TCP timestamp, danecr
adalah singkatan untuk echo reply. Kunjungi IANA documentation untuk informasi lebih lanjut tentang opsi TCP.length 108
– Panjang data payload
Filter tcpdump
Ketika tcpdump dijalankan tanpa filter, ia menangkap semua lalu lintas dan menghasilkan sejumlah besar output yang membuatnya sangat sulit untuk menemukan dan menganalisis packet yang diminati.
Filter adalah salah satu fitur paling kuat dari perintah tcpdump. Fungsi filter memungkinkan Anda untuk menangkap hanya paket-paket yang cocok dengan expression yang Anda kehendaki. Misalnya, saat memecahkan masalah yang terkait dengan webserver, Anda dapat menggunakan filter untuk mendapatkan hanya lalu lintas HTTP.
tcpdump menggunakan sintaksis Berkeley Packet Filter (BPF) untuk memfilter paket yang ditangkap menggunakan berbagai parameter pemesinan seperti protokol, sumber dan tujuan alamat IP dan port, dll.
Di artikel ini, kita akan melihat beberapa filter yang paling umum. Untuk daftar semua filter yang tersedia, periksa halaman manual pcap-filter.
Filter tcpdump berdasar Protokol
Untuk membatasi penangkapan ke protokol tertentu, tentukan protokol sebagai filter. Misalnya, untuk menangkap hanya lalu lintas UDP, maka perintah yang akan Anda gunakan :
sudo tcpdump -n udp
Cara lain untuk mendefinisikan protokol adalah dengan menggunakan kualifikasi proto
, diikuti oleh nomor protokol. Perintah berikut akan memfilter nomor protokol 17 dan menghasilkan hasil yang sama seperti yang di atas:
sudo tcpdump -n proto 17
Untuk informasi lebih lanjut tentang angka-angka ini, periksa daftar nomor protokol IP di Wikipedia.
Filter tcpdump berdasar Host
Untuk menangkap hanya paket yang terkait dengan host tertentu, gunakan kualifikasi host:
sudo tcpdump -n host 192.168.1.185
Host dapat berupa alamat IP atau nama.
Anda juga dapat memfilter output ke rentang IP yang diberikan menggunakan kualifikasi net
. Misalnya, untuk membuang paket yang terkait dengan 10.10.0.0/16,
Maka perintah yang akan Anda gunakan:
sudo tcpdump -n net 10.10
Filter tcpdump berdasar Port
Untuk membatasi penangkapan hanya untuk paket dari atau ke port
tertentu, gunakan kualifikasi port. Perintah di bawah ini menangkap paket yang terkait dengan layanan SSH (port 22) dengan menggunakan perintah berikut :
sudo tcpdump -n port 23
Kualifikasi portrange
memungkinkan Anda untuk menangkap lalu lintas di berbagai port:
sudo tcpdump -n portrange 110-150
Memfilter berdasarkan Sumber dan Tujuan
Anda juga dapat memfilter paket berdasarkan sumber atau port tujuan atau host menggunakan kualifikasi src
, dst
, src dan dst
, dan src atau dst
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 apa pun ke port 80, Anda dapat menggunakan perintah :
sudo tcpdump -n dst port 80
Filter Kompleks
Filter dapat digabungkan menggunakan operator and
(&&
), or
(||
), dan not
(!
).
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, sertakan 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, kadang-kadang Anda mungkin perlu memeriksa konten paket.
tcpdump memungkinkan Anda untuk mencetak konten paket dalam bentuk ASCII dan HEX.
Opsi -A
memberitahu tcpdump
untuk mencetak setiap paket dalam ASCII dan -x
dalam HEX:
sudo tcpdump -n -A
Untuk menampilkan konten paket di HEX dan ASCII gunakan opsi -X
:
sudo tcpdump -n -X
Membaca dan Menulis hasil Capture ke File
Fitur lain yang berguna dari tcpdump adalah menulis paket ke file. Ini berguna ketika Anda menangkap sejumlah besar paket atau ketika Anda ingin mengambil paket untuk analisis nanti.
Untuk mulai menulis ke file, gunakan opsi -w
diikuti oleh file capture output:
sudo tcpdump -n -w data.pcap
Perintah di atas akan menyimpan hasil capture ke file bernama data.pcap
. Anda dapat memberi nama file seperti yang Anda inginkan, tetapi disarankan untuk menggunakan ekstensi .pcap
(packet capture).
Ketika opsi -w
digunakan, output tidak ditampilkan di layar. tcpdump menulis paket mentah dan membuat file binary yang tidak dapat dibaca dengan teks editor biasa.
Untuk memeriksa isi file, aktifkan tcpdump
dengan opsi -r
:
sudo tcpdump -r data.pcap
Jika Anda ingin menjalankan tcpdump
di background, tambahkan simbol ampersand (&
) di akhir perintah.
File hasil capture juga dapat diperiksa dengan alat penganalisa paket lain seperti Wireshark.
Saat mengambil paket dalam jangka waktu yang lama, Anda dapat mengaktifkan rotasi file. tcpdump memungkinkan Anda membuat file baru atau memutar file dump pada interval waktu tertentu atau ukuran tetap.
Perintah berikut akan membuat hingga sepuluh file 200MB, bernama file.pcap0
, file.pcap1
, dan sebagainya: sebelum menimpa file yang lebih lama.
sudo tcpdump -n -W 10 -C 200 -w /tmp/file.pcap
Setelah sepuluh file dihasilkan, file yang lebih lama akan ditimpa.
Harap dicatat bahwa Anda harus menjalankan tcpdump
hanya selama masalah pemecahan masalah.
Jika Anda ingin memulai tcpdump pada waktu tertentu, Anda dapat menggunakan cronjob. tcpdump tidak memiliki opsi untuk exit setelah waktu tertentu. Anda dapat menggunakan perintah timeout
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 mengatasi masalah terkait jaringan.
Artikel ini memperkenalkan Anda pada dasar-dasar penggunaan dan sintaks tcpdump
. Untuk dokumentasi yang lebih mendalam, kunjungi situs web tcpdump.