一個結合 FastAPI + Scapy 後端與 React + Vite 前端的網路封包分析平台,提供直觀的視覺化介面來分析 PCAP/PCAPNG 檔案,幫助網路工程師、測試人員和營運人員快速理解網路流量模式。
- 多協議支援:TCP、UDP、HTTP、HTTPS、DNS、ICMP 等主流協議
- 統計分析:封包數量、協議分佈、端口統計、連線摘要
- 效能指標:RTT 延遲、封包遺失率、握手分析
- 異常偵測:自動識別網路異常模式和潛在問題
- 互動式心智圖:節點拖拽、縮放平移、動態連線展示
- 協議動畫演示:TCP 三向交握、UDP 傳輸、DNS 查詢等動畫模擬
- 時間軸分析:封包流向的時序視覺化
- 儀表板總覽:關鍵指標的統一展示
- 雙模式資料源:支援即時 API 分析與離線 JSON 快取
- 響應式設計:適配桌面與行動裝置
- 模組化架構:易於擴展和維護
- 高效能渲染:基於 React 19 和 Vite 7
- FastAPI - 現代化的 Python Web 框架
- Scapy - 強大的封包處理庫
- Uvicorn - ASGI 伺服器
- React 19 - 使用者介面庫
- Vite 7 - 快速建置工具
- Tailwind CSS - 實用優先的 CSS 框架
- Lucide React - 美觀的圖示庫
- Vitest - 快速的測試框架
- Python 3.8+
- Node.js 16+
- npm 或 yarn
git clone <repository-url>
cd network_img# 建立虛擬環境
python -m venv venv
# 啟動虛擬環境 (Windows)
venv\Scripts\activate
# 啟動虛擬環境 (macOS/Linux)
source venv/bin/activate
# 安裝依賴
pip install -r requirements.txt# 安裝依賴
npm install- 啟動後端服務
uvicorn analysis_server:app --host 0.0.0.0 --port 8000 --reload- 啟動前端開發伺服器
npm run dev- 開啟瀏覽器
訪問
http://localhost:5173開始使用
-
上傳封包檔案
- 點擊「上傳封包」按鈕
- 選擇
.pcap或.pcapng檔案 - 等待分析完成
-
查看分析結果
- 心智圖:查看網路拓撲和連線關係
- 儀表板:檢視統計數據和效能指標
- 協議演示:觀看各種協議的動畫模擬
-
互動操作
- 拖拽節點調整佈局
- 縮放和平移檢視區域
- 使用時間軸控制播放速度
| 方法 | 端點 | 描述 |
|---|---|---|
| GET | /api/health |
健康檢查 |
| GET | /api/analysis |
獲取分析結果 |
| GET | /api/timelines |
獲取時間軸資料 |
| POST | /api/analyze |
上傳並分析封包檔案 |
上傳 PCAP/PCAPNG 檔案進行分析
請求
curl -X POST \
-F "file=@sample.pcap" \
http://localhost:8000/api/analyze回應
{
"analysis": {
"basic_stats": {
"total_packets": 1234,
"protocols": {"TCP": 800, "UDP": 300, "ICMP": 134},
"duration_seconds": 60.5
},
"packet_loss": {
"tcp_retransmissions": 5,
"estimated_loss_rate": 0.004
},
"latency": {
"avg_rtt_ms": 25.3,
"tcp_handshakes": 45
}
}
}network_img/
├── 📁 src/ # React 前端原始碼
│ ├── 📁 components/ # 協議演示組件
│ ├── 📁 lib/ # 核心邏輯庫
│ ├── 📁 __tests__/ # 測試檔案
│ ├── 📄 App.jsx # 主應用組件
│ ├── 📄 MindMap.jsx # 心智圖組件
│ └── 📄 NetworkAnalysisViewer.jsx # 分析檢視器
├── 📁 public/
│ └── 📁 data/ # 靜態資料檔案
├── 📁 docs/ # 專案文件
├── 📁 scripts/ # 工具腳本
├── 📄 analysis_server.py # FastAPI 主程式
├── 📄 network_analyzer.py # 封包分析核心
├── 📄 requirements.txt # Python 依賴
├── 📄 vite.config.js # Vite 設定
└── 📄 package.json # Node.js 依賴與腳本
# 前端測試
npm run test
# 程式碼檢查
npm run lint- ✅ 協議動畫控制器
- ✅ 時間軸邏輯
- ⏳ UI 組件測試(規劃中)
- 後端擴展
# 在 network_analyzer.py 中新增協議處理
def analyze_custom_protocol(self, packets):
# 實作自定義協議分析邏輯
pass- 前端組件
// 在 src/components/ 中建立新的演示組件
export function CustomProtocolDemo() {
// 實作協議動畫邏輯
}修改 src/MindMap.jsx 中的渲染邏輯:
// 自定義節點樣式
const nodeStyle = {
fill: getProtocolColor(node.protocol),
stroke: '#ffffff',
strokeWidth: 2
};{
"basic_stats": {
"total_packets": "number",
"protocols": "object",
"top_ports": "array"
},
"packet_loss": {
"tcp_retransmissions": "number",
"estimated_loss_rate": "number"
},
"latency": {
"avg_rtt_ms": "number",
"tcp_handshakes": "number"
},
"top_connections": "array"
}{
"nodes": [
{
"id": "string",
"label": "string",
"protocol": "string",
"x": "number",
"y": "number"
}
],
"connections": [
{
"source": "string",
"target": "string",
"protocol": "string",
"packet_count": "number"
}
]
}# 建置前端
npm run build
# 啟動生產伺服器
uvicorn analysis_server:app --host 0.0.0.0 --port 8000# Dockerfile 範例
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "analysis_server:app", "--host", "0.0.0.0", "--port", "8000"]- Fork 專案
- 建立功能分支 (
git checkout -b feature/amazing-feature) - 提交變更 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 開啟 Pull Request
- 遵循 ESLint 設定
- 使用 Prettier 格式化
- 撰寫有意義的提交訊息
感謝以下開源專案的貢獻:
- Scapy - 強大的封包處理庫
- FastAPI - 現代化的 Web 框架
- React - 使用者介面庫
- Tailwind CSS - CSS 框架