OpenDrop: 一个开源AirDrop实现

2019 年 9 月 1 日 Python程序员


OpenDrop是一个命令行工具,它允许你在设备之间通过Wi-Fi直接共享文件。它的独特之处在于,它与Apple的AirDrop兼容,AIrDrop功能允许用户与运行iOS和macOS的Apple设备共享文件。目前(在可预见的将来也可能是这样),OpenDrop只支持发送给所有人都可发现的Apple设备,因为默认的“仅限联系人”模式需要Apple签发的证书。


免责声明


OpenDrop是一个实验性软件,是Open Wireless Link项目逆向工程的成果。因此,它不支持AirDrop的所有特性,或者可能会与未来的AirDrop版本不兼容。OpenDrop不隶属于Apple公司,也不为Apple公司所赞同。使用此代码的风险自行负责。


需求


为了与Apple的AirDrop兼容,OpenDrop需要目标平台支持一个特定的Wi-Fi链路层。此外,它还需要Python >=3.6以及几个库。


Apple无线直连。由于AirDrop完全运行在Apple无线直连 (AWDL)上,所以,OpenDrop只支持macOS或运行一个开放的AWDL重新实现(如OWL)的Linux系统。

库。OpenDrop依赖于OpenSSL和libarchive的当前版本。macOS附带了这两个的相当旧的版本,所以你需要安装更新的版本,例如,通过Homebrew。在任何情况下,你都需要相应地设置两个环境变量LIBARCHIVE和LIBCRYPTO。例如,使用brew安装这两个库:



然后设置环境变量:



Linux 发布版应该会附带最新的版本,所以这一步并不是必要的。


安装


Python 包发布的安装直接使用pip3:



你也可以安装当前的开发版本,首先克隆这个repository(仓库),然后通过pip3来安装它:



用法


我们简要说明了如何使用opendrop发送和接收文件。要查看所有的命令行选项,请运行opendrop -h。


发送文件


发送文件通常需要两个步骤。首先使用find命令发现邻近的设备。一旦找到接收者,就停止此进程。



然后你就可以使用以下命令来send一个文件:



你还可以使用ID或name来代替index。OpenDrop将尝试按照(1)index、(2)ID和(3)name的顺序解释输入,如果没有找到匹配者,则会失败。


接收文件


接收要容易得多。你只需使用receive命令。OpenDrop将自动接受所有传入的文件,并将接收到的文件存放在当前目录。



当前的限制/待办事项


OpenDrop是一个研究项目的结果,因此,它有几个限制(见下面的非详尽列表)。我自己没有能力处理这些问题,但如果有人想接手处理它们,我很乐意提供帮助。

  • 通过蓝牙低功耗触发macOS/iOS接收器。Apple设备只有在通过蓝牙LE接收到一个自定义广告后才会启动其AWDL接口和AirDrop服务器(详情请参阅USENIX论文)。这意味着,Apple AirDrop接收者可能不会被发现,即使它们是可以被所有人发现的。

  • 发送方/接收方身份验证和连接状态。目前,在Apple的AirDrop中没有对等身份验证,特别是,(1)OpenDrop没有验证TLS证书是否是由Apple的root签发的,(2)Apple ID校验记录是否正确(详细信息请参阅USENIX论文)。此外,OpenDrop会自动接受由于缺少连接状态而接收到的任何文件。

  • 发送多个文件。Apple AirDrop支持同时发送多个文件,而OpenDrop并不支持(需要向归档文件添加更多的文件,并修改HTTP /Ask请求,等等)。


相关论文


Milan Stute, Sashank Narain, Alex Mariotto, Alexander Heinrich, David Kreitschmann, Guevara Noubir, 和 Matthias Hollick。《为Eve和Mallory提供10亿个开放接口:在iOS 和macOS上通过Apple无线直连进行MitM(中间人攻击)、DDoS攻击和跟踪攻击》。第28届USENIX安全研讨会(USENIX安全' 19),2019年8月14日至16日,美国加利福尼亚州圣克拉拉。


链接:https://www.usenix.org/conference/usenixsecurity19/presentation/stute


作者


  • Milan Stute (邮件:mstute@seemoo.tu-darmstadt.de, 网站: https://seemoo.de/mstute  )

  • Alexander Heinrich


许可证


OpenDrop是在GNU通用公共许可证v3.0下授权的。我们使用了python-zeroconf包的一个修改版本(本质上是添加了基本的IPv6和AWDL支持),它是在GNU 宽通用公共许可证 v2.1下授权的。这两个许可证都可以在LICENSE文件中找到。



英文原文:https://github.com/seemoo-lab/opendrop
译者:一瞬
登录查看更多
6

相关内容

AirDrop是苹果的操作系统iOS和OS X的一项功能,可让电脑和移动设备通过Wi-Fi Direct与其他启用了AirDrop 功能的设备共享文件,本功能在Mac OS X 10.7 "Lion"中首次出现。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
专知会员服务
109+阅读 · 2020年3月12日
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
OpenAI「假新闻」生成器GPT-2的最简Python实现
机器之心
4+阅读 · 2019年4月20日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
实战 | 40行代码实现人脸识别
七月在线实验室
3+阅读 · 2018年3月7日
开源自动语音识别系统wav2letter (附实现教程)
七月在线实验室
9+阅读 · 2018年1月8日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Directions for Explainable Knowledge-Enabled Systems
Arxiv
26+阅读 · 2020年3月17日
Arxiv
92+阅读 · 2020年2月28日
Arxiv
20+阅读 · 2019年11月23日
Arxiv
14+阅读 · 2018年4月18日
VIP会员
相关VIP内容
相关资讯
OpenAI「假新闻」生成器GPT-2的最简Python实现
机器之心
4+阅读 · 2019年4月20日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
实战 | 40行代码实现人脸识别
七月在线实验室
3+阅读 · 2018年3月7日
开源自动语音识别系统wav2letter (附实现教程)
七月在线实验室
9+阅读 · 2018年1月8日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Top
微信扫码咨询专知VIP会员