admin管理员组

文章数量:1625124

原文地址::https://blog.csdn/leonpengweicn/article/details/8585857

相关文章

1、ituns与iphone的通信协议usbmuxd解析----http://www.zhaoxiaodan/ios/ituns%E4%B8%8Eiphone%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AEusbmuxd%E8%A7%A3%E6%9E%90.html

2、使用usbmuxd服务,通过USB连接与PC端、Mac端实现通信,Peertalk的使用----https://www.jianshu/p/eba133891ec6

3、在iPhone上使用命令行命令以及通过ssh连接iPhone----https://blog.csdn/maotai_2010/article/details/44307325

4、使用ssh 访问越狱iPhone的两种方式----https://blog.csdn/ycc15872296360/article/details/77772906

5、iPhone通过usb与windows实现通信----https://blog.csdn/u010343361/article/details/50539401

6、IOS助手设备连接源码。同PP助手软件的连接功能,可以读取IOS设备信息。----https://download.csdn/download/chrisforbt/7693517

7、请教用VC 编写一个苹果IOS连接程序(类似PP助手或爱思助手)----https://bbs.csdn/topics/392044303

8、iphone和配件进行通讯,外接设备开发----https://blog.csdn/xiaobai32966/article/details/42678383

9、Apple iAP2 协议应用源码----https://download.csdn/download/huweiqi1806/9566824

10、iPhone CarPlay iAP附件协议----https://blog.csdn/zoosenpin/article/details/87439254

11、主题 : MFI iAP2协议请教----http://www.cocoachina/bbs/read.php?tid=241369&page=e&

12、IOS助手设备连接源码。同PP助手软件的连接功能,可以读取IOS设备信息。----https://download.csdn/download/chrisforbt/7693517(已经下载到了)

 

最开始研究与iphone通信, 都会想当然的google下usb协议, 必经iphone是通过usb线连接到电脑. 其实不然, iTunes是通过TCP协议与iPhone通信的

usbmuxd

iTunes使用一种叫”usbmux”的东西与iphone通信, 这个东西提供了一个USB - TCP的转换服务. 
这个服务在Mac端是由/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd提供的, 当然, 开机自动启动. 
它创建了一个Unix Domain Socket 在 /var/run/usbmuxd. usbmuxd服务程序监控iPhone在USB口上的连接, 当它监控到iPhone以用户模式连接到USB, (相对的是recovery模式), usbmuxd服务程序就会连接到这个/var/run/usbmuxd的TCP端口, 并开始成为一个USB - TCP 请求转发器

那么,如果想编写个第三方程序与iphone进行通信,实现类似iTunes的功能, 你的程序可以通过usbmuxd! 建立一个TCP连接到/var/run/usbmuxd端口, 根据协议发送对应的请求包, usbmuxd服务会将请求转发到USB的iPhone上

lockdownd协议

 
  1. //协议头

  2. struct usbmux_header {

  3. u32 length; // 消息长度,包括头部

  4. u32 version; // 协议版本号

  5. u32 type; // 消息类型,请求,响应,握手,等

  6. u32 tag; // 消息编号, 用来对应响应

  7. char payload; //请求体

  8. };

  9.  
  10. //头部中的type类型

  11. enum {

  12. usbmux_result = 1,

  13. usbmux_connect = 2,

  14. usbmux_hello = 3,

  15. usbmux_payload = 8,

  16. };

监听

知道了iTunes使用的协议, 那么有没有办法看看iTunes都发了些什么包? 有个简单的办法就是使用socat, 类似:

 
  1. sudo mv /var/run/usbmuxd /var/run/usbmuxx

  2. sudo socat -t100 -x -v UNIX-LISTEN:/var/run/usbmuxd,mode=777,reuseaddr,fork UNIX-CONNECT:/var/run/usbmuxx

包示例:

 
  1. > 2013/02/04 00:07:19.567563 length=483 from=0 to=482

  2. e3 01 00 00 01 00 00 00 08 00 00 00 02 00 00 00 ................

  3. 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 <?xml version="1

  4. 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54 .0" encoding="UT

  5. 46 2d 38 22 3f 3e 0a F-8"?>.

  6. 3c 21 44 4f 43 54 59 50 45 20 70 6c 69 73 74 20 <!DOCTYPE plist

  7. 50 55 42 4c 49 43 20 22 2d 2f 2f 41 70 70 6c 65 PUBLIC "-//Apple

  8. 2f 2f 44 54 44 20 50 4c 49 53 54 20 31 2e 30 2f //DTD PLIST 1.0/

  9. 2f 45 4e 22 20 22 68 74 74 70 3a 2f 2f 77 77 77 /EN" "http://www

  10. 2e 61 70 70 6c 65 2e 63 6f 6d 2f 44 54 44 73 2f .apple/DTDs/

  11. 50 72 6f 70 65 72 74 79 4c 69 73 74 2d 31 2e 30 PropertyList-1.0

  12. 2e 64 74 64 22 3e 0a .dtd">.

  13. 3c 70 6c 69 73 74 20 76 65 72 73 69 6f 6e 3d 22 <plist version="

  14. 31 2e 30 22 3e 0a 1.0">.

  15. 3c 64 69 63 74 3e 0a <dict>.

  16. 09 3c 6b 65 79 3e 42 75 6e 64 6c 65 49 44 3c 2f .<key>BundleID</

  17. 6b 65 79 3e 0a key>.

  18. 09 3c 73 74 72 69 6e 67 3e 63 6f 6d 2e 61 70 70 .<string>com.app

  19. 6c 65 2e 69 54 75 6e 65 73 48 65 6c 70 65 72 3c le.iTunesHelper<

  20. 2f 73 74 72 69 6e 67 3e 0a /string>.

  21. 09 3c 6b 65 79 3e 43 6c 69 65 6e 74 56 65 72 73 .<key>ClientVers

  22. 69 6f 6e 53 74 72 69 6e 67 3c 2f 6b 65 79 3e 0a ionString</key>.

  23. 09 3c 73 74 72 69 6e 67 3e 75 73 62 6d 75 78 64 .<string>usbmuxd

  24. 2d 32 39 36 2e 33 3c 2f 73 74 72 69 6e 67 3e 0a -296.3</string>.

  25. 09 3c 6b 65 79 3e 4d 65 73 73 61 67 65 54 79 70 .<key>MessageTyp

  26. 65 3c 2f 6b 65 79 3e 0a e</key>.

  27. 09 3c 73 74 72 69 6e 67 3e 4c 69 73 74 65 6e 3c .<string>Listen<

  28. 2f 73 74 72 69 6e 67 3e 0a /string>.

  29. 09 3c 6b 65 79 3e 50 72 6f 67 4e 61 6d 65 3c 2f .<key>ProgName</

  30. 6b 65 79 3e 0a key>.

  31. 09 3c 73 74 72 69 6e 67 3e 69 54 75 6e 65 73 48 .<string>iTunesH

  32. 65 6c 70 65 72 3c 2f 73 74 72 69 6e 67 3e 0a elper</string>.

  33. 09 3c 6b 65 79 3e 6b 4c 69 62 55 53 42 4d 75 78 .<key>kLibUSBMux

  34. 56 65 72 73 69 6f 6e 3c 2f 6b 65 79 3e 0a Version</key>.

  35. 09 3c 69 6e 74 65 67 65 72 3e 33 3c 2f 69 6e 74 .<integer>3</int

  36. 65 67 65 72 3e 0a eger>.

  37. 3c 2f 64 69 63 74 3e 0a </dict>.

  38. 3c 2f 70 6c 69 73 74 3e 0a </plist>.

  39. --

  40. < 2013/02/04 00:07:19.570319 length=294 from=0 to=293

  41. 26 01 00 00 01 00 00 00 08 00 00 00 02 00 00 00 &...............

  42. 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 <?xml version="1

  43. 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54 .0" encoding="UT

  44. 46 2d 38 22 3f 3e 0a F-8"?>.

  45. 3c 21 44 4f 43 54 59 50 45 20 70 6c 69 73 74 20 <!DOCTYPE plist

  46. 50 55 42 4c 49 43 20 22 2d 2f 2f 41 70 70 6c 65 PUBLIC "-//Apple

  47. 2f 2f 44 54 44 20 50 4c 49 53 54 20 31 2e 30 2f //DTD PLIST 1.0/

  48. 2f 45 4e 22 20 22 68 74 74 70 3a 2f 2f 77 77 77 /EN" "http://www

  49. 2e 61 70 70 6c 65 2e 63 6f 6d 2f 44 54 44 73 2f .apple/DTDs/

  50. 50 72 6f 70 65 72 74 79 4c 69 73 74 2d 31 2e 30 PropertyList-1.0

  51. 2e 64 74 64 22 3e 0a .dtd">.

  52. 3c 70 6c 69 73 74 20 76 65 72 73 69 6f 6e 3d 22 <plist version="

  53. 31 2e 30 22 3e 0a 1.0">.

  54. 3c 64 69 63 74 3e 0a <dict>.

  55. 09 3c 6b 65 79 3e 4d 65 73 73 61 67 65 54 79 70 .<key>MessageTyp

  56. 65 3c 2f 6b 65 79 3e 0a e</key>.

  57. 09 3c 73 74 72 69 6e 67 3e 52 65 73 75 6c 74 3c .<string>Result<

  58. 2f 73 74 72 69 6e 67 3e 0a /string>.

  59. 09 3c 6b 65 79 3e 4e 75 6d 62 65 72 3c 2f 6b 65 .<key>Number</ke

  60. 79 3e 0a y>.

  61. 09 3c 69 6e 74 65 67 65 72 3e 30 3c 2f 69 6e 74 .<integer>0</int

  62. 65 67 65 72 3e 0a eger>.

  63. 3c 2f 64 69 63 74 3e 0a </dict>.

  64. 3c 2f 70 6c 69 73 74 3e 0a </plist>.

  65. --

第一个iTunes向/var/run/usbmuxd发的请求包, 第一行 e3 01 00 00 01 00 00 00 08 00 00 00 02 00 00 00是头部 e3 01 00 00 即0x01e3 = 483, 包长度

头部后面紧跟的是payload, 也就是xml格式的请求内容

本文标签: 通信协议Itunsiphoneusbmuxd