原由:
創建此專案是因為工作上的需求剛好用手邊的工具搭出來一套封包採集系統,其目的在於便利性與不佔空間為主,原本想以樹莓派為主但是公司提供的是一台Mini PC因此我就根據手上的資源,來寫一套可以用手機控制的採集系統.
概述:
這次硬體是採用ASUS PN41-S1 其搭載賽揚處理器 4G Ram 128G SSD的基礎配置,用於封包採集是很夠用了,當然封包採集軟體的部分是使用Wireshark 不過我們是採用裡面的tshark的組件來進行封包採集,使用tshark 其優點是資源消耗低在做長時間截取的環境下依然能穩地的運行.
在本專案環境中有提供Windows 11 Pro 的授權因此我選擇採用 IIS 與 PHP 來進行與使用者提供互動的前端來達到目地以及功能性.
實際圖片:

基本需求:
- RAM 4G UP
- Disk 128G UP
- RJ45 端口 至少1個
- Wifi 模組(用於提供熱點)
- 能提供PHP 運作的網頁引擎
- 良好散熱空間
源碼提供:
https://github.com/Gz3939/GZ_PacketRec
開始行動:
確保網頁環境與設定都準備好的情況下你還要必須讓在你的電腦可以提供熱點的功能以供無線裝置和設備使用,在這個專案中我是採用MyPublicWiFi這套工具來達成因為熱點服務可開機自動啟動很方便,此外你的裝置要安裝Wireshark並設定好全域變數方便PHP呼叫tshark.
將封包採集設備開機你會看到自己建立好的SSID本專案名為GZ-PacketRec

連上後看你裝置的閘道是誰本專案的是192.168.137.1 用瀏覽器去訪問會看到下面頁面

在使用之前先執行 列出採集網卡代號會看到本裝置的清單,以本裝置系統所列該RJ45的網卡名稱為乙太網路他的代號是 5

接著我們找到網站所載的資料夾 找到“capture.php” 找到變數 $interface 將這個直改成剛剛顯示的代號即可.
<?php
session_start(); // 開始 session
if (isset($_GET['hours'])) {
// 獲取使用者輸入的小時數,並將其轉換成秒數
$hours = intval($_GET['hours']);
$duration = $hours * 3600; // 小時數轉換為秒數
$interface = 5; // 設定介面代號
// 使用當前時間生成輸出檔案名稱
$timestamp = date('Y-m-d_H-i-s'); // 當下時間:年-月-日_時-分-秒
$outputFile = "C:\\share\\phpweb\\Packetlist\\capture_$timestamp.pcap"; // 儲存檔案路徑
// 記錄開始時間與結束時間到 session 中
$_SESSION['start_time'] = time();
$_SESSION['end_time'] = $_SESSION['start_time'] + $duration;
// 將 session 寫入並結束 session 操作,確保數據被保存
session_write_close();
// 保存 session 到伺服器上的文件中
$sessionData = [
'start_time' => $_SESSION['start_time'],
'end_time' => $_SESSION['end_time']
];
// 指定保存的文件路徑
$sessionFile = "C:\\share\\phpweb\\session_data.txt";
// 將 session 資料轉換為 JSON 字串並寫入文件
file_put_contents($sessionFile, json_encode($sessionData));
// 返回 JSON 格式的響應
echo json_encode(['status' => 'started']);
}
// PowerShell 腳本路徑
$scriptPath = 'C:\\share\\phpweb\\script.ps1';
// 使用 escapeshellarg 來保護變數,防止命令注入
$interfaceArg = escapeshellarg($interface);
$durationArg = escapeshellarg($duration);
$outputFileArg = escapeshellarg($outputFile);
// 構建命令
$command = "powershell -ExecutionPolicy Bypass -File $scriptPath $interfaceArg $durationArg $outputFileArg";
// 執行 PowerShell 腳本
shell_exec($command);
?>
設定完成後就可以開始採集封包,在這之前你需要將你的要採集的網路設備的交換器上來進行 Mirro Port的設定通常是交換器對防火牆/路由器的主線所用的Port,或是使用封包鏡像交換器來獲取到這部分的封包.開始截取前你必須要設定截取時間,時間結束後封包就會停止採集.

待截取完成後可以點選該檔名進行下載

此外你可以選擇 顯示磁碟使用情況來確認目前硬碟剩餘空間

或是選擇系統關機來關閉採集系統與設備

這樣一個精簡的封包採集設備就完成了!