Monitoring dan Analisis Protokol MAVLink di Wireshark

Artikel ini memang diperuntukkan khusus bagi kalian yang sedang atau ingin mengulik protokol MAVLink pada Drone yang berbasis kontroler Autopilot Pixhawk cs. Memang jarang sekali yang butuh karena sedikit sekali orang-orang yang menggunakan Pixhawk dan mengopreknya secara mendalam. Kecuali memang kalian sedang melakukan penelitian atau riset entah kalian lakukan secara mandiri, tergabung dengan kelompok atau lembaga riset, atau sedang mengerjakan thesis, disertasi, dan/atau skripsi.

Sebenarnya artikel ini hanya perbaikan dan penyempurnaan (menurut kami) dari artikel yang sudah diberikan oleh website resmi MAVLink. Isinya kurang lebih sama. Jika kalian merasa sudah ahli atau mengetahui hal lebih tentang artikel ini, silahkan abaikan.

Kalian yang biasa mengutak-atik atau mengoprek jaringan komputer, kami yakin kalian pasti sering berkutat dengan software Wireshark. Kegunaan software ini untuk memeriksa aktivitas jaringan untuk kalian analisis. Cara kerjanya mirip dengan teknik sniffing yang biasa para hacker lakukan.

Kami akan membagi dua cara yaitu pertama di OS Windows dan OS Linux. Pada artikel ini kami menggunakan Windows 7 64bit, dan untuk Linux kami menggunakan Opensuse Leap. Apabila kalian menggunakan menggunakan OS selain yang kami sebut, sesuaikan. Dan bila ada pertanyaan, silahkan tulis di kolom komentar atau hubungi kami melalui kontak yang kami sediakan.

Windows

Buka CMD kalian dengan mode "Run As Administrator".

Langkah pertama kalian wajib menginstal Python 3.6 ke atas, paket pip untuk Python, dan software Git untuk Windows. Disini kami menggunakan Python 3.8. Kalian bisa cari di Google untuk caranya.

Selanjutnya install paket future di CMD kalian ketik:

pip3 install future

Proses instalasi akan berjalan otomatis. Karena dependensi software Python untuk Windows sudah lengkap, jadi kalian bisa langsung download/clone library MAVLink menggunakan software Git. Ketik di CMD seperti ini:

git clone https://github.com/mavlink/mavlink.git --recursive

Jika kalian menjalankan Command Prompt alias CMD dengan mode "Run As Administrator", seharusnya hasil download atau kloning library MAVLink akan tersimpan di direktori C:\Users\(username_kalian)\mavlink.

Buka direktori tersebut, cari folder pymavlink. Copy dan Paste-kan folder tersebut ke folder software Python kalian. Di sistem kami folder software Python 3.8 berada pada C:\Users\username\AppData\Local\Programs\Python\Python38\Lib\site-packages\.

Sekarang kita membuat plugin Wireshark berbasis WLua. Sesuaikan dengan kebutuhan kalian apakah kalian ingin membuat plugin untuk membaca MAVLink v1.0 atau v2.0. Sebagai contoh untuk MAVLink v2.0 ketikkan perintah berikut di CMD:

py -m pymavlink.tools.mavgen --lang=WLua --wire-protocol=2.0 --output=mavlink_2_common C:\Users\(username_kalian)\mavlink\message_definitions/v1.0/common.xml

Atau untuk MAVLink v1.0:

py -m pymavlink.tools.mavgen --lang=WLua --wire-protocol=1.0 --output=mavlink_1_common C:\Users\(username_kalian)\mavlink\message_definitions/v1.0/common.xml

Perhatikan perintah di atas, kami menuliskan py karena pada sistem kami terinstal dua versi Python yait Python 2 dan Python 3. Apabila kalian default hanya memiliki satu versi Python saja yaitu Python 3.6, kalian bisa langsung ketikkan:

python3 -m pymavlink.tools.mavgen --lang=WLua --wire-protocol=1.0 --output=mavlink_1_common C:\Users\(username_kalian)\mavlink\message_definitions/v1.0/common.xml

Akan muncul file baru pada C:\Users\(username_kalian) bernama mavlink_1_common.lua atau mavlink_2_common.lua jika kalian menggunakan MAVLink v2.0. Buka file tersebut menggunakan SublimeText atau Notepad, scroll langsung pada baris paling bawah atau pada line 41332. Disitu terdapat port UDP:14550 dan UDP:14580 untuk komunikasi antara Pixhawk dengan Mission Planner yang akan direkam oleh Wireshark. Jadi jangan sampai salah portnya.

Lua Script
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- bind protocol dissector to USER0 linktype

wtap_encap = DissectorTable.get("wtap_encap")
wtap_encap:add(wtap.USER0, mavlink_proto)

-- bind protocol dissector to port 14550 and 14580

local udp_dissector_table = DissectorTable.get("udp.port")
udp_dissector_table:add(14550, mavlink_proto)
udp_dissector_table:add(14580, mavlink_proto)

Jika kalian ingin menggunakan port lain atau protokol lain, kalian bisa memodifikasinya atau menambahkan perintah lain di baris tersebut dan simpan filenya. Mungkin saja kalian ada perangkat lain yang juga ingin kalian rekam menggunakan Wireshark agar tidak bertabrakan datanya.

Langkah terakhir adalah mengimpor plugin Lua di Wireshark. Caranya kalian copy-pastekan file *.lua yang sudah kalian buat tadi ke C:\Program Files\Wireshark\plugins. Untuk memeriksa apakah plugin sudah diimpor dengan benar, kalian buka Wireshark dan buka Help > About Wireshark > Plugins. Harusnya kalian akan melihat ada nama plugin mavlink_1_common.lua.

Linux

Hampir sama caranya dengan Windows. Buka terminal kalian. Langkah pertama kalian harus menginstal Python 3.6 ke atas, paket pip untuk Python, dan software Git untuk Linux. Kalian bisa cari caranya di Google.

Kami asumsikan kalian sudah menginstal program di atas, selanjutnya adalah ketik di terminal seperti ini:

~ # pip3 install future

Oh ya, jangan lupa untuk install XML untuk validasi dan formatting serta instal TkInter:

~ # zypper install python3-lxml libxml2* python3-tk

Perhatikan perintah di atas, kami menggunakan zypper karena kami menggunakan OS Opensuse Leap. Kalian bisa ganti denan apt, yum, opkg, dpkg, atau lainnya sesuaikan dengan OS Linux yang kalian punya. Kemudian lakukan kloning library MAVLink menggunakan Git yang sudah kalian install:

~ # git clone https://github.com/mavlink/mavlink.git --recursive

Karena kami melakukan kloning di direktori root (~ #) maka folder mavlink berada pada direktori root juga. Jika kalian ingat pada langkah untuk Windows, di dalam folder mavlink terdapat folder bernama pymavlink. Masih berada pada root, kalian copy folder pymavlink beserta isinya ke folder library Python.

~ # cp -R mavlink/pymavlink /usr/lib/python3.6/site-packages/

Sekarang kalian sudah bisa langsung membuat file *.lua dengan cara:

~ # python3 -m pymavlink.tools.mavgen --lang=WLua --wire-protocol=1.0 --output=mavlink_1_common ~/mavlink/message_definitions/v1.0/common.xml

Perhatikan pada perintah/command yang di cetak tebal, itu adalah lokasi dimana hasil kloning library MAVLink yang kalian lakukan di awal. Sesuaikan.

Langkah selanjutnya sama persis dengan langkah yang ada di Windows. Kalian sesuaikan saja seperti nama file dan isi file *.lua.

Langkah terakhir adalah mengimpor plugin Lua di Wireshark. Caranya kalian copy-pastekan file *.lua yang sudah kalian buat tadi ke ~/.wireshark/plugins atau sesuaikan dengan direktori plugin Wireshark kalian. Untuk memeriksa apakah plugin sudah diimpor dengan benar, kalian buka Wireshark dan buka Help > About Wireshark > Plugins. Harusnya kalian akan melihat ada nama plugin mavlink_1_common.lua.

Melihat Trafik Data MAVLink di Wireshark

Untuk dapat melihat atau memonitor aliran paket data MAVLink di Wireshark, pastikan perangkat kalian (Pixhawk/Ardupilot) terhubung ke jaringan dengan benar. Karena terkadang, asal terhubung saja tidak bisa.

Menghindari hal tersebut, kalian bisa lakukan dengan menggunakan program mavproxy (gugling saja) agar device yang kalian punya baik Ardupilot atau Pixhawk dapat terhubung ke jaringan dengan benar. Kalian bisa gunakan localhost 127.0.0.1 atau menggunakan perangkat tambahan seperti Raspberry Pi. Sesuka kalian.


Cara untuk memonitoringnya kalian lakukan seperti biasa. Buka Wireshark, pilih interface jaringan yang kalian gunakan (pastinya yang terhubung dengan device Pixhawk/Ardupilot), filter ip atau port source/destination yang kalian gunakan. Tampilan yang kalian dapatkan seharusnya sama dengan gambar di atas.

Demikian tutorial ini, jika ada pertanyaan silahkan tulis di kolom komentar.

Referensi:
https://mavlink.io/en/getting_started/installation.html
https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_inspector.html
https://mavlink.io/en/guide/wireshark.html
https://stackoverflow.com/questions/39910730/python3-is-not-recognized-as-an-internal-or-external-command-operable-program
https://github.com/ArduPilot/pymavlink/issues/262
https://mavlink.io/en/getting_started/generate_libraries.html
https://github.com/desktop/desktop/issues/1663#:~:text=The%20default%20directory%20for%20cloning,1663%20·%20desktop%2Fdesktop%20·%20GitHub
https://github.com/mavlink/mavlink/issues/566

Posting Komentar

0 Komentar