請確保環境已在各自節點下安裝:
- ros2 (全部)
- tmux (ras01、ras02)
- msfrpcd (vm)
- mobaXterm (vm 選用)
個人本地WSL原本是22.04,而 ROS2_Jazzy 只支援24.04,因此改用對應的 ROS2_Humble:
-
請一定要先更新:
sudo apt update && sudo apt install curl gnupg lsb-release -y -
加入 ROS 套件來源與金鑰:
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg&echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null -
安裝 ROS 2 Humble 桌面版:
sudo apt install ros-humble-desktop -y -
設定環境變數:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc&source ~/.bashrc -
執行目錄於 ros_workspace,創建 src:
mkdir src&cd src -
在目前 src 資料夾中,自動創建 ros2 框架:
ros2 pkg create --build-type ament_python my_pubsub目錄和檔案將會自動加入:
ros_workspace/ └── src/ └── my_pubsub/ ├── setup.py └── my_pubsub/ ├── __init__.py ├── publisher.py └── subscriber.py -
請將指定的
setup.py、publisher.py、subscriber.py根據需求替代或刪除 -
編譯:
sudo apt install python3-colcon-common-extensions -y colcon build&colcon build -
載入設定檔:
source install/setup.bash -
啟動 publisher:
ros2 run my_pubsub publisher -
啟動 subscriber:
ros2 run my_pubsub subscriber
- Ctrl + D: 關閉當前分頁
- Ctrl + B + O: 切換分頁
raspberry01 作為 ros2 publisher 發送訊息至 raspberrry01,raspberry02 作為 ros2 subscriber 接收來自 raspberrry01 的訊息,vm 作為 attacker 攻擊 subscriber。
按照建構 ros2 環境的步驟執行,第七點將以
./Data Collection/publisher/ros2內的檔案替換,並將./Data Collection/publisher/tmux_start.sh和./Data Collection/publisher/monitor放於同樣的相對路徑下。
- 直接執行:
source ./Data Collection/publisher/tmux_start.sh以啟動 monitors 和 publisher - tmux 操作請見也許你會用到的 tmux 快捷鍵
按照建構 ros2 環境的步驟執行,第七點將以
./Data Collection/subscriber/ros2內的檔案替換,並將./Data Collection/subscriber/tmux_start.sh和./Data Collection/subscriber/monitor放於同樣的相對路徑下。
- 直接執行:
source ./Data Collection/subscriber/tmux_start.sh以啟動 monitors 和 subscriber - tmux 操作請見也許你會用到的 tmux 快捷鍵
加入
./Data Collection/attacker的所有檔案。
- 啟動 msf 後台:
msfrpcd -P pentest -n -f - 執行攻擊:
sudo python3 attack.py -s {SOURCE_IP} -t {SUBSCRIBER_IP} -c 2 -cr 2 -cp 2 -l 5(可自行更改參數) - 待到攻擊結束,即可將所有節點的程式中斷
-
將 subscriber 中 monitors 所產生的檔案
OS_monitor.csv、ros2_monitor.csv、temp_capture.pcapng複製至此 -
將 attacker 攻擊後所產生的
attack.log複製至此 -
依照
./Model Training/main.ipynb流程執行 (記得修改路徑)./Model Training/rospace_dataset/1_processing/custom_pcapng2csv.py: 將temp_capture.pcapng攤平成 csv 格式./Model Training/rospace_dataset/1_processing/csv_merging_parallel.py: 將剛剛轉換的 csv 與OS_monitor.csv、ros2_monitor.csv合併並依據attack.log進行 label./Model Training/rospace_dataset/2_labeling/label: 在資料量過大,buffer 不夠時,在 merge 後使用
-
執行
./Model Training/rospace_dataset/3_complete_dataset/complete_dataset_composition.ipynb: 檢查數據、數據清理 -
執行
./Model Training/rospace_dataset/4_reduced_and_noperiodicity_dataset/reduced_dataset_composition.ipynb: 刪除不重要的欄位 -
執行
./Model Training/rospace_dataset/4_reduced_and_noperiodicity_dataset/no_periodicity_dataset.ipynb: 隨機裁切連續時間序並重塑時間軸以消除週期性
執行 ./Model Training/rospace_dataset/5_usage_notes/usage_note_A_detection_shuffled.ipynb: 訓練模型並輸出 npy 和 pkl 檔案
請一定要先將
./Application/config.txt設定好,各個節點都需要。
按照建構 ros2 環境的步驟執行,第七點將以
./Application/ras01/ros2內的檔案替換,並將./Application/config.py放入與./Application/ras01/ros2/publisher.py 同層的地方。
- 按照建構 ros2 環境執行:
ros2 run Application publisher以啟動
按照建構 ros2 環境的步驟執行,第七點將以
./Application/ras02/ros2內的檔案替換,並將./Application/ras02/app_tmux.sh、./Application/ras02/.*monitor.py和./Application/config.py放於同樣的相對路徑下。
- 直接執行:
./Application/ras02/app_tmux.sh以啟動 monitors 和 subscriber - tmux 操作請見也許你會用到的 tmux 快捷鍵
加入
./Application/vm/的所有檔案,並將./Application/config.py放於同樣的相對路徑下。
- 啟動 msf 後台:
msfrpcd -P pentest -n -f - 在 VM 分別執行:
python3 main_web.py:主要網頁呈現,透過按鈕互動attacker.py:透過按鈕互動,觸發各種攻擊process_data.py:接收來自 raspberry02 的所有 monitor 資料後處理model_engine.py:接收處理完的資料後給模型預測,將結果傳給網頁
