tcpdump adalah utilitas baris perintah yang memungkinkan kami menangkap dan menganalisis lalu lintas jaringan melalui sistem kami. Bergantung pada opsi pemfilteran, kami dapat menggunakan alat ini untuk membantu memecahkan masalah jaringan apa pun secara efektif. Ini adalah alat yang sangat umum digunakan oleh insinyur sysadmin untuk fitur ini.
Dalam tutorial ini, kita akan menganalisis beberapa cara menggunakan tcpdump , tapi tidak semua. Ini karena ada terlalu banyak opsi pemfilteran yang terlibat dalam perintah ini, dan tidak mungkin untuk mencakup semuanya. Kami hanya akan melihat beberapa opsi yang umum digunakan di sini. Anda dapat menemukan sisanya di halaman manual.
Menginstal perintah tcpdump
Anda dapat memeriksa apakah sistem Anda memiliki tcpdump
perintah, dengan mengetik
tcpdump --version
Jika output menunjukkan bahwa itu tidak diinstal, Anda bisa langsung mendapatkannya menggunakan manajer paket sistem Anda.
CATATAN :Karena kami akan menangkap paket, kami memerlukan izin yang lebih tinggi. (sudo Dibutuhkan). Kami akan mengawali semua tcpdump
perintah dengan sudo
sebagai hasilnya.
Mencantumkan antarmuka untuk pengambilan paket
Sebelum menangkap paket secara aktif, kita akan melihat antarmuka yang tersedia untuktcpdump
.
Kita dapat membuat daftar antarmuka menggunakan -D opsi (Tampilan).
sudo tcpdump -D
Anda akan mendapatkan daftar semua antarmuka yang tersedia di mesin Anda. Ini akan tergantung dari sistem ke sistem, jadi milik saya memiliki beberapa antarmuka lain seperti Docker , karena layanan Docker sedang berjalan, selain dari antarmuka jaringan biasa.
Antarmuka khusus apa saja memungkinkan pengambilan di apa saja antarmuka aktif.
Sekarang setelah kita mengetahui antarmuka yang tersedia di mesin kita, mari kita mulai menangkap paket!
Tangkap Paket menggunakan tcpdump
Tangkap semua paket di apa saja antarmuka dengan menjalankan perintah ini:
sudo tcpdump -i any
Ini akan menentukan antarmuka menjadi apa saja , antarmuka khusus yang disebutkan sebelumnya.
tcpdump terus menangkap paket sampai menerima interupsi sinyal. Anda dapat menghentikan pengambilan dengan menekan Ctrl+C
.
Output akan mencantumkan semua paket yang ditangkap sampai sinyal interupsi diterima untuk menghentikan tcpdump
.
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:49:32.841984 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132693749:4132693857, ack 3344962610, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 108 10:49:32.842057 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36 10:49:32.842101 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 144:260, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 116 10:49:32.842135 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 260:296, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36 ... ... ^C 264 packets captured 361 packets received by filter 91 packets dropped by kernel
Seperti yang Anda amati, tcpdump
telah menangkap 264 paket. Misalnya, karena saya terhubung ke server ini menggunakan ssh
, tcpdump menangkap semua paket ini.
Batasi jumlah pengambilan Paket
Untuk membatasi jumlah paket yang diambil dan menghentikan tcpdump
, gunakan -c
(batas pengambilan) opsi:
sudo tcpdump -i any -c 2
Ini akan menyebabkan perintah tcpdump berhenti menangkap secara otomatis setelah 2 paket. Kami tidak perlu menggunakan sinyal interupsi untuk menghentikannya secara manual dalam kasus ini.
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:57:31.284198 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132754245:4132754353, ack 3344963698, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 108 10:57:31.284275 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 36 2 packets captured 16 packets received by filter 8 packets dropped by kernel
Opsi ini bisa sangat berguna dalam memantau koneksi jaringan untuk memecahkan masalah apa pun, jika ada masalah jaringan.
Nonaktifkan nama dan resolusi port
Secara default, tcpdump perintah menyelesaikan alamat IP dan port menjadi nama (seperti vultr.com.ssh , yang melakukan resolusi nama dari alamat IP dan port).
Saat memecahkan masalah jaringan, seringkali lebih mudah menggunakan alamat IP dan nomor port; Kita dapat menonaktifkan resolusi nama dengan menggunakan opsi -n
dan resolusi port dengan -nn
.
sudo tcpdump -i any -c 2 -nn
Perintah di atas menangkap 2 paket pada antarmuka apa pun, sambil menonaktifkan resolusi port.
Jadi output sekarang akan menghentikan resolusi nama apa pun, dan hanya mengembalikan alamat IP dan nomor port.
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:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108 11:00:36.459982 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 36 2 packets captured 8 packets received by filter 0 packets dropped by kernel
Di sini, mari kita periksa satu baris output.
11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108
Ini adalah tipikal TCP penangkapan paket. Paket dan format protokol lainnya dapat dirujuk di halaman manual perintah tcpdump.
Kolom pertama, 11:00:36.459922 , mewakili stempel waktu 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, 111.11.111.11.22 , adalah alamat IP dan port sumber. Ini diikuti oleh alamat IP dan port tujuan, yang diwakili oleh 123.45.678.90.48006 .
Sekarang setelah kita mengetahui bagaimana format output dasarnya, mari kita menganalisis beberapa opsi pemfilteran untuk tcpdump
Memfilter Paket
Salah satu dari tcpdump fitur paling kuat dari perintah 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.
Filter berdasarkan Protokol
Untuk memfilter paket berdasarkan protokol, kita perlu menentukan protokol dalam perintah.
Untuk menangkap ICMP paket saja, kami dapat memfilter berdasarkan ICMP protokol.
sudo tcpdump -i any -c 5 icmp
Sejak ping
perintah menggunakan ICMP paket, kami dapat menganalisis paket yang masuk karena ping
dari komputer lain.
Mari melakukan ping ke mesin kita saat ini dan menangkap paket ping yang masuk.
Buka sesi terminal di komputer lain, dan ketik
ping IP_ADDRESS_MACHINE_1
Sekarang, di tcpdump
. kami sesi terminal, sekarang kita dapat melihat bahwa ia menangkap paket balasan ping ICMP tersebut.
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:18:47.947475 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 1, length 64 11:18:47.947554 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 1, length 64 11:18:48.947669 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 2, length 64 11:18:48.947752 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 2, length 64 11:18:49.947853 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 3, length 64 5 packets captured 6 packets received by filter 0 packets dropped by kernel
Di sini, 123.45.678.90 adalah Alamat IP mesin (Mesin 2) yang mengirimkan ping ke tcpdump
kami sistem, dan 111.11.111.11 adalah Alamat IP dari mesin pemfilteran paket (Mesin 1).
Karena saya menggunakan ssh
untuk mengirim permintaan ping, ada resolusi domain (tetapi tidak ada resolusi nama) ke vultr.com
.
Filter berdasarkan Host
Untuk membatasi pengambilan hanya pada paket yang terkait dengan host tertentu, kita dapat menggunakan host
filter
sudo tcpdump -i any -c5 -nn host 192.168.1.2
Dalam contoh ini, tcpdump menangkap dan hanya menampilkan paket ke dan dari host 192.168.1.2
.
Filter berdasarkan Port
Untuk memfilter paket berdasarkan layanan atau port yang diinginkan, gunakan port
Saring. Misalnya, ambil paket yang terkait dengan sesi ssh dengan menggunakan perintah ini (port 22 penyaringan):
sudo tcpdump -i any -c5 -nn port 22
Filter berdasarkan 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.1.2
sudo tcpdump -i any -c 5 -nn src 192.168.1.2
Kita dapat menggunakan dst
untuk memfilter menurut IP tujuan/nama host juga.
sudo tcpdump -i any -c 5 -nn src 172.168.1.2
Simpan tangkapan Paket
Kita bisa menyimpan hasil capture paket ke dalam file untuk dianalisis nanti.
Untuk menyimpan paket ke file alih-alih menampilkannya di layar, gunakan opsi -w
:
sudo tcpdump -i any -c 5 -nn -w sample.pcap port 22
Perintah ini menyimpan output dalam file bernama sample.pcap
. .pcap
ekstensi adalah singkatan dari “packet capture” dan merupakan konvensi untuk format file ini.
Kesimpulan
Dalam tutorial ini, kita mempelajari bagaimana kita dapat melakukan pengambilan dan pemfilteran paket berdasarkan opsi yang berbeda, menggunakan tcpdump
perintah.