2011-12-29 95 views
1

我的最终结果是尝试看到我的iphone(我知道它是一个plist,因为我可以在hexdump中看到bplist00)在我的iphone &之间发送的plist。嗅探iPhone和Mac之间的bonjour流量

我有一个应用程序通过bonjour服务在我的iphone和我的mac之间发送数据。

我使用tcpdump捕获流量并尝试将负载hexdump转换为二进制文件,然后将其转换为plist文本文件。

这里是我的步骤:

  1. 确保iPhone和Mac连接,有命令准备好发送
  2. 运行TCP转储:sudo tcpdump -vSs 0 -A -i en1 -w Dump.pcap 'tcp port 57097'我的无线网络上(我用Bonjour Browser找到哪个端口该服务已注册),然后点击电话上的发送命令。
  3. 的PCAP文件转换为文本文件:tshark -V -r Dump.pcap > Dump.txt(在end result is this
  4. 手动删除从文本文件的标题和其他信息。这样,我刚刚离开与有效载荷(我们现在have this文件中)
  5. 做一个反向的十六进制转储文件转换成二进制:xxd -r Dump.txt Dump1.txt
  6. 转换二进制的plist到一个文本文件:plutil -convert xml1 Dump1.txt

然而,在第6步,事情会失败:Dump1.txt: Property List error: Conversion of string failed. The string is empty./JSON error: JSON text did not start with array or object and option to allow fragments not set.(虽然它ç应该是前一步的错误)。我不确定为什么当我要求进行XML转换时,它为什么会报告JSON错误?

这种低级别的网络捕获并不是我通常所说的(我通常比较喜欢fiddler或charles,但考虑到这不是通过HTTP,我需要降低堆栈)。

有人可以告诉我,如果我做的是正确的,或者是否有更简单的方法来做到这一点?

我该如何去捕获发送给我的Mac的plist?

回答

0

我的猜测是你的问题是在第4步的地方,你手动编辑请求。我只是在尝试类似的东西,使用Charles而不是tcpdump,并且得到了与我知道包含plist的有效载荷完全相同的错误。不知道为什么我们收到JSON错误消息。

我能够通过直接将查尔斯的二进制编码的plist请求体保存到一个文件(查尔斯有一个“保存请求”菜单选项),然后在其上运行plutil -convert xml1 FILENAME -o -来解决它,它工作得很好。