Protokol IoT

Wireshark: Analisis Jaringan untuk Engineer IoT

TOKEN

Tutorial komprehensif Wireshark dari instalasi, capture & display filter, analisis protokol MQTT dan TCP, troubleshooting jaringan IoT, hingga mengenali pola umum masalah jaringan

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.

Diagram: Wireshark dalam Ekosistem IoT
📡
ESP32 / Sensor
Mengirim data MQTT
192.168.1.50
→ Paket →
🔍
Wireshark
Menangkap & menganalisis
semua paket jaringan
→ Paket →
🖥️
MQTT Broker
Mosquitto server
192.168.1.100:1883

1.1 Instalasi di Windows

  1. Kunjungi https://www.wireshark.org/download.html
  2. Download installer Windows 64-bit (.exe)
  3. Jalankan installer — pastikan mencentang opsi Npcap (diperlukan untuk menangkap paket)
  4. Ikuti wizard hingga selesai, lalu restart komputer
  5. Buka Wireshark — Anda akan melihat daftar antarmuka jaringan (Ethernet, Wi-Fi, dll.)

1.2 Instalasi di Linux (Ubuntu/Debian)

Terminal — Instalasi Wireshark di Linux
# 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:

💡 Cara Menentukan Interface yang Benar

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
hostFilter berdasarkan IP tertentuhost 192.168.1.50
netFilter berdasarkan subnetnet 192.168.1.0/24
portFilter berdasarkan portport 1883
srcFilter sumber paketsrc host 192.168.1.50
dstFilter tujuan paketdst port 8080
tcpHanya paket TCPtcp
udpHanya paket UDPudp
and / or / notOperator logikatcp and port 1883

2.2 Capture Filter untuk IoT

BPF Syntax — 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
⚠️ Capture Filter vs Display Filter

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

Wireshark Display Filter — Berbagai Contoh
# === 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.

💡 Tips Filter Wireshark

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:

4.2 Detail Pane (Panel Bawah)

Saat Anda memilih satu paket, panel bawah menampilkan detail berlapis dari setiap layer protokol:

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

Wireshark Display Filter — 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:

💡 Melihat Payload MQTT

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:

TCP Handshake — Filter Wireshark
# 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 — Expert Information
# 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:

Wireshark — Troubleshooting 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

Wireshark — Troubleshooting Data Flow
# 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

Wireshark — Save & Load 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
⚠️ Capture di Jaringan yang Menggunakan Switch

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:

Pertanyaan 1: Apa perbedaan antara capture filter dan display filter di Wireshark?

a) Tidak ada perbedaan, keduanya sama saja
b) Capture filter menentukan paket yang ditangkap (sebelum capture), display filter menyaring paket yang sudah ditangkap (setelah capture)
c) Capture filter hanya untuk HTTP, display filter untuk semua protokol
d) Display filter lebih cepat dari capture filter

Pertanyaan 2: Display filter apa yang digunakan untuk menampilkan hanya pesan MQTT PUBLISH?

a) mqtt.type == "PUBLISH"
b) mqtt.msgtype == 3
c) tcp.port == 1883
d) mqtt.packets == publish

Pertanyaan 3: Ketika Anda melihat tcp.analysis.retransmission di Wireshark, apa artinya?

a) Koneksi TCP baru sedang dibuat
b) Paket dikirim ulang karena tidak diterima oleh tujuan (hilang atau timeout)
c) Data terenkripsi sedang didekripsi
d) Protokol berubah dari TCP ke UDP

Pertanyaan 4: Capture filter BPF apa yang digunakan untuk menangkap semua traffic MQTT (port 1883)?

a) mqtt.port == 1883
b) tcp.port == 1883
c) port 1883
d) filter mqtt 1883

Pertanyaan 5: Mengapa Wireshark di jaringan dengan switch tidak bisa menangkap semua paket?

a) Karena switch terlalu cepat untuk Wireshark
b) Karena switch hanya mengirim paket ke port tujuan, bukan ke semua port
c) Karena Wireshark hanya mendukung WiFi, bukan Ethernet
d) Karena switch mengenkripsi semua paket
← Sebelumnya WebSocket: Komunikasi Real-time Selanjutnya → Prometheus & Grafana Monitoring