feat(mac-vendor): 本地 OUI 数据库替代在线查询,修复厂商识别失败
问题原因: - mac_vendor_lookup 库依赖从 IEEE 官网在线下载 OUI 数据库 - 其他机器无网络或网络不通时,内置精简版数据库不全 - 导致 SNMP 扫描到 MAC 地址后无法识别厂商 解决方案: 1. 从 IEEE OUI 官方数据库下载完整数据 (39782 条记录) 保存为 backend/app/data/oui.txt 纳入版本管理 2. 修改 EnhancedScanService.get_mac_vendor(),查询顺序: 1️⃣ 本地 OUI 数据库(免网络、高性能) 2️⃣ mac_vendor_lookup 在线库(回退) 3️⃣ 硬编码常用厂商映射(最终回退) 3. start.sh 启动时检测 OUI 文件是否存在,不存在自动下载 4. 支持 AA:BB:CC、AABBCC、aa-bb-cc、001c.14aa.bbcc 多种 MAC 格式
This commit is contained in:
@@ -144,6 +144,26 @@ start_frontend() {
|
||||
npm install
|
||||
fi
|
||||
|
||||
# 检查 OUI 数据库文件
|
||||
if [ ! -f "$BACKEND_DIR/app/data/oui.txt" ]; then
|
||||
echo -e "${YELLOW}OUI 数据库不存在,尝试从 IEEE 下载...${NC}"
|
||||
cd $BACKEND_DIR
|
||||
source venv/bin/activate
|
||||
python3 -c "
|
||||
from mac_vendor_lookup import MacLookup
|
||||
import os
|
||||
os.makedirs('app/data', exist_ok=True)
|
||||
lookup = MacLookup()
|
||||
lookup.update_vendors()
|
||||
# 复制到项目目录
|
||||
import shutil
|
||||
src = os.path.expanduser('~/.cache/mac-vendors.txt')
|
||||
if os.path.exists(src):
|
||||
shutil.copy(src, 'app/data/oui.txt')
|
||||
print('OUI 数据库下载完成')
|
||||
" 2>/dev/null || echo -e "${YELLOW}OUI 数据库下载失败(网络问题),使用内置硬编码回退${NC}"
|
||||
fi
|
||||
|
||||
# 检查端口并清理
|
||||
kill_port $FRONTEND_PORT
|
||||
|
||||
|
||||
Reference in New Issue
Block a user