GNU/Linux >> Belajar Linux >  >> Linux

Contoh Tcpdump - Menangkap Lalu Lintas Jaringan di Linux

Tcpdump adalah perintah pemecahan masalah jaringan yang juga dikenal sebagai packet sniffer yang digunakan untuk menangkap dan menampilkan paket-paket dari suatu jaringan. Tcpdump memungkinkan pengguna untuk menangkap dan menampilkan TCP/IP dan paket lain (UDP, ARP, atau ICMP) yang dikirim atau diterima melalui jaringan tempat komputer terhubung.

Anda dapat menerapkan filter ke paket dan dapat menghindari lalu lintas yang tidak ingin Anda lihat. Anda dapat menangkap semua data yang melintasi jaringan lokal Anda dan memasukkan data itu ke dalam file untuk analisis nanti. Untuk menjalankan perintah tcpdump Anda memerlukan root atau pengguna dengan hak sudo.

Dalam tutorial ini, kita akan mempelajari cara menggunakan perintah tcpdump untuk menganalisis lalu lintas yang mengalir di mesin Linux.

1. Tangkap lalu lintas di antarmuka

Saat Anda menggunakan tcpdump tanpa opsi apa pun, tcpdump akan menganalisis lalu lintas di semua antarmuka, jalankan perintah berikut:

$ sudo tcpdump

Anda harus menekan tombol Ctrl + C untuk menghentikannya.

Untuk menangkap lalu lintas pada antarmuka tertentu gunakan -i opsi dan batasi jumlah paket dengan -c pilihan:

Contoh tcpdump berikut menganalisis antarmuka 'ens160' dan membatasi paket hingga 5:

$ sudo tcpdump -i ens160 -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
22:37:57.488830 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 904499689:904499877, ack 2322684183, win 501, options [nop,nop,TS val 215651573 ecr 764510174], length 188
22:37:57.489727 IP Ubuntu.33256 > dns.google.domain: 5774+ [1au] PTR? 219.62.249.14.in-addr.arpa. (55)
22:37:57.496238 IP static.vnpt.vn.50302 > Ubuntu.ssh: Flags [.], ack 188, win 2045, options [nop,nop,TS val 764510247 ecr 215651573], length 0
22:37:57.546212 ARP, Request who-has 42.112.22.189 tell 42.112.22.254, length 46
22:37:57.549223 ARP, Request who-has 42.112.22.162 tell 42.112.22.254, length 46
5 packets captured

2) Menangkap lalu lintas di host tertentu

Anda dapat menangkap paket masuk dan keluar dari host tertentu menggunakan -host pilihan.

$ sudo tcpdump -i ens160 -c 5 -ttttnnvvS host 14.249.62.219

Sekarang, Anda dapat melihat paket permintaan dan balasan:

tcpdump: listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
2020-06-22 06:07:36.407733 IP (tos 0x12,ECT(0), ttl 64, id 60196, offset 0, flags [DF], proto TCP (6), length 176)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x60a7 (incorrect -> 0x8547), seq 296088568:296088692, ack 3491435441, win 501, options [nop,nop,TS val 242630491 ecr 673952638], length 124
2020-06-22 06:07:36.407905 IP (tos 0x12,ECT(0), ttl 64, id 60197, offset 0, flags [DF], proto TCP (6), length 208)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x60c7 (incorrect -> 0xeed4), seq 296088692:296088848, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 156
2020-06-22 06:07:36.407967 IP (tos 0x12,ECT(0), ttl 64, id 60198, offset 0, flags [DF], proto TCP (6), length 288)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x6117 (incorrect -> 0x82ca), seq 296088848:296089084, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 236
2020-06-22 06:07:36.408018 IP (tos 0x12,ECT(0), ttl 64, id 60199, offset 0, flags [DF], proto TCP (6), length 408)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x618f (incorrect -> 0xebc8), seq 296089084:296089440, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 356
2020-06-22 06:07:36.408049 IP (tos 0x12,ECT(0), ttl 64, id 60200, offset 0, flags [DF], proto TCP (6), length 208)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x60c7 (incorrect -> 0x3db7), seq 296089440:296089596, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 156

3) Temukan paket berdasarkan port

Untuk menemukan paket ke nomor port tertentu gunakan -port pilihan.

Dengan asumsi Anda ingin menganalisis antarmuka jaringan 'ens160' dan membatasi jumlah paket hingga 5 dari port 22, jalankan perintah berikut:

$ sudo tcpdump -i ens160 -c 5 -nn port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
22:55:11.567754 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 904502461:904502649, ack 2322684399, win 501, options [nop,nop,TS val 216685651 ecr 765506106], length 188
22:55:11.567973 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 188:408, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 220
22:55:11.568102 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 408:604, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 196
22:55:11.568184 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 604:800, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 196
22:55:11.568262 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 800:996, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 196

Untuk mengabaikan port saat Anda mencegat paket, gunakan not port .

Jika Anda ingin menganalisis port antarmuka jaringan 'ens160' selain 22, jalankan perintah berikut:

$ sudo tcpdump -i ens160 -nn not port 22

Anda dapat menggunakan berbagai port untuk menangkap lalu lintas jaringan Anda.

Misalnya, jika Anda ingin menganalisis antarmuka jaringan ens160 dalam rentang port:dari port 20 hingga port 23, jalankan perintah berikut:

$ sudo tcpdump -i ens160 -c 3 -nns 0 portrange 20-23

4) Menangkap paket dari protokol tertentu

Anda dapat memutuskan apakah akan menangkap paket ICMP (Internet Control Message Protocol) atau TCP (Transmission Control Protocol) saja. Perintah berikut hanya akan menangkap paket TCP:

$ sudo tcpdump -i ens160 -c 5 -nn tcp
Output
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
23:13:04.283421 IP 10.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 904505569:904505677, ack 2322684631, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 108
23:13:04.283512 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 108:144, ack 1, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 36
23:13:04.283588 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 144:260, ack 1, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 116
23:13:04.283642 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 260:296, ack 1, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 36
23:13:04.283863 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 296:508, ack 1, win 501, options [nop,nop,TS val 217758368 ecr 766570531], length 212

5) Simpan log ke file tertentu

Dimungkinkan untuk menyimpan paket yang diambil dalam file. Secara default, saat menangkap paket ke dalam file, hanya akan menyimpan 68 byte data dari setiap paket. Informasi lainnya diabaikan.

Anda dapat menggunakan -s opsi untuk memberi tahu tcpdump linux berapa banyak byte untuk setiap paket yang akan disimpan dan tentukan 0 karena panjang snapshot paket memberitahu tcpdump untuk menyimpan seluruh paket, gunakan perintah berikut:

$ sudo tcpdump -i ens160 -c 5 -nn tcp -w packets-record.pcap -s 0

Output
tcpdump: listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
5 packets captured

6) Baca file rekaman tcpdump

Anda tidak dapat membaca konten file yang menyimpan paket tcpdump dengan perintah umum seperti 'cat' atau 'less' tetapi Anda perlu menggunakan -r parameter dari perintah tcpdump:

$ sudo tcpdump -r packets-record.pcap 

Sekarang Anda dapat membaca konten file rekaman tcpdump:

reading from file packets-record.pcap, link-type EN10MB (Ethernet)
23:18:57.823581 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 904507573:904507617, ack 2322684767, win 501, options [nop,nop,TS val 218111907 ecr 766921765], length 44
23:18:57.823697 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 44:160, ack 1, win 501, options [nop,nop,TS val 218111907 ecr 766921765], length 116
23:18:57.823778 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 160:196, ack 1, win 501, options [nop,nop,TS val 218111907 ecr 766921765], length 36
23:18:57.832656 IP static.vnpt.vn.50302 > Ubuntu.ssh: Flags [.], ack 44, win 2047, options [nop,nop,TS val 766921826 ecr 218111907], length 0
23:18:57.832685 IP static.vnpt.vn.50302 > Ubuntu.ssh: Flags [.], ack 160, win 2045, options [nop,nop,TS val 766921826 ecr 218111907], length 0

Anda juga dapat menggunakan file pcap ini untuk melihat dengan Wireshark untuk dianalisis.

7) Filter paket dari sumber tertentu

Untuk memfilter paket yang berasal dari IP sumber tertentu, Anda dapat menggunakan src pilihan.

$ sudo tcpdump src 100.9.8.40

Cara yang sama jika Anda ingin melihat lalu lintas di arah lain gunakan dst pilihan:

$ sudo tcpdump dst 14.249.62.219

8) Menangkap paket berdasarkan jaringan

Untuk menangkap masuk dan keluar dari jaringan gunakan -net pilihan. Perintah berikut menangkap lalu lintas dari jaringan 192.168.0.0/24:

$ sudu tcpdump net 192.169.0.0/24

9) Menangkap paket dalam ASCII

Untuk menampilkan paket yang diambil dalam ASCII gunakan -A opsi, yang berguna untuk menangkap halaman web.

$ sudo tcpdump -A -i eth0

Tcpdump juga dapat menampilkan isi paket dalam format Hex dan ASCII, kemudian gunakan -X pilihan:

$ sudo tcpdump -X -i eth0

10) Menangkap paket IPv6

Kami dapat menangkap lalu lintas IPv6 menggunakan ip6 opsi dan proto untuk menentukan protokol TCP atau UDP.

proto 6 - TCP

proto 17 - UDP

Berikut ini menangkap semua lalu lintas ipv6 menggunakan protokol tcp:

$ sudo tcpdump -nn ip6 proto 6

11) Filter Agen Pengguna Http

Perintah berikut menyaring agen pengguna Http dan host dari header permintaan http:

$ sudo tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

Untuk menangkap cookie gunakan perintah berikut:

$ sudo tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'

12) Daftar antarmuka yang tersedia

Anda dapat menggunakan tcpdump untuk membuat daftar antarmuka yang tersedia dengan -D pilihan.

Misalnya:

$ sudo tcpdump -D
Output
1.ens160 [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.docker0 [Up]
5.nflog (Linux netfilter log (NFLOG) interface)
6.nfqueue (Linux netfilter queue (NFQUEUE) interface)
7.usbmon1 (USB bus number 1)
8.usbmon2 (USB bus number 2)

13) Putar file pengambilan

Jika Anda menangkap lalu lintas menggunakan tcpdump untuk waktu yang lama, ada baiknya membuat file baru ketika ukuran file atau waktu tertentu telah tercapai.

Perintah berikut akan membuat file 'network-02-30.pcap' baru setiap 30 menit (-G 1800) dengan file dibatasi hingga 100MB (-C 100) dengan jumlah file 24 (-W 48).

$ sudo tcpdump -i ens160 -w /tmp/network-%H-%M.pcap -W 48 -G 300 -C 100

Opsi TCPdump

Tcpdump menyediakan beberapa opsi yang meningkatkan atau memodifikasi outputnya, mari periksa yang mana:

  • -i <interface> :Dengarkan pada antarmuka yang ditentukan.
  • -n :Jangan menyelesaikan nama host. Anda dapat menggunakan -nn untuk tidak menyelesaikan nama host atau nama port.
  • -t :Cetak stempel waktu yang dapat dibaca manusia pada setiap baris dump, -tttt :Memberikan keluaran stempel waktu yang dapat dibaca manusia secara maksimal.
  • -X :Menampilkan isi paket dalam bentuk hex dan ascii.
  • -v , -vv , -vvv :Meningkatkan jumlah informasi paket yang Anda dapatkan kembali.
  • -c N :Hanya mendapatkan N jumlah paket dan kemudian berhenti.
  • -s :Tentukan snaplength (ukuran) dari tangkapan dalam byte. Gunakan -s0 untuk mendapatkan semuanya, kecuali jika Anda sengaja mengambil lebih sedikit.
  • -S :Cetak nomor urut mutlak.
  • -q :Tampilkan lebih sedikit informasi protokol.
  • -w <file name> :Tulis paket mentah ke file sebagai gantinya

Kekuatan dan, atau dan bukan operator

Perintah Tcpdump mendukung kombinasi operator 'dan', 'atau' dan 'tidak' untuk menyaring hasil yang lebih akurat.

Tangkap lalu lintas yang datang dari 10.20.0.0/16 dan masuk ke jaringan 10.30.0.0/16 dengan menunjukkan cap waktu yang dapat dibaca manusia (tt), tanpa resolusi nama host atau nomor port (nn), keluaran verbose (vv) dan menggunakan urutan absolut angka (S):

$ sudo  -ttnnvvS tcpdump src net 10.20.0.0/16 and dst net 10.30.0.0/16

Tampilkan lalu lintas dari sumber 192.168.0.10 yang bukan protokol UDP:

$ sudo tcpdump src 192.168.0.10 and src net and not udp

Untuk menangkap lalu lintas arp atau ping untuk host tertentu dan menyimpan output ke file bernama packetfile.txt:

$ sudo tcpdump -nnti eth0 arp or icmp and host 192.168.0.1 -w packetfile.txt

Format keluaran TCPdump

Mari kita ambil satu baris baru dari keluaran tcpdump untuk memahami formatnya.

10:31:13.440803 IP Ubuntu.ssh > 117.6.129.86.50736: Flags [P.], seq 188:400, ack 1, win 501, options [nop,nop,TS val 468736347 ecr 335665367], length 212

Dimana:

10:31:13.401128 - Waktu ketika paket ditangkap dalam waktu lokal.

IP - Ini menunjukkan bahwa protokol paket adalah IPv4.

Ubuntu.ssh - Ini menunjukkan alamat IP sumber atau nama host sumber dan .ssh berarti port (ini akan menjadi 22).

117.6.129.86.50376 - Ini menunjukkan alamat IP tujuan dan titik (.) dipisahkan oleh nomor port.

Bendera:

[P.] - Ini adalah bidang flag TCP.

[.] - ACK (Pengakuan).

[S] - SYN (Mulai Koneksi).

[P] - PSH (Push Data).

[F] - FIN (Selesaikan Koneksi).

[R] - RST (Setel Ulang Koneksi).

[S.] - SYN-ACK (Paket SynAcK).

seq 188:400 - Nomor urut menunjukkan bahwa paket tersebut berisi byte '188' hingga '400' data.

win 501 - Bidang ini adalah ukuran windows, yang mewakili jumlah byte yang tersedia di buffer penerima.

options [nop,nop,TS val 468736347 ecr 335665367] - Ini adalah opsi TCP seperti MSS (Ukuran Segmen Maksimum) atau Skala Jendela. Anda dapat merujuk lebih lanjut tentang opsi protokol TCP.

length 212 - Ini mewakili panjang data payload dalam byte.

Kesimpulan

Meskipun packet sniffer adalah alat diagnostik yang berguna, mereka juga dapat disalahgunakan. Misalnya, individu yang tidak bermoral dapat menjalankan packet sniffer untuk menangkap kata sandi yang dikirim orang lain melalui jaringan. Tergantung pada konfigurasi jaringan Anda, trik ini dapat bekerja bahkan jika packet sniffer tidak berjalan di komputer pengirim atau penerima.

Untuk alasan ini, banyak organisasi memiliki kebijakan yang melarang penggunaan packet sniffer kecuali dalam keadaan terbatas.

Saya harap Anda menikmati membaca perintah tcpdump dan silakan tinggalkan saran Anda di bagian komentar di bawah.


Linux
  1. Linux – Bagaimana Cara Meneruskan Lalu Lintas Antara Ruang Nama Jaringan Linux?

  2. Contoh Perintah rm di Linux

  3. Contoh Perintah ps di Linux

  1. 6 opsi filter lalu lintas jaringan tcpdump

  2. 7 Contoh Perintah Linux df

  3. Linux:Bagaimana mengukur lalu lintas jaringan harian/bulanan?

  1. Contoh penggunaan perintah tcpdump untuk pemecahan masalah jaringan

  2. sa Contoh Perintah di Linux

  3. Contoh Perintah dsniff di Linux