1

我的最终结果是尝试查看在我的 iphone 和我的 mac 之间发送的 plist(我知道它是一个 plist,因为我可以bplist00在 hexdump 中看到)。

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

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

这是我的步骤:

  1. 确保 iphone 和 mac 已连接,准备好发送命令
  2. 运行 tcp dump:sudo tcpdump -vSs 0 -A -i en1 -w Dump.pcap 'tcp port 57097'在我的无线网络上(我使用Bonjour 浏览器查找服务注册的端口),然后点击手机上的发送命令。
  3. 将 pcap 文件转换为文本文件:(tshark -V -r Dump.pcap > Dump.txt最终结果是这样的)
  4. 从文本文件中手动删除标题和其他信息,这样我就只剩下有效负载了(我们现在在文件中有这个
  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?

4

1 回答 1

0

我的猜测是您的问题在步骤 4 附近,您可以在其中手动编辑请求。我只是在尝试类似的东西,使用 Charles 而不是 tcpdump,并且在我知道包含 plist 的有效负载中遇到了完全相同的错误。不知道为什么我们会收到 JSON 错误消息。

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

于 2015-11-06T02:09:10.313 回答