USB通过USB从Ubuntu绑定到Android

我的PC上有一个Ubuntu 12.10系统,我的Galaxy Nexus上有一个Android 4.1系统。 现在我想通过USB与我的手机分享我的电脑的互联网连接。 我一直在搜索Google,但我只找到了如何分享手机与PC的互联网连接的答案,但我想要反过来。

这是不可能的。 但是如果你有一个扎根的Android,就有一个技巧,它被称为反向USB网络共享 。 看看这篇文章 ,作者在Fedora上做了这个 ,但我想在Ubuntu上实现同样的问题应该没有问题。

我在Kubuntu 15.10和Android 4.2.2上为我提供了一个有效的解决方案

要求

Android的

  1. busybox应用安装
  2. USB电缆连接到您的计算机
  3. 在您的Android设备上启用USB调试(以便能够从您的电脑adb)

电脑

  1. 在你的/ etc / network / interfaces中你需要有这两行,否则你将得到一个no such device错误

     allow-hotplug usb0 auto usb0 
  2. 已安装adb( apt-get install android-tools-adb

连接

  1. 在你的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) 
  2. 使用以下命令为此网络接口上的计算机分配IP地址: sudo ifconfig enxf6759e7fbebd 192.168.42.135 netmask 255.255.255.0其中enxf6759e7fbebd是您在上一步中获得的接口。

  3. 启用IP转发

     sudo -- sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' 
  4. 在计算机上启用nat

     sudo iptables -t nat -F sudo iptables -t nat -A POSTROUTING -j MASQUERADE 
  5. 在您的计算机上连接到您的Android设备

     adb shell su 
  6. 然后你已经有了连接,你可以用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) 

您可以将默认路由添加到您使用busybox route add default gw 192.168.42.135 dev rndis0 2点修复的计算机网络地址,这就是它(您可以使用busybox route命令检查路由)

脚本

我做了一个脚本,我在启用USB Tethering选项(上面的第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'" 

我找到了一个很棒的工具https://github.com/vvviperrr/SimpleRT 。 它使用起来非常简单,并且不需要手机上的root权限。

我使用安装在笔记本电脑上的Sony Z3 Compact和Ubuntu 16.10测试了SimpleRT。

步骤如下:

  1. 安装APK在SimpleRT上提供
  2. 克隆SimpleRT Git仓库,或者只选择“下载ZIP”
  3. 使用终端查找您的活动Internet界面:
    路线|  grep'^ default'|  grep -o'[^] * $'
    
  4. 从上面的命令替换simple-rt-cli / iface_up.sh LOCAL_INTERFACE值。
  5. 在simple-rt-cli目录中输入“make”。
  6. 以root身份运行终端并启动CLI:
     ./simple-rt
    
  7. 使用USB线连接手机

问题(取自官方页面):由于ConnectivityManager政策,某些应用程序无法识别反向连接的互联网连接。 只需保持WiFi或3g连接处于活动状态,无论如何连接都将通过SimpleRT。