62 lines
2.1 KiB
Python
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:]
|