我的 PC 上装有 Ubuntu 12.10 系统,Galaxy Nexus 上装有 Android 4.1 系统。现在我想通过 USB 将 PC 的互联网连接与手机共享。我用 Google 搜索了很多次,但我只找到了如何将手机的互联网连接与 PC 共享的答案,但我想反过来做。
答案1
这是不可能的。但如果你的 Android 已经 root 了,有一个技巧,叫做反向 USB 网络共享。 查看本文,作者在 Fedora 上做到了这一点,但我想在 Ubuntu 上实现同样的效果应该没有问题。
答案2
对我来说,在 Kubuntu 15.10 和 Android 4.2.2 上可行的解决方案如下
要求
安卓
- busybox 应用程序已安装
- 使用 USB 电缆连接至计算机
- 在您的 Android 设备上启用 USB 调试(以便能够从您的电脑进行 adb)
电脑
在你的 /etc/network/interfaces 中你需要有这两行,否则你会得到一个
no such device
错误allow-hotplug usb0 auto usb0
adb 已安装 (
apt-get install android-tools-adb
)
联系
在您的 Android 中,启用“设置”->“连接”->“网络连接”->“网络共享和便携式热点”->“USB 网络共享”选项,这将创建一个到您计算机的 USB 连接,您可以使用
ifconfig
计算机上的命令查看该连接。查看@接口名称,对我来说就是enxf6759e7fbebd
这个。enxf6759e7fbebd Link encap:Ethernet HWaddr a2:61:3c:83:1c:38 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:464 (464.0 B) TX bytes:0 (0.0 B) eth0 Link encap:Ethernet HWaddr 50:e5:49:47:f4:fd inet addr:192.168.178.20 Bcast:192.168.178.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:40894966 errors:0 dropped:0 overruns:0 frame:0 TX packets:86312833 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:20969506400 (20.9 GB) TX bytes:120329513606 (120.3 GB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:30521 errors:0 dropped:0 overruns:0 frame:0 TX packets:30521 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:10868749 (10.8 MB) TX bytes:10868749 (10.8 MB)
使用以下命令在此网络接口上为您的计算机分配一个 IP 地址,
sudo ifconfig enxf6759e7fbebd 192.168.42.135 netmask 255.255.255.0
其中 enxf6759e7fbebd 是您在上一步中获得的接口。启用 IP 转发
sudo -- sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
使用以下命令在计算机上启用 nat
sudo iptables -t nat -F sudo iptables -t nat -A POSTROUTING -j MASQUERADE
在你的电脑上连接到你的安卓设备
adb shell su
然后你就可以用
busybox ifconfig -a
命令来检查你的连接了rndis0 Link encap:Ethernet HWaddr FA:08:D6:1A:35:90 inet addr:192.168.42.129 Bcast:192.168.42.255 Mask:255.255.255.0 inet6 addr: fe80::f808:d6ff:fe1a:3590/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:564 (564.0 B)
您可以将默认路由添加到您在第 2 点中修复的计算机网络地址,就是busybox route add default gw 192.168.42.135 dev rndis0
这样(您可以使用busybox route
命令检查您的路由)
脚本
我编写了一个脚本,在启用 USB 网络共享选项(上述第 1 点)后运行该脚本,它可以帮我完成工作
#!/bin/bash
interfaceName=$(ifconfig|grep enx|awk '{print $1}') #Getting interface name
sudo ifconfig $interfaceName 192.168.42.135 netmask 255.255.255.0 # setting Computer IP Address
sudo -- sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' # Enabling IP Forwarding
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
adb shell "su -c 'busybox route add default gw 192.168.42.135 dev rndis0'"
答案3
我发现了一个很棒的工具https://github.com/vvviperrr/SimpleRT。使用起来非常简单,不需要手机的 root 权限。
我使用 Sony Z3 Compact 和安装在笔记本电脑上的 Ubuntu 16.10 测试了 SimpleRT。
步骤如下:
- 安装 SimpleRT 提供的 APK
- 克隆 SimpleRT Git repo,或者直接选择“下载 ZIP”
- 使用终端查找您的活动互联网接口:
路线 | grep'^default' | grep -o'[^ ]*$'
- 用上述命令中的 simple-rt-cli/iface_up.sh 中的 LOCAL_INTERFACE 值进行替换。
- 在 simple-rt-cli 目录中输入“make”。
- 以 root 身份运行终端并启动 CLI:
./简单-rt
- 使用 USB 数据线连接手机
问题(取自官方页面):由于 ConnectivityManager 策略,某些应用程序无法识别反向网络共享互联网连接。只要保持 WiFi 或 3g 连接处于活动状态,连接就会通过 SimpleRT 进行。