update README.md
This commit is contained in:
31
README.md
31
README.md
@@ -3,7 +3,7 @@
|
||||
Công cụ desktop dùng để **scan, phát hiện và flash firmware hàng loạt** cho các thiết bị OpenWrt trong mạng LAN.
|
||||
Hỗ trợ nạp **thủ công** (chọn thiết bị → flash) và **tự động hóa** (scan → phát hiện → flash → retry).
|
||||
|
||||
> **Tech stack:** Python 3.9+ · PyQt6 · Paramiko/SCP · Scapy · Requests · PyInstaller
|
||||
> **Tech stack:** Python 3.9+ · PyQt6 · Paramiko/SCP · Requests · PyInstaller
|
||||
> **Phiên bản:** `1.2.0`
|
||||
|
||||
---
|
||||
@@ -16,7 +16,7 @@ Mira_Firmware_Loader/
|
||||
├── version.txt # Số phiên bản ứng dụng
|
||||
├── requirements.txt # Danh sách dependencies
|
||||
├── core/
|
||||
│ ├── scanner.py # Quét thiết bị mạng đa lớp (Ping sweep + ARP + Scapy)
|
||||
│ ├── scanner.py # Quét thiết bị mạng (Ping sweep đa luồng)
|
||||
│ ├── workers.py # ScanThread — chạy scanner trong background thread
|
||||
│ ├── api_flash.py # Flash firmware qua LuCI HTTP API
|
||||
│ ├── ssh_utils.py # SSH/SCP transport helpers dùng chung
|
||||
@@ -48,8 +48,7 @@ Mira_Firmware_Loader/
|
||||
### Yêu cầu
|
||||
|
||||
- Python **3.9+**
|
||||
- Thư viện: `PyQt6`, `scapy`, `requests`, `paramiko`, `scp`, `pyinstaller` (để build)
|
||||
- _Windows:_ Cài [Npcap](https://npcap.com/) để Scapy có thể gửi ARP broadcast (không bắt buộc — có fallback)
|
||||
- Thư viện: `PyQt6`, `requests`, `paramiko`, `scp`, `pyinstaller` (để build)
|
||||
|
||||
### Khởi chạy nhanh
|
||||
|
||||
@@ -101,11 +100,11 @@ Output: `dist\Mira_Firmware_Loader.exe` — không cần cài Python trên máy
|
||||
┌──────▼──────┐ ┌───────▼──────────┐ ┌───▼──────────────────┐
|
||||
│ scanner.py │ │ Flash Workers │ │ AutoFlashWorker │
|
||||
│ │ │ (thủ công) │ │ (tự động hóa) │
|
||||
│ 1. Ping │ │ │ │ │
|
||||
│ Sweep │ │ NewFlashThread │ │ Phase 1: Scan LAN │
|
||||
│ 2. arp -a │ │ ├─ api_flash │ │ (tối đa 15 lần) │
|
||||
│ 3. Scapy │ │ └─ ssh_new_flash│ │ Phase 2: Flash │
|
||||
│ ARP │ │ │ │ (auto-retry x3) │
|
||||
│ Ping Sweep │ │ │ │ │
|
||||
│ (Multithread│ │ NewFlashThread │ │ Phase 1: Scan LAN │
|
||||
│ gọi OS │ │ ├─ api_flash │ │ (tối đa 15 lần) │
|
||||
│ ping cmd) │ │ └─ ssh_new_flash│ │ Phase 2: Flash │
|
||||
│ │ │ │ │ (auto-retry x3) │
|
||||
└─────────────┘ │ UpdateFlash │ │ ├─ api_flash │
|
||||
│ Thread │ │ └─ ssh_new_flash │
|
||||
│ └─ ssh_update │ └──────────────────────┘
|
||||
@@ -127,15 +126,15 @@ Output: `dist\Mira_Firmware_Loader.exe` — không cần cài Python trên máy
|
||||
|
||||
### 1. Quét mạng (Network Scan)
|
||||
|
||||
`scanner.py` dùng chiến lược 3 lớp, đảm bảo phát hiện đầy đủ mà không cần quyền Root:
|
||||
`scanner.py` sử dụng chiến lược **Ping Sweep**, chỉ quét thiết bị đang online thông qua ping:
|
||||
|
||||
| Giai đoạn | Mô tả |
|
||||
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **Ping Sweep** | Gửi ping đồng thời tới toàn bộ host trong dải `/24` (tất cả cùng lúc, không batching) để đánh thức thiết bị và điền ARP cache |
|
||||
| **ARP Table** | Đọc `arp -a` bằng regex, hỗ trợ cả định dạng Windows (`cc-2d-...`) và macOS/Linux (`aa:bb:...`) |
|
||||
| **Scapy ARP** | Chạy **song song** với ARP Table — gửi ARP broadcast để lấp khoảng trống. Yêu cầu Npcap (Windows) hoặc root (Linux); tự động bỏ qua nếu không khả dụng |
|
||||
| **Ping Sweep** | Gửi ping đồng thời tới toàn bộ host trong dải mạng bằng tiến trình con (đa luồng). Thiết bị có phản hồi (`returncode == 0`) sẽ được coi là online. |
|
||||
|
||||
Kết quả được merge theo IP và sort tăng dần trước khi trả về UI.
|
||||
*Lưu ý: Phương pháp hiện tại quét tĩnh lấy IP, bỏ qua phân giải MAC address (hiển thị N/A) nhằm giải quyết triệt để lỗi thiết bị bị cache lưa trong mạng dù đã reset/rút nguồn điện.*
|
||||
|
||||
Kết quả được sort tăng dần theo IP trước khi trả về UI.
|
||||
|
||||
### 2. Bảng thiết bị (Device Table)
|
||||
|
||||
@@ -281,7 +280,7 @@ Kết quả nạp được lưu ở 2 cấp:
|
||||
|
||||
## 🔒 Lưu ý bảo mật & Quyền
|
||||
|
||||
- **Scapy (chế độ sâu):** Cần Npcap (Windows) hoặc `sudo` (macOS/Linux). App vẫn hoạt động mà không cần quyền Admin nhờ fallback Ping Sweep + `arp -a`.
|
||||
- **CREATE_NO_WINDOW:** Khi gọi subprocess (`ping`, `arp`), ứng dụng dùng flag `CREATE_NO_WINDOW` trên Windows để ngăn cửa sổ console hiện ra.
|
||||
- **Quyền hệ thống:** Quá trình quét của `scanner.py` chỉ chạy lệnh ping từ hệ điều hành, vì vậy ứng dụng có thể chạy hoàn toàn **không cần** quyền Admin (trên Windows) / Root (trên macOS/Linux).
|
||||
- **CREATE_NO_WINDOW:** Khi gọi subprocess lệnh `ping`, ứng dụng dùng flag `CREATE_NO_WINDOW` trên Windows để ngăn cửa sổ console command prompt (cmd) liên tục hiện lên màn hình.
|
||||
- **HTTP thuần:** Firmware được upload qua HTTP (không HTTPS). Chỉ dùng trong mạng LAN nội bộ, không nên dùng trên mạng mở.
|
||||
- **Credentials cố định:** SSH credentials (`root`/`admin123a`) được hardcode trong `flash_update_worker.py` và truyền từ `main.py`, không hiển thị trên UI.
|
||||
|
||||
Reference in New Issue
Block a user