Jika ada satu utilitas jaringan yang saya harap telah diungkap untuk saya sebagai teknisi dukungan, itu adalah tcpdump
alat. Saya tidak dapat menghitung berapa kali saya mengalami situasi di mana saya perlu menggunakannya untuk pemecahan masalah tetapi tidak sepenuhnya memahaminya atau opsi apa yang perlu saya ketahui. Hari ini, saya mendalami tcpdump
alat—untuk apa alat itu digunakan dan apa yang perlu Anda ketahui. Saya juga memandu Anda melalui tiruan dari situasi yang saya alami sebelumnya. Mari terjun ke dalamnya.
Apa itu tcpdump?
tcpdump
alat ini dikembangkan pada akhir 1980-an dan telah menjadi pokok pemecahan masalah jaringan sejak saat itu. Ini didistribusikan di bawah lisensi BSD dan gratis untuk diunduh dan digunakan. Ini bekerja pada sebagian besar sistem operasi * nix dan memiliki versi porting untuk Windows. Pada tingkat paling dasar, tcpdump
adalah alat penangkap paket yang digunakan untuk memecahkan masalah konektivitas jaringan. Ini mungkin paling dekat dibandingkan dengan Wireshark. Namun, ini jauh lebih ringan dan hanya baris perintah (tidak ada GUI yang tersedia untuk pengetahuan saya).
Pemasangan
Sebelum kita mulai mengaduk-aduk perintah, mari kita lihat cara menginstalnya. Biasanya dikirimkan dengan OS Linux paling modern sehingga Anda mungkin sudah memilikinya. Anda dapat memverifikasi ini dengan menjalankan which tcpdump
. Jika belum diinstal, jangan khawatir—instalasinya sederhana. Jalankan perintah berikut:
$ sudo yum install -y tcpdump
Penggunaan dasar
Sekarang kita memiliki alat yang siap digunakan, mari kita lihat fungsi paling dasar. Untuk mulai menangkap paket di seluruh antarmuka, kita perlu melihat antarmuka jaringan yang tersedia untuk ditangkap. Untuk melakukan ini, kami menggunakan:
$ sudo tcpdump -D
Berikut adalah contoh dari mesin Red Hat Enterprise Linux saya:
[tcarrigan@server ~]$ sudo tcpdump -D
[sudo] password for tcarrigan:
1.enp0s3 [Up, Running]
2.enp0s8 [Up, Running]
3.lo [Up, Running, Loopback]
4.any (Pseudo-device that captures on all interfaces) [Up, Running]
5.virbr0 [Up]
6.bluetooth-monitor (Bluetooth Linux Monitor) [none]
7.nflog (Linux netfilter log (NFLOG) interface) [none]
8.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
9.usbmon0 (All USB buses) [none]
10.usbmon1 (USB bus number 1)
11.virbr0-nic [none]
Perintah ini sangat berguna di lingkungan perusahaan di mana antarmuka khusus digunakan untuk memindahkan jenis data tertentu. Kami melihat situasi ini sedikit lebih dekat di bagian selanjutnya dari artikel ini. Sekarang, mari kita ambil beberapa paket sehingga kita dapat melihat output dan informasi apa yang kita kumpulkan di sini.
Untuk pengambilan gambar dasar, gunakan yang berikut ini:
[root@server ~]# tcpdump -i any
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
18:42:10.914742 IP server.example.com.55018 > 216.126.233.109.ntp: NTPv4, Client, length 48
18:42:10.915759 IP server.example.com.59656 > router.charter.net.domain: 1974+ PTR? 109.233.126.216.in-addr.arpa. (46)
18:42:10.959920 IP router.charter.net.domain > server.example.com.59656: 1974 ServFail 0/0/0 (46)
18:42:10.960089 IP server.example.com.42825 > router.charter.net.domain: 1974+ PTR? 109.233.126.216.in-addr.arpa. (46)
*** Shortened output ***
^C
17 packets captured
18 packets received by filter
1 packet dropped by kernel
Di sini, kami menggunakan -i
bendera untuk menunjukkan antarmuka, any
, dalam hal ini yang ingin kita dengarkan. Perhatikan bahwa tcpdump
terus menangkap paket hingga sinyal interupsi diberikan melalui Ctrl+C . Opsi lain yang dapat Anda gunakan adalah -c
flag untuk membatasi jumlah paket yang ditangkap. Batas ini sejujurnya adalah salah satu cara terbaik untuk menggunakan perintah menurut pendapat saya, karena sebagian besar waktu Anda mencoba mencari tahu konektivitas (yang dapat didiagnosis dengan lebih cepat).
[root@server ~]# tcpdump -i any -c 3
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
18:51:54.509439 IP server.example.com.58249 > 216.126.233.109.ntp: NTPv4, Client, length 48
18:51:54.510413 IP server.example.com.46277 > router.charter.net.domain: 9710+ PTR? 109.233.126.216.in-addr.arpa. (46)
18:51:54.570112 IP 216.126.233.109.ntp > server.example.com.58249: NTPv4, Server, length 48
3 packets captured
10 packets received by filter
1 packet dropped by kernel
Saya memiliki tip cepat lain untuk pemecahan masalah dengan tcpdump
. Secara default, ini menyelesaikan alamat IP dan nomor port menjadi nama (lihat di atas). Di lingkungan besar di mana skema penamaan agak rumit, Anda dapat menonaktifkan resolusi ini untuk mendapatkan alamat IP dan nomor port. Dari perspektif pemecahan masalah teknis, saya menemukan ini jauh lebih membingungkan. Ini juga membuat pencarian melalui hasil tangkapan Anda menjadi sedikit lebih mudah. Kami menggunakan -nn
tandai untuk menonaktifkan nama dan resolusi port :
[root@server ~]# tcpdump -i any -c3 -nn
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
19:56:12.804327 IP 10.0.3.15.41153 > 64.79.100.196.123: NTPv4, Client, length 48
19:56:12.867789 IP 64.79.100.196.123 > 10.0.3.15.41153: NTPv4, Server, length 48
19:56:13.739885 IP 10.0.3.15.50968 > 216.126.233.109.123: NTPv4, Client, length 48
3 packets captured
3 packets received by filter
0 packets dropped by kernel
Filter berguna lainnya
Untuk memfilter menurut alamat IP:
$ sudo tcpdump host x.x.x.x
Untuk memfilter menurut antarmuka:
$ sudo tcpdump eth0
Untuk memfilter menurut sumber:
$ sudo tcpdump src x.x.x.x
Untuk memfilter menurut tujuan:
$ sudo tcpdump dst x.x.x.x
Untuk memfilter menurut protokol:
$ sudo tcpdump icmp
Ada sejumlah besar opsi dan filter untuk benar-benar mengasah tangkapan Anda hingga hanya lalu lintas yang paling berguna. Jika Anda memerlukan info lebih lanjut, lihat halaman manual atau sumber online lainnya.
Aplikasi praktis
Seperti yang saya nyatakan sebelumnya, selama waktu saya sebagai Support Engineer, saya menghabiskan banyak waktu untuk memecahkan masalah replikasi data dari produksi ke lingkungan pemulihan bencana. Pelanggan sering kali memiliki antarmuka replikasi yang ditentukan untuk mengirim lalu lintas dari server produksi mereka ke server target replikasi. Mari kita telusuri seperti apa tampilannya pada tingkat dasar dan gunakan tcpdump
untuk memverifikasi lalu lintas dari antarmuka sumber kami ke tujuan.
Kondisi prasyarat
- Server sumber - 172.25.1.5
- Server tujuan - 172.25.1.4
- Antarmuka replikasi - enp0s8
Secara teori, saat kita memulai tugas replikasi data, kita akan melihat arus lalu lintas dari 172.25.1.5 ke 172.25.1.4.
Saya memulai "replikasi" cepat (ping
) pekerjaan di latar belakang pada server sumber. Selanjutnya, kita jalankan tcpdump
pada server sumber dan tujuan untuk melihat apakah kami menerima lalu lintas.
Dari sumber:
[root@server ~]# tcpdump -i enp0s8 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
23:17:55.347648 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:56.378194 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:57.398294 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:58.422946 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:59.448412 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Anda dapat melihat lalu lintas di atas hanya permintaan — kami tidak mendapatkan respons dari target. Dalam skenario nyata, ini akan menunjukkan masalah pada tujuan, karena kami dapat dengan jelas melihat lalu lintas yang dikirim melalui antarmuka sumber.
Setelah saya mengaktifkan kembali antarmuka tujuan...
Berikut adalah tangkapan lalu lintas dari sumber dan tujuan setelah masalah diidentifikasi dan diselesaikan.
Sumber:
[root@server ~]# tcpdump -i enp0s8 -c3 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
23:22:04.694919 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 911, length 64
23:22:04.695346 IP 172.25.1.4 > 172.25.1.5: ICMP echo reply, id 7168, seq 911, length 64
23:22:05.724968 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 912, length 64
3 packets captured
3 packets received by filter
0 packets dropped by kernel
Tujuan:
[root@client ~]# tcpdump -i enp0s8 -c3 -nn
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
23:22:13.916519 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 920, length 64
23:22:13.916569 IP 172.25.1.4 > 172.25.1.5: ICMP echo reply, id 7168, seq 920, length 64
23:22:14.935720 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 921, length 64
3 packets captured
4 packets received by filter
0 packets dropped by kernel
Melihat lebih dekat pada output menunjukkan bahwa lalu lintas berhasil dikirim dari server sumber ke server target.
Ringkasan
Kami mempelajari apa dan mengapa tcpdump
hari ini, serta pilihan untuk mengetahui. Kami bahkan melihat kasus penggunaan dunia nyata. Jelas, ada pertimbangan lain dalam lingkungan hidup. Semuanya, mulai dari antarmuka yang sedang down (seperti dalam contoh ini) hingga kata sandi yang buruk melalui kabel dapat menyebabkan kegagalan. Hanya pengalaman yang mengajarkan Anda pelajaran ini, tetapi setidaknya sekarang Anda tahu bagaimana memulai mengidentifikasi suatu masalah. Artikel saya berikutnya mengeksplorasi opsi filter sedikit lebih jauh, cara menampilkan tangkapan Anda ke file, dan menggunakan grep
untuk menemukan jarum di tumpukan jerami Anda. Pastikan untuk mengawasinya.
Untuk informasi lebih detail tentang penggunaan tcpdump, lihat pengantar penggunaan tcpdump ini di baris perintah Linux di Opensource.com, dan lihat dokumentasi resmi di Portal Pelanggan Red Hat untuk pemahaman yang lebih baik tentang tcpdump di dalam Red Hat Enterprise Linux lingkungan.
[ Jaringan lepas kendali? Lihat Otomatisasi jaringan untuk semua orang, buku gratis dari Red Hat. ]