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
optionsmemungkinkan Anda untuk mengontrol perilaku perintah. - Filter
expressionmenentukan 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 manafracadalah 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:lastnotasi. 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-Spilihan untuk mencetak nomor urut mutlak. -
ack 1226568763Nomor 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 valadalah stempel waktu TCP, danecrsingkatan 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.