GNU/Linux >> Belajar Linux >  >> Linux

Perintah Tcpdump di Linux

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 mana frac 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 di first: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 adalah 201747193: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, dan ecr 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.


Linux
  1. Perintah mv Linux

  2. Linux du perintah

  3. Perintah ip Linux

  1. Cara menangkap dan menganalisis paket dengan perintah tcpdump di Linux

  2. Perintah ifconfig Linux

  3. Perintah cd Linux

  1. Perintah Waktu Linux

  2. Perintah Ping di Linux

  3. Perintah Tonton Linux