当前位置: 首页 > 后端技术 > Python

使用纯python实现Instruments协议,跨平台(win,mac,linux)获取iOS性能数据

时间:2023-03-25 20:56:24 Python

原文由悦晨发表于TesterHome社区网站。前言获取iOS性能数据一直是一件比较麻烦的事情。在构建测试框架和平台时,没有很好的方法来获取iOS性能。只能通过比较原始的方式获取非越狱的iOS性能数据。比如xcode调试可以获取,Instruments可以获取数据,使用起来也极其不方便。到目前为止,似乎只有腾讯的PerfDog能够跨平台监控非越狱iOS机器上的数据。facebookidb、libimobiledevice等,也没有获得性能数据相关内容。目前已经实现使用纯Python代码跨平台(win,mac,linux)获取部分iOS性能数据&其他数据,10.3&1UNIX-LISTEN:/var/run/usbmuxd,mode=777,reuseaddr,forkUNIX-CONNECT:/var/run/usbmuxx|awk'/^[<>]/{a=0;$1=="<"?“我”:“0”;next}{$0=substr($0,1,48);printf"%.4x%s\n",a,$0;a+=NF}'|text2pcap--|wireshark-ki-###很重要!!!使用后一定要重新设置,否则以后电脑就找不到了手机到手后,必须重启电脑。sudomv/var/run/usbmuxx/var/run/usbmuxdLaunchDaemon&Lcokdown用于与设备配对并在访问其他服务之前启动其他服务。配对成功需要设备解锁,用户点击手机屏幕上的“信任此设备”。后者主要是和Lcokdown服务进行交互。主要的交互方式是通过与plist格式文件交互来启动相关服务。这里我们使用pythonplistlib进行字节流转换。例如,启动com.apple.syslog_relay服务2020-12-1514:04:53,987-plist_service.py[line:88]-DEBUG:SendingPlist:{'Request':'StartService','Label':'pyMobileDevice','Service':'com.apple.syslog_relay'}2020-12-1514:04:53,987-plist_service.py[line:90]-调试:发送Plist字节:b'\n\n\n\n\t标签\n\tpyMobileDevice\n\t请求\n\tStartService\n\tService\n\tcom.apple.syslog_relay\n\n\n'Instruments服务要和Instruments服务通信,首先我们要找到入口,其次我们要知道交换DTXMessage数据流格式,以及如何对其进行编码和解码。这里如何打开通道,分析数据,就看大哥TroyBowman在逆向工程大会上发表演讲的两个项目链接了。请参考https://github.com/troybowman...https://github.com/troybowman...好了,既然知道了相关流程,就开始抄作业DTXMessageHeader头解析https://github。com/troybowman...https://github.com/facebook/i...IDB仓库也有大量不同的协议头。有兴趣的可以自己查一下。使用python构造一个DTXMessage头并解析协议头。示例类DTXMessageHeader(Structure):_fields_=[('magic',c_uint32),('cb',c_uint32),('fragmentId',c_uint16),('fragmentCount',c_uint16),('length',c_uint32),('标识符',c_uint32),('conversationIndex',c_uint32),('channelCode',c_uint32),('expectsReply',c_uint32)]类DTXMessagePayloadHeader(结构):_fields_=[('标志',c_uint32),('auxiliaryLength',c_uint32),('totalLength',c_uint64)]如何获取dtx流量数据,可以参考项目:https://github.com/danielpaul...这个项目可以直接获取dtx时与模拟器交互,可以用来测试数据解析是否正常。sysmontap.py示例效果展示[{"PerCPUUsage":[{"CPU_NiceLoad":0.0,"CPU_SystemLoad":-1.0,"CPU_TotalLoad":11.8811881188111878,"CPU_UserLoad":-1.0},{"CPU_CPU:NiceLoad":-1.0},{"CPU_CPU:NiceLoad",“:-1.0,“CPU_TotalLoad”:17.0,“CPU_UserLoad”:-1.0}}],“EndMachAbsTime”:656566442146,“CPUCount”:2,“EnabledCPUs”:2,“SystemCPUUsage”:{“CPU_NiceLoad”:0.0,“CPU_SystemLoad":-1.0,"CPU_TotalLoad":28.881188118811878,"CPU_UserLoad":-1.0},"Type":33,"StartMachAbsTime":656542341717},{"Processes":{"351":[351,//pid417710325760,//memVirtualSize770048,//memResidentSize0.0,//cpuUsage528,-82,934232,//physFootprint819200,//memAnon0.0,//powerScore708608//diskBytesRead],"519":[519,418581921792,46628864,13.8574323237612,30281,6465,61965152,20381696,14.082756426586586,57790464],"311":[311,417748434944,6635520,0.0,10189,43,1671552,1540096,0.0,22274048],“271”:[271,417744961536,4718592,0.0,8188,473,473,2130344,1998848,098848,0.0,0.0,36442112]":656542716738}]使用时注意事项及要求:电脑需要有iOS驱动iTunes,Linux安装usbmuxd驱动自行百度,如果是mac可能没有lockdown权限,需要sudochmod777/var/db/lockdown/如果抛出StartServiceError异常,需要使用xcode激活设备。激活方法打开xcode,插上手机点击“信任”,然后拔掉数据线(理论上这一步也可以用脚本激活,目前还没实现)本项目源码地址:https://github.com/YueChen-C/...看完了它,如果我能点击一颗星,那将是最好的。项目基于https://github.com/iOSForensi...由于项目比较长,在项目的基础上进行了优化修改,增加了instruments协议参考项目:https://github。com/troybowman...https://github.com/troybowman...https://github.com/danielpaul...https://github.com/libimobile...https://github.com/facebook/idb原文由悦晨发布在TesterHome社区网站,点击原文链接与悦晨交流。今天的知识被吸纳了~想了解更多前沿的测试开发技术,结识行业大咖:欢迎来到“第十届MTSC上海大会”,1个主会场+12个专场,大咖云集,精英齐聚12个Session知乎、物流、开源、游戏、酷家乐、音视频、客户端服务器、数字经济、性能提升、质量保证、智能测试