Files
workphone-sdk/sdk/app/services/capture_service.py

62 lines
2.1 KiB
Python

"""
工作手机SDK v3.0 - 抓包服务
与设备端 Frida 配合:启停抓包、拉取数据
"""
import logging
from typing import Dict, List, Any, Optional
from datetime import datetime
logger = logging.getLogger(__name__)
_capture_status: Dict[str, bool] = {}
_capture_data: Dict[str, List[Dict[str, Any]]] = {}
_max_records_per_device = 500
def start_capture(device_id: str) -> Dict[str, Any]:
if _capture_status.get(device_id):
return {"success": True, "message": "已在抓包中", "device_id": device_id}
_capture_status[device_id] = True
_capture_data[device_id] = []
logger.info(f"抓包已启动: {device_id}")
return {"success": True, "message": "抓包已启动", "device_id": device_id}
def stop_capture(device_id: str) -> Dict[str, Any]:
if not _capture_status.get(device_id):
return {"success": True, "message": "未在抓包", "device_id": device_id}
_capture_status[device_id] = False
logger.info(f"抓包已停止: {device_id}")
return {"success": True, "message": "抓包已停止", "device_id": device_id}
def get_capture_status(device_id: str) -> Dict[str, Any]:
return {
"device_id": device_id,
"running": _capture_status.get(device_id, False),
"record_count": len(_capture_data.get(device_id, [])),
}
def get_capture_data(device_id: str, limit: int = 100, since_ts: Optional[float] = None) -> Dict[str, Any]:
records = _capture_data.get(device_id, [])
if since_ts is not None:
records = [r for r in records if r.get("ts", 0) >= since_ts]
records = records[-limit:] if limit else records
return {
"success": True,
"device_id": device_id,
"count": len(records),
"data": records,
}
def append_capture_record(device_id: str, record: Dict[str, Any]) -> None:
if device_id not in _capture_data:
_capture_data[device_id] = []
rec = {"ts": datetime.now().timestamp(), **record}
_capture_data[device_id].append(rec)
if len(_capture_data[device_id]) > _max_records_per_device:
_capture_data[device_id] = _capture_data[device_id][-_max_records_per_device:]