AirDrop是苹果公司产品之间挺好用的一个无线文件传输功能。当然,这个所谓的好用仅仅是理念上,或者说顺利时好用。实际情况是:常常莫名其妙地无法AirDrop,我碰到情况就是搜不到联系人(我自己),但只要能搜到,传输速度还是相当快的。
AirDrop“时好时坏”的情况令人捉摸不定。虽然苹果官方网站有提供相关说明文档,但仍没有说得很明白。前几天,我正要从iPhone把文件通过AirDrop传给Mac时,弹出了这么一个窗口:
简单来说,是我在OS X上安装的安全软件ESET Cyber Security Pro询问我是否要放行一个目的TCP端口号为8770的入站通信。
第一反应是猜测这个端口与AirDrop有关,仔细一看还能发现通信源地址还是一个IPv6的地址。以目前上海电信提供的服务来看,IPv6应该还没有普及,更何况我在家庭路由器上也没有做过TCP8770这个端口的映射——由此可见,通信请求是来自我自己家里局域网内的设备。
后来以“TCP 8770”为关键字搜索一番,找到了一下两条讨论:
Inbound traffic alert (ESET) – Application: System
What does an unknown service (Port 8770) is starting on your Mac mean?
讨论的内容指向了一个名为sharingd的进程。在目前我的OS X El Capitan 10.11.2版本的终端里用man命令查看手册如下:
sharingd(8) BSD System Manager's Manual sharingd(8)
NAME
sharingd -- Sharing Daemon that enables AirDrop, Handoff, Instant Hotspot, Shared Computers, and Remote Disc in the Finder.
SYNOPSIS
sharingd
DESCRIPTION
sharingd is used by the Finder to enable AirDrop file sharing, Handoff between iCloud devices, Instant Hotspot discovery, connecting to shared computers, and
accessing Remote Discs from other computers.
FILES
/usr/libexec/sharingd
HISTORY
sharingd first appeared in Mac OS X 10.9 and iOS 7.
Darwin December 25, 2015 Darwin
说明果然是与AirDrop甚至是与Handoff有关的进程!
然后又以两种方法验证:
第一个方法是在ESET防火墙中手动添加/删除禁止TCP 8770端口通讯的规则,果然AirDrop也随之能够发现或不能发现邻近设备。
第二个方法,是网上查得一下命令可以用于Linux操作系统中查看进程监听的端口号(IPv6版):lsof -Pnl +M -i6。
于是在终端运行后情况如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sharingd 653 501 27u IPv6 0x7be74dc88e8bb115 0t0 TCP *:8770 (LISTEN)
由此,可以证实AirDrop确实用到了sharingd进程,也用到了TCP 8770端口号。换言之:要顺畅使用AirDrop、Handoff等功能,需要放行这个端口的入站通信。