我正在将我的笔记本电脑和我的手机绑定。
有没有办法在网络共享时通过手机访问笔记本电脑上的文件系统?例如,我希望能够通过手机访问笔记本电脑上的图像文件。(附加信息:我的手机没有 wifi 访问权限,并且我不想使用 3G 进行本地文件传输)。
笔记本电脑:Ubuntu 16.04 LTS
手机:三星 Galaxy S5
答案1
使用 Python 模块运行一个基本的 HTTP 服务器,并使用手机上的网络浏览器通过 USB 网络共享访问本地主机 PC。
设置和使用概述
手机通过 USB 线连接到本地主机 PC。
- 在手机上设置(USB 网络共享已启用)
- 在本地主机 PC 上设置(参见A 部分)
- 通过手机访问(见B 部分。)
当用户完成访问后,转到本地主机 PC 并按Ctrl+C停止终端中正在运行的 HTTP 服务器。或者简单地关闭终端也可以终止该过程。
A 部分:在本地主机 PC 上进行设置
确保本地主机 PC 上安装了 Python(python --version
在终端中运行以检查版本,这将影响步骤 3)。
打开终端
ip
首先,使用或命令(以有效者为准)检查本地主机 PC 的 IP 地址ifconfig
。以下示例输出显示的192.168.XX.YYY
是通过 USB 网络共享分配给本地主机 PC 的 IP 地址。$ ip addr show usb0 3: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff inet 192.168.XX.YYY/** brd 192.168.XX.ZZZ scope global usb0 valid_lft forever preferred_lft forever inet6 ****::****:****:****:****/** scope link valid_lft forever preferred_lft forever $ ifconfig usb0 usb0 Link encap:Ethernet HWaddr **:**:**:**:**:** inet addr:192.168.XX.YYY Bcast:192.168.XX.ZZZ Mask:255.255.255.0 inet6 addr: ****::****:****:****:****/** Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ...
然后,使用 Python 模块启动 HTTP 服务器,端口号可以是任意的,例如 31415(记住为“pi”即可)。以下示例显示
http.server
模块用于 Python 3,否则使用SimpleHTTPServer
模块用于 Python 2。$ python -m http.server <port_number> Serving HTTP on 0.0.0.0 port ***** ...
此外,如果本地 PC 已启用防火墙,请添加一条新规则以允许来自端口号和 IP 地址的传入连接(这将是另一组问答)。否则,暂时禁用防火墙只是为了简单起见,但安全性较低。
B部分:通过手机访问
确保 USB 网络共享保持已启用;无需进一步配置。
打开 Web 浏览器
转到,
http://192.168.XX.YYY:<port_number>
其中192.168.XX.YYY
是本地主机 PC 使用的 IP 地址,<port_number>
是本地主机 PC 上任何可用的端口号。网络浏览器将显示目录列表当前工作目录,默认为当前用户的主目录。
用户现在可以访问当前工作目录中的任何文件和目录以进行浏览和下载。
限制和兼容性
HTTP 服务器将允许只读访问,这对于浏览和下载目的来说已经足够了。用户将不是能够修改本地主机 PC 上的文件。如果用户需要读写权限,则使用其他方法(可能使用 SFTP 或 SSH,我不知道)。
只要启用了 USB 网络共享(已知 IP 地址),HTTP 服务器方法就会起作用,无论飞行模式或蜂窝数据是否打开或关闭。可能适用于任何 Android 版本的手机(不确定是否适用于其他移动操作系统)。
使用 Python 2.7 和 Python 3.4 进行测试,在 Xubuntu 14.04 上启用和禁用 UFW,在 Android 7.1.1 上启用 USB 网络共享。
参考
SimpleHTTPServer — 简单的 HTTP 请求处理程序来自 Python 2 文档。
http — HTTP 模块来自 Python 3 文档
您如何决定使用哪个端口?Stack Overflow 上讨论了使用哪个端口。
如何检查我的计算机上打开/关闭的端口?Ask Ubuntu 上提到了检查计算机上打开或关闭端口的命令。
SE 网络上的相关文章
如何与同一家庭网络上的另一台 Linux 机器共享文件夹?在 Ask Ubuntu 上有一个答案提到了 SimpleHTTPServer,但缺乏解释。
当我的台式电脑与我的 Android 手机绑定时,如何访问它?超级用户讨论了使用 iptables 进行端口转发。
如何从我的 Android 设备访问我的本地主机?Stack Overflow 上有关于模拟器和真实设备的混合答案。
答案2
这是我的解决方案。
制作
sudo /sbin/ifconfig
然后寻找
enp0s20u2:{...}
其中包括以下属性:
inet 192.168.xx.xxx
对我来说这是一个值得寻找的好的 IP 地址。
然后,我通过在我的手机 URL 栏中输入以下地址,以网络共享模式从我的手机连接到我的计算机的本地主机:
// where PORT is effectively the computer localhost's port number
// on which you want to connect.
inet 192.168.xx.xxx:{PORT}