1. Instalasi Wireshark
Wireshark adalah tool analisis jaringan (network protocol analyzer) open-source yang paling populer di dunia. Wireshark mampu menangkap dan menganalisis setiap paket data yang melewati antarmuka jaringan secara real-time. Bagi engineer IoT, Wireshark adalah tool wajib untuk memahami dan men-debug komunikasi antar perangkat.
192.168.1.50
semua paket jaringan
192.168.1.100:1883
1.1 Instalasi di Windows
- Kunjungi https://www.wireshark.org/download.html
- Download installer Windows 64-bit (.exe)
- Jalankan installer — pastikan mencentang opsi Npcap (diperlukan untuk menangkap paket)
- Ikuti wizard hingga selesai, lalu restart komputer
- Buka Wireshark — Anda akan melihat daftar antarmuka jaringan (Ethernet, Wi-Fi, dll.)
1.2 Instalasi di Linux (Ubuntu/Debian)
# Instal Wireshark dan dependencies sudo apt update sudo apt install -y wireshark # Saat dialog muncul, pilih "Yes" agar non-root user bisa capture sudo dpkg-reconfigure wireshark-common # Tambahkan user ke grup wireshark sudo usermod -aG wireshark $USER # Logout dan login kembali, lalu jalankan: wireshark & # Alternatif: capture dari terminal dengan tshark sudo tshark -i eth0 -f "tcp port 1883"
1.3 Antarmuka Wireshark
Saat pertama dibuka, Wireshark menampilkan daftar network interfaces. Pilih interface yang ingin di-monitor:
- Ethernet: Untuk jaringan kabel — cocok untuk ESP32 yang terhubung via router kabel
- Wi-Fi (WLAN): Untuk jaringan nirkabel — cocok untuk ESP32 WiFi
- Loopback: Untuk komunikasi lokal (localhost) — cocok untuk testing broker di komputer yang sama
- Any / docker0: Untuk container dan virtual interface
Di Wireshark, perhatikan grafik traffic di sebelah setiap interface. Interface yang aktif akan menunjukkan grafik bergerak. Pilih interface yang menunjukkan traffic — artinya ada data yang mengalir. Untuk IoT di jaringan lokal, biasanya pilih Ethernet atau Wi-Fi.
2. Capture Filters
Capture filter menentukan paket mana yang akan ditangkap dan disimpan oleh Wireshark. Capture filter menggunakan sintaks BPF (Berkeley Packet Filter) dan harus ditentukan sebelum memulai capture.
Capture filter sangat penting untuk IoT karena jaringan bisa sangat ramai — tanpa filter, file capture akan sangat besar dan sulit dianalisis.
2.1 Sintaks Dasar Capture Filter
| Filter | Fungsi | Contoh Penggunaan |
|---|---|---|
host | Filter berdasarkan IP tertentu | host 192.168.1.50 |
net | Filter berdasarkan subnet | net 192.168.1.0/24 |
port | Filter berdasarkan port | port 1883 |
src | Filter sumber paket | src host 192.168.1.50 |
dst | Filter tujuan paket | dst port 8080 |
tcp | Hanya paket TCP | tcp |
udp | Hanya paket UDP | udp |
and / or / not | Operator logika | tcp and port 1883 |
2.2 Capture Filter untuk IoT
# === Capture Filter untuk MQTT === # Tangkap semua traffic MQTT (port 1883) port 1883 # Tangkap traffic MQTT dari ESP32 tertentu host 192.168.1.50 and port 1883 # Tangkap traffic MQTT + MQTT over TLS (port 8883) port 1883 or port 8883 # Tangkap traffic dari semua perangkat IoT di subnet net 192.168.1.0/24 and (port 1883 or port 8080 or port 8883) # Kecualikan traffic dari komputer kita sendiri not host 192.168.1.1 and port 1883 # === Capture Filter untuk WebSocket === # Tangkap traffic WebSocket port 8080 # Tangkap traffic HTTP dan WebSocket port 80 or port 443 or port 8080 # === Capture Filter untuk CoAP === # CoAP menggunakan UDP port 5683 udp port 5683 # === Capture Filter untuk HTTP === # Tangkap semua traffic HTTP tcp port 80 # Tangkap HTTP dari subnet tertentu src net 192.168.1.0/24 and tcp port 80
Jangan tertukar antara capture filter dan display filter! Capture filter ditulis dalam sintaks BPF (seperti port 1883) dan ditentukan sebelum capture dimulai. Display filter menggunakan sintaks Wireshark sendiri (seperti tcp.port == 1883) dan bisa diubah kapan saja setelah capture. Paket yang tidak lolos capture filter tidak akan tersimpan sama sekali.
3. Display Filters
Display filter digunakan untuk menyaring paket yang sudah ditangkap agar hanya menampilkan yang relevan. Display filter menggunakan sintaks Wireshark sendiri dan jauh lebih fleksibel daripada capture filter.
3.1 Sintaks Display Filter
# === Filter Berdasarkan Protokol === # Tampilkan hanya paket MQTT mqtt # Tampilkan hanya paket TCP tcp # Tampilkan hanya paket DNS dns # Tampilkan hanya paket HTTP http # === Filter Berdasarkan Alamat IP === # Paket dari/ke IP tertentu ip.addr == 192.168.1.50 # Paket dari IP tertentu saja ip.src == 192.168.1.50 # Paket ke IP tertentu saja ip.dst == 192.168.1.100 # Paket dari/ke subnet tertentu ip.addr == 192.168.1.0/24 # === Filter Berdasarkan Port === # Port TCP tertentu tcp.port == 1883 # Port sumber tertentu tcp.srcport == 1883 # Port tujuan tertentu tcp.dstport == 1883 # === Filter Kombinasi (AND / OR / NOT) === # MQTT dari ESP32 tertentu mqtt && ip.src == 192.168.1.50 # MQTT atau HTTP mqtt || http # Semua kecuali ARP dan DNS !arp && !dns # TCP dari subnet ke broker MQTT ip.src == 192.168.1.0/24 && tcp.dstport == 1883 # === Filter Spesifik MQTT === # Semua paket MQTT mqtt # Tipe pesan MQTT tertentu (CONNECT, PUBLISH, SUBSCRIBE, dll.) mqtt.msgtype == 3 # PUBLISH mqtt.msgtype == 1 # CONNECT mqtt.msgtype == 8 # SUBSCRIBE # Topik MQTT tertentu mqtt.topic contains "suhu" # QoS level tertentu mqtt.qos == 1 # Client ID tertentu mqtt.clientid == "esp32-001" # === Filter TCP Spesifik === # TCP SYN (koneksi baru) tcp.flags.syn == 1 && tcp.flags.ack == 0 # TCP RST (koneksi ditolak/reset) tcp.flags.reset == 1 # TCP dengan retransmisi tcp.analysis.retransmission # TCP window size kecil (potensi masalah performa) tcp.window_size < 1024
3.2 Filter Expression Builder
Jika Anda kesulitan mengingat sintaks filter, Wireshark menyediakan Filter Expression Builder. Klik ikon filter di toolbar, lalu pilih field, operator, dan value secara visual. Ini sangat membantu untuk filter kompleks.
Wireshark memiliki fitur auto-complete — cukup mulai mengetik di kolom filter dan Wireshark akan menampilkan saran. Anda juga bisa mengklik kanan pada field di detail paket lalu pilih "Apply as Filter" untuk langsung membuat filter berdasarkan field tersebut. Ini sangat mempercepat proses analisis.
4. Analisis Protokol
Wireshark mampu mendekode dan menampilkan detail ratusan protokol jaringan. Untuk engineer IoT, protokol yang paling penting untuk dipahami adalah:
4.1 Struktur Kolom Wireshark
Setiap baris dalam daftar paket Wireshark menampilkan informasi berikut:
- No: Nomor urut paket dalam capture
- Time: Timestamp paket (bisa diatur ke relative time dari capture start)
- Source: Alamat IP/hostname sumber paket
- Destination: Alamat IP/hostname tujuan paket
- Protocol: Protokol yang digunakan (TCP, MQTT, HTTP, DNS, dll.)
- Length: Ukuran paket dalam byte
- Info: Ringkasan isi paket (tergantung protokol)
4.2 Detail Pane (Panel Bawah)
Saat Anda memilih satu paket, panel bawah menampilkan detail berlapis dari setiap layer protokol:
- Frame: Informasi fisik (interface, timestamp, length)
- Ethernet II: MAC address sumber dan tujuan
- Internet Protocol (IPv4/IPv6): IP address, TTL, flags
- TCP: Port, sequence number, flags, window size
- MQTT / HTTP / dst.: Data aplikasi sesungguhnya
4.3 Follow TCP Stream
Fitur "Follow TCP Stream" sangat berguna untuk melihat keseluruhan percakapan antara dua perangkat. Klik kanan pada paket TCP → Follow → TCP Stream untuk melihat data dalam format yang mudah dibaca.
5. Analisis Paket MQTT
Wireshark memiliki dissector bawaan untuk protokol MQTT yang memungkinkan kita melihat setiap field pesan MQTT secara detail. Ini sangat berguna untuk debugging masalah koneksi, topik, dan payload.
5.1 Filter Paket MQTT
# === Semua paket MQTT === mqtt # === Berdasarkan tipe pesan === # 1=CONNECT, 2=CONNACK, 3=PUBLISH, 4=PUBACK # 8=SUBSCRIBE, 9=SUBACK, 12=PINGREQ, 13=PINGRESP # 14=DISCONNECT mqtt.msgtype == 3 # Hanya PUBLISH mqtt.msgtype == 1 # Hanya CONNECT mqtt.msgtype == 8 # Hanya SUBSCRIBE mqtt.msgtype == 14 # Hanya DISCONNECT # === Berdasarkan topik === mqtt.topic == "rumah/suhu" mqtt.topic contains "sensor" mqtt.topic matches "^rumah/.*" # === Berdasarkan QoS === mqtt.qos == 0 # QoS 0 mqtt.qos == 1 # QoS 1 mqtt.qos == 2 # QoS 2 # === Berdasarkan Client ID === mqtt.clientid == "esp32-001" mqtt.clientid contains "sensor" # === Berdasarkan Username === mqtt.username == "admin" # === Kombinasi filter === mqtt && mqtt.msgtype == 3 && ip.src == 192.168.1.50 # PUBLISH dari ESP32 ke topik suhu dengan QoS 1 mqtt.msgtype == 3 && mqtt.topic contains "suhu" && mqtt.qos == 1 # Koneksi yang gagal (CONNACK dengan return code != 0) mqtt.msgtype == 2 && mqtt.connack.reason != 0
5.2 Membaca Pesan MQTT di Wireshark
Ketika Anda memilih paket MQTT di Wireshark, detail berikut akan terlihat:
- CONNECT packet: Protocol name, version (3.1.1 atau 5.0), client ID, keep-alive, username, password, will message
- PUBLISH packet: Topic name, QoS level, message ID (untuk QoS 1/2), payload data
- SUBSCRIBE packet: Topic filter, QoS yang diminta, message ID
- PINGREQ/PINGRESP: Heartbeat untuk menjaga koneksi tetap hidup
Untuk melihat payload MQTT dalam format yang mudah dibaca, klik kanan pada paket PUBLISH → Follow → TCP Stream. Jika payload berupa JSON, Anda bisa langsung membaca isi data sensor. Untuk payload biner, perhatikan panel detail di bagian MQTT → Message.
6. Analisis TCP
MQTT, HTTP, dan WebSocket semuanya berjalan di atas TCP. Memahami analisis TCP sangat penting untuk men-debug masalah koneksi yang sering terjadi di IoT.
6.1 TCP Three-Way Handshake
Setiap koneksi TCP dimulai dengan proses tiga langkah:
# Filter untuk melihat TCP handshake ke broker MQTT # Step 1: SYN dari ESP32 ke broker tcp.flags.syn == 1 && tcp.flags.ack == 0 && tcp.dstport == 1883 # Step 2: SYN-ACK dari broker ke ESP32 tcp.flags.syn == 1 && tcp.flags.ack == 1 && tcp.srcport == 1883 # Step 3: ACK dari ESP32 ke broker tcp.flags.syn == 0 && tcp.flags.ack == 1 && tcp.dstport == 1883 # Filter untuk melihat SELURUH handshake + data: tcp.port == 1883 # === Masalah Umum TCP di IoT === # TCP RST - koneksi ditolak/di-reset tcp.flags.reset == 1 # TCP Retransmisi - paket hilang, dikirim ulang tcp.analysis.retransmission # TCP Dup ACK - acknowledgement duplikat tcp.analysis.duplicate_ack # TCP Window Full - buffer penuh tcp.analysis.window_full # TCP Zero Window - receiver tidak bisa terima data tcp.analysis.zero_window # TCP Keep-Alive tcp.flags.keep_alive == 1
6.2 Men-debug Masalah TCP
# Wireshark memiliki fitur "Expert Information" # Akses melalui: Analyze → Expert Information # Level pesan Expert: # 🔵 Note — Informasi umum (misal: TCP keep-alive) # 🟡 Warning — Potensi masalah (misal: window size kecil) # 🔴 Error — Masalah nyata (misal: checksum salah) # ⚫ Chat — Informasi percakapan # Filter Expert Information: # Semua warning dan error tcp.analysis.flags # Hanya retransmisi tcp.analysis.retransmission # Hanya duplikat tcp.analysis.duplicate_ack # Out-of-order packets tcp.analysis.out_of_order
7. Troubleshooting dengan Wireshark
Berikut panduan troubleshooting umum untuk masalah jaringan IoT menggunakan Wireshark:
7.1 ESP32 Tidak Bisa Terhubung ke Broker
Gunakan filter ini untuk men-debug masalah koneksi:
# Filter untuk koneksi dari ESP32 ke broker ip.addr == 192.168.1.50 && tcp.port == 1883 # === Kemungkinan Hasil dan Interpretasi === # 1. Tidak ada paket sama sekali: # → ESP32 tidak mengirim data. Cek WiFi, IP address, firewall. # 2. Ada SYN tapi tidak ada SYN-ACK: # → Broker tidak merespons. Cek broker berjalan, port benar, firewall. # 3. Ada SYN → RST (reset): # → Broker menolak koneksi. Cek port listener, allow_anonymous. # 4. Handshake berhasil tapi langsung DISCONNECT: # → Masalah autentikasi MQTT. Cek username, password, client ID. # 5. CONNECT → CONNACK with error: # → CONNACK return code bukan 0. Cek: # 0 = Accepted # 1 = Unacceptable protocol # 2 = Identifier rejected # 3 = Server unavailable # 4 = Bad credentials # 5 = Not authorized
7.2 Data Sensor Tidak Muncul di Dashboard
# Filter untuk melihat semua pesan PUBLISH MQTT mqtt.msgtype == 3 # Periksa: # 1. Apakah ESP32 mengirim PUBLISH? → Cek paket dari IP ESP32 # 2. Apakah topik benar? → Lihat field mqtt.topic # 3. Apakah payload terisi? → Lihat panel detail MQTT Message # 4. Apakah broker meneruskan? → Cek apakah ada PUBLISH dari broker # Filter untuk melihat flow lengkap satu device: ip.addr == 192.168.1.50 && mqtt # Urutan yang benar: # ESP32 → Broker: CONNECT # Broker → ESP32: CONNACK (return code 0) # ESP32 → Broker: SUBSCRIBE (jika perlu subscribe) # Broker → ESP32: SUBACK # ESP32 → Broker: PUBLISH (data sensor) # (berulang setiap interval) # Urutan yang bermasalah: # ESP32 → Broker: CONNECT # Broker → ESP32: CONNACK (return code 4 = bad credentials) # ESP32 → Broker: DISCONNECT # → Masalah: credential salah!
7.3 Menyimpan dan Membuka File Capture
# Simpan capture (File → Save As) # Format: .pcap atau .pcapng (disarankan .pcapng) # Command line: capture dengan tshark lalu simpan sudo tshark -i eth0 -f "port 1883" -w mqtt_capture.pcapng -a duration:60 # Buka file capture sebelumnya wireshark mqtt_capture.pcapng # Export data tertentu (File → Export Specified Packets) # Bisa difilter sebelum di-export # Statistik (Statistics → Protocol Hierarchy) # Menampilkan distribusi protokol dalam capture
8. Pola Umum Masalah Jaringan
Berikut pola-pola yang sering ditemui saat menganalisis traffic jaringan IoT dengan Wireshark:
| Pola | Gejala di Wireshark | Kemungkinan Penyebab | Solusi |
|---|---|---|---|
| Retransmisi TCP tinggi | Banyak paket tcp.analysis.retransmission |
Jaringan tidak stabil, signal WiFi lemah, congestion | Pindahkan ESP32 lebih dekat ke router, gunakan antena eksternal |
| Zero Window | tcp.analysis.zero_window |
Receiver tidak bisa memproses data cukup cepat | Optimasi kode receiver, kurangi frekuensi pengiriman |
| RST Storm | Banyak paket tcp.flags.reset == 1 |
Firewall memblokir, broker down, port salah | Cek firewall rules, pastikan broker berjalan |
| ARP Storm | Banyak ARP request berulang | IP conflict atau ARP table timeout | Cek IP assignment DHCP, gunakan IP statis |
| MQTT Keep-Alive timeout | Tidak ada PINGREQ dalam interval keep-alive | ESP32 hang, loop() terlalu lama, WiFi putus | Pastikan client.loop() dipanggil secara reguler |
| Large payload | Paket MQTT dengan payload > 1KB | JSON terlalu besar, data tidak dikompres | Kompres payload, gunakan format biner (CBOR/MsgPack) |
| DNS delay | Delay lama antara DNS query dan response | DNS server lambat atau unreachable | Gunakan IP langsung untuk broker lokal, atau DNS caching |
Di jaringan yang menggunakan switch, Wireshark hanya bisa menangkap paket yang dikirim ke/dari komputer Anda (dan broadcast/multicast). Untuk menangkap paket antara dua perangkat lain (misalnya ESP32 dan broker), Anda perlu mengaktifkan port mirroring pada switch, atau menggunakan hub (yang mengirim semua paket ke semua port), atau menjalankan Wireshark langsung di broker/server.
9. Quiz: Uji Pemahamanmu!
Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Wireshark: